Số lượng byte giả định mã hóa ISO 8859-1.
10$*
1
,1$`
,1+
$_¶
(?<=(¶?.+)+)1
$#1$*
1{10}1?
,(1*)
$.1
Hãy thử trực tuyến!
Giải trình
Một triển khai khác của thuật toán ...% 11% 10 . Điều thú vị khi thực hiện nó với regex là chúng ta có thể chăm sóc cả hai tính toán modulo cùng một lúc.
10$*
Khởi tạo chuỗi thành mười 1
s.
1
,1$`
Thay thế từng cái bằng dấu phẩy, một và tiền tố ở phía trước cái đó. Điều này cho ,1,11,...,1111111111
, tức là một phạm vi unary.
,1+
$_¶
Bây giờ thay thế từng thành phần phạm vi bằng toàn bộ chuỗi theo sau là một nguồn cấp dữ liệu. Điều này cung cấp cho chúng ta một lưới 10 x 10 số đơn vị cho biết cột hiện tại.
(?<=(¶?.+)+)1
$#1$*
Ghép từng hàng 1
và xác định hàng nào trên đó bằng cách lặp lại nhóm một lần nhiều lần. Thay thế 1
bằng nhiều 1
s. Điều này nhân các giá trị trong mỗi hàng theo chỉ số dựa trên 1 của hàng.
1{10}1?
Bây giờ chúng ta hãy làm mod 11, mod 10 trong một bước. Để thực hiện mod 11 , thông thường chúng ta chỉ cần xóa tất cả 1{11}
khỏi chuỗi còn lại với phần còn lại. Và sau đó chúng tôi sẽ loại bỏ 1{10}
sau đó. Nhưng nếu chúng ta chỉ loại bỏ mười 1
giây cộng với nhau nếu có thể, sự tham lam của công cụ regex sẽ làm mod 11 cho chúng ta càng lâu càng tốt, và nếu không, thì nó sẽ thử ít nhất là mod 10 .
,(1*)
$.1
Cuối cùng, chúng tôi chỉ cần chuyển đổi từng số thành số thập phân bằng cách thay thế nó bằng độ dài của nó.