Кількість байтів передбачає кодування ISO 8859-1.
10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?
,(1*)
$.1
Спробуйте в Інтернеті!
Пояснення
Ще одна реалізація алгоритму ...% 11% 10 . Найцікавіше, що робити це за допомогою регулярного вираження - це те, що ми можемо подбати про обидва модульні обчислення одночасно.
10$*
Ініціалізуйте рядок до десяти 1
с.
1
,1$`
Замініть кожного з них комою, одиницею та префіксом перед цим. Це дає ,1,11,...,1111111111
, тобто одинарний діапазон.
,1+
$_¶
Тепер замініть кожен з елементів діапазону на весь рядок, за яким слідує подача рядків. Це дає нам сітку 10х10 одиничних чисел, що вказують на поточний стовпець.
(?<=(¶?.+)+)1
$#1$*
Зрівняйте кожен 1
і визначте, на якому рядку він повторюється, повторивши груповий той, що багато разів. Замініть на 1
стільки 1
с. Це помножує значення в кожному рядку на індекс на основі рядка.
1{10}1?
Тепер давайте зробимо mod 11, mod 10 в один крок. Щоб зробити модуль 11 , ми зазвичай просто видалимо все, 1{11}
що залишилося з залишками. І тоді ми зняли б 1{10}
після цього. Але якщо ми просто видалимо десять 1
s плюс іншу, якщо можливо, жадібність двигуна регулярного вимикання зробить mod 11 для нас якомога довше, а якщо ні, то він спробує принаймні mod 10 .
,(1*)
$.1
Нарешті, ми просто перетворюємо кожне число в десятковий, замінюючи його на його довжину.