Sfida
Scrivi il programma o la funzione più breve per calcolare l' algoritmo Luhn per la verifica dei numeri (carta di credito).
Spiegazione dell'algoritmo Luhn
Da RosettaCode , questo algoritmo ai fini di questa sfida è specificato come tale, con l'input di esempio di 49927398716
:
Reverse the digits, make an array:
6, 1, 7, 8, 9, 3, 7, 2, 9, 9, 4
Double the numbers in odd indexes:
6, 2, 7, 16, 9, 6, 7, 4, 9, 18, 4
Sum the digits in each number:
6, 2, 7, 7, 9, 6, 7, 4, 9, 9, 4
Sum all of the numbers:
6 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 4 = 70
If the sum modulo 10 is 0, then the number is valid:
70 % 10 = 0 => valid
Regole IO
Input : una stringa o un numero (a tua scelta), nel formato di input / output della tua lingua preferito
Output : un valore di verità o falsa , rispettivamente, che indica se l'input è valido o meno secondo il test sopra.
Note / Suggerimenti
Cerca di non pubblicare accidentalmente la tua carta di credito o i tuoi numeri di conto, se li usi per testare :)
Se l'input non è valido e impossibile da elaborare con l'algoritmo specificato (ovvero, troppo corto per funzionare), puoi fare quello che vuoi, incluso far esplodere il mio computer.
Tuttavia , il proiettile precedente non significa che la tua lingua possa fare quello che vuole con numeri troppo grandi per essere gestiti. Se la tua lingua non è in grado di gestire un caso di prova, considera di prendere una stringa come input.
Esempi
I seguenti esempi sono stati validati con questo script Python ; se ritieni che uno abbia torto o hai una domanda, esegui semplicemente il ping su @cat.
49927398716 True
49927398717 False
1234567812345670 True
1234567812345678 False
79927398710 False
79927398711 False
79927398712 False
79927398713 True
79927398714 False
79927398715 False
79927398716 False
79927398717 False
79927398718 False
79927398719 False
374652346956782346957823694857692364857368475368 True
374652346956782346957823694857692364857387456834 False
8 False **
0 True **
** secondo l'implementazione di Python, ma puoi fare qualsiasi cosa perché questi sono troppo corti per essere idonei da una stretta aderenza alle specifiche.
Se una qualsiasi delle risposte precedenti invalida le risposte esistenti (anche se credo che ciò non dovrebbe essere possibile), tali risposte sono ancora valide. Tuttavia, le nuove risposte, per essere valide, devono seguire le specifiche di cui sopra.