Hitungan byte mengasumsikan penyandian ISO 8859-1.
10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?
,(1*)
$.1
Cobalah online!
Penjelasan
Implementasi lain dari ...% 11% 10 algoritma. Bagian yang menyenangkan dari melakukannya dengan regex adalah bahwa kita dapat menangani kedua perhitungan modulo sekaligus.
10$*
Menginisialisasi string menjadi sepuluh 1s.
1
,1$`
Ganti masing-masing dengan koma, satu, dan awalan di depan yang itu. Ini memberi ,1,11,...,1111111111, yaitu kisaran unary.
,1+
$_¶
Sekarang ganti masing-masing elemen rentang dengan seluruh string diikuti oleh umpan baris. Ini memberi kami kotak 10x10 angka unary yang menunjukkan kolom saat ini.
(?<=(¶?.+)+)1
$#1$*
Cocokkan masing 1- masing dan tentukan baris mana yang aktif dengan mengulangi grup yang berkali-kali. Ganti 1dengan yang banyak 1s. Ini mengalikan nilai di setiap baris dengan indeks berbasis 1 baris.
1{10}1?
Sekarang mari kita lakukan mod 11, mod 10 dalam satu langkah. Untuk melakukan mod 11 , kami biasanya hanya menghapus semua 1{11}dari string yang tersisa dengan sisanya. Dan kemudian kami akan menghapus 1{10}setelah itu. Tetapi jika kita hanya menghapus sepuluh 1s ditambah yang lain jika mungkin, keserakahan mesin regex akan melakukannya mod 11 untuk kita selama mungkin, dan jika tidak, maka itu akan mencoba setidaknya mod 10 .
,(1*)
$.1
Akhirnya, kami hanya mengonversi setiap angka menjadi desimal dengan menggantinya dengan panjangnya.