Dal libro Pensa come un programmatore (sottolineatura mia)
The Luhn formula is a widely used system for validating identification numbers. Using the original number, double the value of every other digit. Then add the values of the individual digits together (if a doubled value now has two digits, add the digits individually). The identification number is valid if the sum is divisible by 10. Write a program that takes an identification number of arbitrary length and determines whether the number is valid under the Luhn formula. The program must process each character before reading the next one.
In senso più ampio, cosa significa elaborare ogni personaggio prima di leggere quello successivo? Cosa sembra sintatticamente? Cosa significa il contrario e cosa significa it sintatticamente?
Aggiornamento:
Per qualche background, ecco il mio tentativo di risolvere il problema (in JavaScript):
Array.prototype.sum = function() {
var sum = 0,
itemCount = this.length,
i;
for(i = 0; i <= itemCount - 1; i++) {
sum += this[i];
}
return sum;
}
function validateNumberWithLuhnForumla(number) {
var numbersArray = number.toString().split(''),
numberCount = numbersArray.length,
i = 0,
isValid = false,
doubledDigit,
checksum,
numbersToSum = [];
for(i = 0; i <= numberCount - 1; i++) {
if(i % 2 > 0 && i > 0) {
doubledDigit = numbersArray[i] * 2;
if(doubledDigit > 9) {
numbersToSum.push(1, (doubledDigit - 10));
} else {
numbersToSum.push(doubledDigit);
}
}
}
checkSum = numbersToSum.sum();
if(checkSum % 10 === 0) {
isValid = true;
}
return isValid;
}