El recuento de bytes asume la codificación ISO 8859-1.
10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?
,(1*)
$.1
Pruébalo en línea!
Explicación
Otra implementación del algoritmo ...% 11% 10 . La parte divertida de hacerlo con una expresión regular es que podemos ocuparnos de ambos cálculos de módulo a la vez.
10$*
Inicialice la cadena a diez 1
s.
1
,1$`
Reemplace cada una de ellas con una coma, una y el prefijo delante de esa. Esto da ,1,11,...,1111111111
, es decir, un rango unario.
,1+
$_¶
Ahora reemplace cada uno de los elementos de rango con la cadena completa seguida de un salto de línea. Esto nos da una cuadrícula de 10x10 de números unarios que indica la columna actual.
(?<=(¶?.+)+)1
$#1$*
Haga coincidir cada uno 1
y determine en qué fila está repitiendo el grupo uno tantas veces. Reemplace el 1
con ese 1
s. Esto multiplica los valores en cada fila por el índice basado en 1 de la fila.
1{10}1?
Ahora hagamos mod 11, mod 10 en un solo paso. Para hacer el mod 11 , normalmente solo eliminaríamos todo 1{11}
de la cadena para dejar el resto. Y luego lo eliminaríamos 1{10}
después de eso. Pero si solo eliminamos diez 1
s más otro si es posible, la codicia del motor regex hará el mod 11 para nosotros el mayor tiempo posible, y si no, intentará al menos el mod 10 .
,(1*)
$.1
Finalmente, simplemente convertimos cada número a decimal reemplazándolo por su longitud.