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 1
s.
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 1
dengan yang banyak 1
s. 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 1
s 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.