Le nombre d'octets suppose un codage ISO 8859-1.
10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?
,(1*)
$.1
Essayez-le en ligne!
Explication
Une autre implémentation de l' algorithme ...% 11% 10 . La partie amusante de le faire avec une expression régulière est que nous pouvons prendre en charge les deux calculs modulo à la fois.
10$*
Initialisez la chaîne à dix 1
s.
1
,1$`
Remplacez chacun de ceux-ci par une virgule, un et le préfixe devant celui-ci. Cela donne ,1,11,...,1111111111
, c'est-à-dire une plage unaire.
,1+
$_¶
Remplacez maintenant chacun des éléments de la plage par la chaîne entière suivie d'un saut de ligne. Cela nous donne une grille de 10x10 de nombres unaires indiquant la colonne actuelle.
(?<=(¶?.+)+)1
$#1$*
Faites correspondre chacun d'eux 1
et déterminez sur quelle ligne il se trouve en répétant le groupe plusieurs fois. Remplacez le 1
par autant de 1
s. Cela multiplie les valeurs de chaque ligne par l'index basé sur 1 de la ligne.
1{10}1?
Maintenant, faisons le mod 11, le mod 10 en une seule étape. Pour faire le mod 11 , nous retirons normalement tout 1{11}
de la chaîne pour laisser les restes. Et puis nous supprimerions 1{10}
après cela. Mais si nous supprimons simplement dix 1
s plus un autre si possible, la gourmandise du moteur regex fera le mod 11 pour nous aussi longtemps que possible, et sinon, il essaiera au moins le mod 10 .
,(1*)
$.1
Enfin, nous convertissons simplement chaque nombre en décimal en le remplaçant par sa longueur.