As a coding experiment, I adapted Trygve Reenskoug's code to my Smalltalk compiler, put in my code slightly tweaked, and benchmarked them on randomly generated data.
Result: a factor of 6.3. In Squeak it was a factor of ten. I had not, in all honesty, expected it to to be so high. On Tue, 5 May 2020 at 02:00, Trygve Reenskaug <tryg...@ifi.uio.no> wrote: > > A coding experiment. > Consider a Scrum development environment. Every programming team has an end > user as a member. > The team's task is to code a credit card validity check. > A first goal is that the user representative shall read the code and agree > that it is a correct rendering of their code checker: > > luhnTest: trialNumber > | s1 odd s2 even charValue reverse | > ----------------------------------------------- > " Luhn test according to Rosetta" > "Reverse the order of the digits in the number." > reverse := trialNumber reversed. > "Take the first, third, ... and every other odd digit in the reversed digits > and sum them to form the partial sum s1" > s1 := 0. > odd := true. > reverse do: > [:char | > odd > ifTrue: [ > s1 := s1 + char digitValue. > ]. > odd := odd not > ]. > "Taking the second, fourth ... and every other even digit in the reversed > digits: > Multiply each digit by two and sum the digits if the answer is greater than > nine to form partial sums for the even digits" > "The subtracting 9 gives the same answer. " > "Sum the partial sums of the even digits to form s2" > s2 := 0. > even := false. > reverse do: > [:char | > even > ifTrue: [ > charValue := char digitValue * 2. > charValue > 9 ifTrue: [charValue := charValue - 9]. > s2 := s2 + charValue > ]. > even := even not > ]. > "If s1 + s2 ends in zero then the original number is in the form of a valid > credit card number as verified by the Luhn test." > ^(s1 + s2) asString last = $0 > --------------------------------- > Once this step is completed, the next step will be to make the code right > without altering the algorithm (refactoring). The result should be readable > and follow the team's conventions. > > > P.S. code attached.