Es gibt beliebte Prüfziffernalgorithmen wie Luhn und gute , zum Beispiel den Damm-Algorithmus. Der einzige mögliche Grund für die Popularität von Algorithmen wie Luhn ist, dass es Code-Golf-Implementierungen von ihnen gibt. Dies bedeutet, dass wir als Gemeinschaft die Macht haben, die Welt zu verändern, indem wir Golf-Implementierungen besserer Algorithmen bereitstellen.
Diese Herausforderung besteht also darin, die Welt zu verändern, indem Sie eine Funktion oder ein komplettes Programm in der Sprache Ihrer Wahl schreiben, das mithilfe des Damm-Algorithmus eine Prüfziffer berechnet . Die Antwort mit der geringsten Anzahl von Zeichen (nicht Bytes) wird in wenigen Wochen als Gewinner ausgewählt. Beachten Sie, dass alle Hilfsfunktionen und die Deklaration der Operationstabelle in der Zeichenanzahl enthalten sein müssen. Im Falle eines Unentschieden wird die beliebteste Antwort gewählt.
Dieser Algorithmus dreht sich um eine Operationstabelle, die eine schwach vollständig antisymmetrische Quasigruppe der Ordnung 10 sein muss. Die Operationstabelle, die in dem Wikipedia-Artikel über den Damm-Algorithmus zu finden ist, ist diejenige, die bei dieser Herausforderung verwendet werden soll. Der Vollständigkeit halber werde ich es unten wiedergeben:
| 0 1 2 3 4 5 6 7 8 9
----+----------------------------------------
0 | 0 3 1 7 5 9 8 6 4 2
1 | 7 0 9 2 1 5 4 8 6 3
2 | 4 2 0 6 8 7 1 3 5 9
3 | 1 7 5 0 9 8 3 4 2 6
4 | 6 1 2 3 0 4 5 9 7 8
5 | 3 6 7 4 2 0 9 5 8 1
6 | 5 8 6 9 7 2 0 1 3 4
7 | 8 9 4 5 3 6 2 0 1 7
8 | 9 4 3 8 6 1 7 2 0 5
9 | 2 5 8 1 4 3 6 7 9 0
Kurz gesagt (für Details siehe Wikipedia-Artikel ), funktioniert der Algorithmus wie folgt:
- Sie beginnen mit einer Liste der zu verarbeitenden Ziffern und einer Zwischenziffer, die auf 0 gesetzt ist.
- Für jede Ziffer in der Liste berechnen Sie eine neue Zwischenziffer, indem Sie die Ziffer als Spaltenindex und die vorherige Zwischenziffer als Zeilenindex verwenden.
- Die letzte Zwischenziffer ist die Prüfziffer. Wenn Sie eine Nummer validieren, für die bereits eine Prüfziffer hinzugefügt wurde, ist die letzte Zwischenziffer 0, wenn die Nummer gültig ist.
Ihr Programm oder Ihre Funktion muss eine Zeichenfolge akzeptieren, die beliebige Zeichen außer null enthalten kann, sich jedoch nur mit den Ziffern in der Zeichenfolge befassen sollte. Es muss entweder die ursprüngliche Zeichenfolge mit der angehängten berechneten Prüfziffer drucken (falls ein Programm vorhanden ist) oder zurückgeben (falls eine Funktion vorhanden ist). Wenn Sie ein Programm schreiben möchten, akzeptiert das Programm die Eingabe entweder als Argument oder als Standardeingabe. Wenn die Eingabezeichenfolge leer ist oder keine Ziffern enthält, müssen Sie eine Null zurückgeben oder anhängen.
Einige Beispiele:
Input | Output
------------+-------------
42 | 427
427 | 4270
2 to 2 | 2 to 29
23 42 76- | 23 42 76-5
- | -0