Liczba bajtów zakłada kodowanie ISO 8859-1.
10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?
,(1*)
$.1
Wypróbuj online!
Wyjaśnienie
Kolejna implementacja ...% 11% 10 algorytmu. Zabawne jest to, że wykonywanie wyrażeń regularnych polega na tym, że możemy zająć się oboma obliczeniami modulo naraz.
10$*
Zainicjuj ciąg do dziesięciu 1
sekund.
1
,1$`
Zastąp każdy z nich przecinkiem, jednym i przedrostkiem przed tym. Daje to ,1,11,...,1111111111
, tj. Jednoargumentowy zasięg.
,1+
$_¶
Teraz zamień każdy z elementów zakresu na cały ciąg znaków, a następnie na linię. To daje nam siatkę 10x10 liczb jednostkowych wskazujących bieżącą kolumnę.
(?<=(¶?.+)+)1
$#1$*
Dopasuj każdy 1
i określ, który wiersz jest włączony, powtarzając grupę jeden razy. Zamień na 1
tyle 1
s. Mnoży to wartości w każdym wierszu przez indeks oparty na 1 wierszu.
1{10}1?
Teraz zróbmy mod 11, mod 10 w jednym kroku. Aby wykonać mod 11 , zwykle po prostu usuwamy wszystko 1{11}
z łańcucha, który ma pozostać z resztą. A potem usuwamy 1{10}
. Ale jeśli po prostu usuniemy dziesięć 1
s plus inne, jeśli to możliwe, zachłanność silnika regex zrobi dla nas mod 11 tak długo, jak to możliwe, a jeśli nie, to spróbuje przynajmniej mod 10 .
,(1*)
$.1
Na koniec konwertujemy każdą liczbę na dziesiętną, zastępując ją długością.