m`^ *
$&├──
{4}
|
T+`|├` └`(?<=(.)*).(?!.+¶(?>(?<-1>.)*)[|├└])
^
.¶
Hãy thử trực tuyến!
Tôi cho rằng tôi về mặt kỹ thuật có thể đếm này như một byte cho mỗi nhân vật bằng cách trao đổi một số nhân vật, đọc nguồn như ISO 8859-1 và sau đó tìm một mã hóa byte đơn cho sản lượng chứa ├
và └
, nhưng tôi không thể bị làm phiền đến công việc ra các chi tiết ngay bây giờ. (Đối với bản ghi, đó sẽ là 72 byte.)
Giải trình
Giai đoạn 1: Thay thế
m`^ *
$&├──
Chúng tôi bắt đầu bằng cách khớp với vết lõm trên mỗi dòng và chèn ├──
.
Giai đoạn 2: Thay thế
{4}
|
Tiếp theo, chúng tôi khớp mọi nhóm 4 không gian và thay thế khoảng trống đầu tiên bằng a |
. Bây giờ tất cả những gì cần sửa là |
đi đến dưới cùng của đầu ra và ├
điều đó nên được └
. Cả hai trường hợp đó đều có thể được nhận ra bằng cách nhìn vào nhân vật ngay bên dưới trường hợp chúng ta có khả năng muốn thay đổi.
Giai đoạn 3: Chuyển ngữ
T+`|├` └`(?<=(.)*).(?!.+¶(?>(?<-1>.)*)[|├└])
Các (?<=(.)*)
đếm có bao nhiêu nhân vật đứng trước trận đấu trên dòng hiện tại để đo vị trí nằm ngang của nó. Sau đó, lookahead chuyển sang dòng tiếp theo .+¶
, khớp với nhiều ký tự mà chúng ta đã bắt trong nhóm 1
với (?>(?<-1>.)*)
(để tiến tới cùng một vị trí nằm ngang) và sau đó kiểm tra xem ký tự tiếp theo (tức là ký tự bên dưới khớp thực tế) có phải là một trong |├└
. Nếu đó là trường hợp, trận đấu thất bại, và trong tất cả các trường hợp khác, nó thành công và giai đoạn thay thế không gian cho |
và └
cho ├
.
Điều này sẽ không sửa tất cả các ký tự trong một lần chạy, vì vậy chúng tôi áp dụng giai đoạn này nhiều lần với +
tùy chọn cho đến khi đầu ra ngừng thay đổi.
Giai đoạn 4: Thay thế
^
.¶
Tất cả những gì còn lại là dòng đầu tiên, vì vậy chúng tôi chỉ cần khớp phần đầu của chuỗi và thêm vào một .
và một nguồn cấp dữ liệu.