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
Antworten:
Pyth, 49 Zeichen
Enthält Gott weiß, welche Zeichen, also hier ist ein Python3-Programm, um das obige Programm genau auf Ihrem Computer zu generieren:
Erläuterung:
quelle
CJam, 54 Zeichen
Es gibt ein nicht druckbares Zeichen, daher möchten Sie möglicherweise den folgenden Permalink verwenden.
Teste es hier.
Erläuterung
Die Zwischenziffer wird nachverfolgt
T
, die CJam auf 0 initialisiert.quelle
Python 3,
149 141138 ZeichenBeispiele:
Vielen Dank an @MegaTom und @Sieg, die dabei geholfen haben, insgesamt 11 Zeichen zu entfernen
quelle
Ruby, 149 Zeichen
Auf repl.it getestet
quelle
J, 117 Bytes
Enthält nur druckbare ASCII-Dateien. (Ich hatte Schwierigkeiten mit J und Unicode.) Erzeugt die Übergangstabelle aus den Permutationsindizes der Zeilen.
Verwendung:
Probieren Sie es hier online aus.
quelle
Haskell, 131 Zeichen
Testlauf:
quelle
k, 36 Zeichen
q, 40 Zeichen (entspricht der Implementierung von k)
quelle