A contagem de bytes assume a codificação ISO 8859-1.
10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?
,(1*)
$.1
Experimente online!
Explicação
Outra implementação do ...% 11% 10 . A parte divertida de fazer isso com um regex é que podemos cuidar dos dois cálculos de módulo de uma só vez.
10$*
Inicialize a string para dez 1
s.
1
,1$`
Substitua cada uma delas por vírgula, uma e o prefixo na frente dessa. Isso dá ,1,11,...,1111111111
, ou seja, um alcance unário.
,1+
$_¶
Agora substitua cada um dos elementos do intervalo pela sequência inteira seguida por um avanço de linha. Isso nos fornece uma grade de 10x10 de números unários, indicando a coluna atual.
(?<=(¶?.+)+)1
$#1$*
Combine cada um 1
e determine em qual linha está repetindo o grupo um várias vezes. Substitua 1
por tantos 1
s. Isso multiplica os valores em cada linha pelo índice baseado em 1 da linha.
1{10}1?
Agora vamos fazer o mod 11, o mod 10 em uma etapa. Para fazer o mod 11 , normalmente removíamos tudo 1{11}
da string a ser deixada com o restante. E depois removeríamos 1{10}
depois disso. Mas se apenas removermos dez 1
s mais outro, se possível, a ganância do mecanismo de expressão regular fará o mod 11 por nós o máximo de tempo possível; caso contrário, tentará pelo menos o mod 10 .
,(1*)
$.1
Finalmente, apenas convertemos cada número em decimal, substituindo-o pelo seu comprimento.