Hi,

#isPangramIn: should probably use #asLowercase as well:

'The quick brown fox jumps over a lazy dog' isEnglishPangram "false -- now the $t is missing, there is only $T"


Kicking things off, here are my solutions:

isPangramAllSatisfyIn: alphabet "Just a small change to the original." | lowercase | lowercase := self asLowercase. ^ alphabet allSatisfy: [ :aChar | lowercase includes: aChar ]

isPangramCopyWithoutAllIn: alphabet ^ (alphabet copyWithoutAll: self asLowercase) isEmpty

isPangramDifferenceIn: alphabet ^ (alphabet difference: self asLowercase) isEmpty


The performance:

[ 'The quick brown fox jumps over the lazy dog' isPangramIn: 'abcdefghijklmnopqrstuvwxyz' ] bench. "182,096 per second (I added #asLowercase here as well)" [ 'The quick brown fox jumps over the lazy dog' isPangramAllSatisfyIn: 'abcdefghijklmnopqrstuvwxyz' ] bench. "159,546 per second" [ 'The quick brown fox jumps over the lazy dog' isPangramCopyWithoutAllIn: 'abcdefghijklmnopqrstuvwxyz' ] bench. "159,850 per second" [ 'The quick brown fox jumps over the lazy dog' isPangramDifferenceIn: 'abcdefghijklmnopqrstuvwxyz' ] bench. "25,400 per second"


Michal


On 12.11.2016 09:07, stepharo wrote:
Hi

If you have some comments :)

Stef and Thibaut




testIsEnglishPangram

self assert: 'the quick brown fox jumps over the lazy dog' isEnglishPangram.
    self assert: 'the five boxing wizards jump quickly' isEnglishPangram.
self deny: 'the quick brown fox jumps over the dog' isEnglishPangram.

testIsPangramIn

self assert: ('The quick brown fox jumps over the lazy dog' isPangramIn: 'abcdefghijklmnopqrstuvwxyz').
    self assert: ('ma papa mama' isPangramIn: 'apm').

[[[
'portez ce vieux whisky au juge blond qui fume' isEnglishPangram
>>> true

'portons dix bons whiskys à l''avocat goujat qui fume au zoo.' isEnglishPangram
>>> true
]]]


isEnglishPangram
"Returns true is the receiver is a pangram i.e., that it uses all the characters of a given alphabet."
    "'The quick brown fox jumps over the lazy dog' isEnglishPangram
    >>> true"
    "'The quick brown fox jumps over the dog' isEnglishPangram
    >>> false"

    ^ self isPangramIn: 'abcdefghijklmnopqrstuvwxyz'.

isPangramIn: alphabet
"Returns true is the receiver is a pangram i.e., that it uses all the characters of a given alphabet." "'The quick brown fox jumps over the lazy dog' isPangramIn: 'abcdefghijklmnopqrstuvwxyz'
    >>> true"
    "'tata' isPangramIn: 'at'
    >>> true"

    alphabet do: [ :aChar |
        (self includes: aChar)
            ifFalse: [ ^ false ]
        ].
    ^ true



Reply via email to