��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.