Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?
,(1*)
$.1
Probieren Sie es online!
Erläuterung
Eine weitere Implementierung des ...% 11% 10- Algorithmus. Der spaßige Teil mit einer Regex ist, dass wir beide Modulo-Berechnungen gleichzeitig erledigen können.
10$*
Initialisieren Sie die Zeichenfolge auf zehn 1
Sekunden.
1
,1$`
Ersetzen Sie diese durch ein Komma, ein Eins und das Präfix davor. Dies ergibt ,1,11,...,1111111111
also einen unären Bereich.
,1+
$_¶
Ersetzen Sie nun jedes der Bereichselemente durch die gesamte Zeichenfolge, gefolgt von einem Zeilenvorschub. Dies ergibt ein 10x10-Raster von unären Zahlen, die die aktuelle Spalte angeben.
(?<=(¶?.+)+)1
$#1$*
Ordnen Sie jede zu 1
und bestimmen Sie, in welcher Zeile sie sich befindet, indem Sie die Gruppe eine so oft wiederholen. Ersetzen Sie die 1
durch so viele 1
s. Dies multipliziert die Werte in jeder Zeile mit dem auf 1 basierenden Index der Zeile.
1{10}1?
Jetzt machen wir Mod 11, Mod 10 in einem Schritt. Um Mod 11 zu machen , entfernen wir normalerweise einfach alles 1{11}
von der Zeichenkette, um die restlichen Zeichen zu erhalten. Und dann würden wir danach entfernen 1{10}
. Aber wenn wir nur zehn 1
s plus eine weitere entfernen , wird die Gier der Regex-Engine so lange wie möglich Mod 11 für uns tun , und wenn nicht, wird es mindestens Mod 10 versuchen .
,(1*)
$.1
Schließlich konvertieren wir einfach jede Zahl in eine Dezimalzahl, indem wir sie durch ihre Länge ersetzen.