Με δεδομένο έναν αριθμό, προσδιόρισε αν είναι έγκυρος σύμφωνα με τον τύπο του Luhn.
Ο αλγόριθμος Luhn είναι ένας απλός τύπος αθροίσματος ελέγχου που χρησιμοποιείται για την επικύρωση ποικίλων αριθμών ταυτοποίησης, όπως αριθμοί πιστωτικών καρτών και αριθμοί κοινωνικής ασφάλισης του Καναδά.
Ο στόχος είναι να ελέγξεις αν μια δεδομένη συμβολοσειρά είναι έγκυρη.
Συμβολοσειρές μήκους 1 ή μικρότερου δεν είναι έγκυρες. Τα κενά επιτρέπονται στην είσοδο, αλλά θα πρέπει να αφαιρούνται πριν από τον έλεγχο. Όλοι οι άλλοι χαρακτήρες που δεν είναι ψηφία δεν επιτρέπονται.
4539 3195 0343 6467
Το πρώτο βήμα του αλγορίθμου Luhn είναι να διπλασιάσεις κάθε δεύτερο ψηφίο, ξεκινώντας από τα δεξιά. Θα διπλασιάσουμε
4539 3195 0343 6467
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ (double these)
Αν ο διπλασιασμός του αριθμού δώσει αποτέλεσμα μεγαλύτερο του 9, τότε αφαίρεσε το 9 από το γινόμενο. Τα αποτελέσματα του διπλασιασμού μας:
8569 6195 0383 3437
Έπειτα άθροισε όλα τα ψηφία:
8+5+6+9+6+1+9+5+0+3+8+3+3+4+3+7 = 80
Αν το άθροισμα διαιρείται ακριβώς με το 10, τότε ο αριθμός είναι έγκυρος. Αυτός ο αριθμός είναι έγκυρος!
8273 1232 7352 0569
Διπλασίασε τα δεύτερα ψηφία, ξεκινώντας από τα δεξιά
7253 2262 5312 0539
Άθροισε τα ψηφία
7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57
Το 57 δεν διαιρείται ακριβώς με το 10, οπότε αυτός ο αριθμός δεν είναι έγκυρος.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Haskell με 107 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.
Εξερευνούμε 8 διαφορετικές εκδοχές του Luhn, ξεκινώντας από μια πολύ τακτοποιημένη υλοποίηση σε Ruby, περνώντας από κάποιες προστακτικές και συναρτησιακές προσεγγίσεις και καταλήγοντας σε μια έκδοση σε SQLite που χρειάστηκε αρκετή δουλειά από τον Erik και τον Jeremy για να την αποκρυπτογραφήσουν!