Cấu trúc thư mục Cấu trúc đồ họa


9

Chuyển đổi cấu trúc thư mục cổ điển như thế này:

config.yml
drafts
    begin-with-the-crazy-ideas.textile
    on-simplicity-in-technology.markdown
includes
    footer.html
    header.html

Vào đây

.
├── config.yml
├── drafts
|   ├── begin-with-the-crazy-ideas.textile
|   └── on-simplicity-in-technology.markdown
└── includes
    ├── footer.html
    └── header.html
  • Bốn không gian xác định một thư mục lồng nhau hoặc tệp của thư mục trên.
  • Các loại lồng nhau cho phép có thể thay đổi.

Cập nhật

  • tên tệp : tên tệp Linux hợp lệ không có dấu cách và nguồn cấp: bất kỳ byte nào ngoại trừ NUL, /spaces,linefeeds
  • vẽ nhân vật:
    • | đường dọc (U + 007C)
    • hộp vẽ ngang nhẹ (U + 2500)
    • bản vẽ hộp ánh sáng dọc và bên phải (U + 251C)

Người chiến thắng : Mã ngắn nhất tính bằng byte thắng!


1
Chào mừng đến với PPCG! Bài đăng đầu tiên rất hay!
Rɪᴋᴇʀ

Các đường thẳng đứng được cho là \ x7C Đường thẳng đứng hay \ u2502 Bản vẽ hộp sáng dọc?
Neil

@Neil Tôi không biết về "Hộp vẽ dọc sáng", tôi đã sử dụng "Đường dọc" trong ví dụ và đã có hai câu trả lời với điều đó. Dù sao đi nữa cũng sẽ có ý nghĩa hơn khi sử dụng cái trước bởi vì hai ký tự còn lại là loại Bản vẽ Hộp , tôi có nên cập nhật câu hỏi với \ u2502 không?
marcanuy

Vì tôi không thể dễ dàng nhập các ký tự vẽ hộp vào REPL mà tôi chọn, tôi đã viết câu trả lời của mình bằng các ký tự L, + và - và sau đó điều chỉnh điểm số tin rằng bạn đang sử dụng các ký tự vẽ hộp trong suốt, mặc dù thực tế tôi chỉ sao chép và dán từ câu hỏi của bạn mà không cần kiểm tra. Nếu đường thẳng đứng có thể chấp nhận được, tôi có thể giảm điểm của mình đi 1.
Neil

1
Tuyệt vời, vì bây giờ nó lưu 2 byte vào câu trả lời mới của tôi!
Neil

Câu trả lời:


2

Võng mạc , 88 byte

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 , 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 1vớ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 |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.


Xin giải thích?
Neil

@Neil Có bạn đi.
Martin Ender

Nó sẽ giúp sử dụng +`(?<=(.*))\|(?!.+¶\1[|├])(không gian) +`(?<=(.*))├(?!.+¶\1[│├└]) ?
Neil

@Neil Tôi đã thử một cái gì đó như thế nhưng tôi không nghĩ rằng tôi đã quản lý để lưu byte với nó.
Martin Ender

Ý tưởng mới:m`^ * $&└── T+` └`|├`(?<=(.*)).(?=.+¶\1[|└])
Neil

2

JavaScript (ES6), 237 128 byte

f=(s,r=`.\n`+s.replace(/^ */gm,"$&└── "),q=r.replace(/^(.*)( |└)(?=.+\n\1[|└])/m,(_,i,j)=>i+`|├`[+(j>' ')]))=>q==r?r:f(s,q)

Trường hợp \nđại diện cho nhân vật dòng chữ mới. Giải thích: rđược tạo từ sbằng cách thêm vào .dòng và chèn └──vào cuối của thụt lề của mỗi dòng. Điều này bây giờ là chính xác cho dòng cuối cùng của đầu vào, nhưng mỗi dòng phải được "mở rộng" lên càng xa càng tốt. Đây là công việc của q, tìm kiếm một và đệ quy thay thế các khoảng trắng ngay phía trên nó bằng |s trừ khi nó đến một cái khác được chuyển thành thay thế. Đệ quy kết thúc khi không thể thay thế thêm. Lưu ý rằng nếu ký tự phía trên là khoảng trắng hoặc a thì văn bản ở bên trái luôn luôn giống với ký tự trên dòng trước để tôi chỉ có thể sử dụng\1 để kiểm tra xem một ký tự nằm trên ký tự kia.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.