Bayt sayımı ISO 8859-1 kodlamasını varsayar.
10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?
,(1*)
$.1
Çevrimiçi deneyin!
açıklama
...% 11% 10 algoritmasının başka bir uygulaması . Regex ile yapmanın eğlenceli kısmı, her iki modulo hesaplamasına da aynı anda bakabilmemizdir.
10$*
Dizeyi on 1s olarak başlatın .
1
,1$`
Bunların her birini virgül, bir tane ve önündeki önek ile değiştirin. Bu ,1,11,...,1111111111, yani bir tekli aralık verir .
,1+
$_¶
Şimdi aralık öğelerinin her birini tüm dizeyle ve ardından bir satır besleme ile değiştirin. Bu bize mevcut sütunu gösteren 10x10 tekli sayı ızgarası verir.
(?<=(¶?.+)+)1
$#1$*
Her 1birini eşleştirin ve grubu bir çok kez tekrarlayarak hangi satırda olduğunu belirleyin. Değiştir 1birçok ile 1s. Bu, her satırdaki değerleri satırın 1 tabanlı diziniyle çarpar.
1{10}1?
Şimdi bir adımda mod 11, mod 10 yapalım . Mod 11'i yapmak için , normalde 1{11}kalanlarla kalan dizeden hepsini kaldırırdık . Ondan sonra çıkarırdık 1{10}. Ancak eğer mümkünse on 1s artı bir tane daha kaldırırsak , regex motorunun açgözlülüğü bizim için olabildiğince uzun mod 11 yapacak ve eğer değilse, en azından mod 10'u deneyecek .
,(1*)
$.1
Son olarak, her sayıyı uzunluğuyla değiştirerek ondalık sayıya dönüştürürüz.