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 1
s 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 1
birini eşleştirin ve grubu bir çok kez tekrarlayarak hangi satırda olduğunu belirleyin. Değiştir 1
birçok ile 1
s. 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 1
s 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.