Konversi struktur direktori klasik seperti ini:
config.yml
drafts
begin-with-the-crazy-ideas.textile
on-simplicity-in-technology.markdown
includes
footer.html
header.html
Ke dalam ini
.
├── config.yml
├── drafts
| ├── begin-with-the-crazy-ideas.textile
| └── on-simplicity-in-technology.markdown
└── includes
├── footer.html
└── header.html
- Empat spasi menentukan folder atau file dari direktori di atas.
- Level kategori bersarang yang diizinkan dapat bervariasi.
Memperbarui
- nama file : nama file Linux yang valid tanpa spasi dan umpan baris: byte apa pun kecuali
NUL
,/
danspaces
,linefeeds
- menggambar karakter:
- | garis vertikal (U + 007C)
- ─ gambar kotak cahaya horisontal (U + 2500)
- ├ kotak gambar cahaya vertikal dan kanan (U + 251C)
Pemenang : Kode Terpendek dalam Bytes menang!
Jawaban:
Retina , 88 byte
Cobalah online!
Saya kira saya bisa secara teknis menghitung ini sebagai satu byte per karakter dengan menukar beberapa karakter, membaca sumber sebagai ISO 8859-1 dan kemudian menemukan pengkodean byte tunggal untuk output yang berisi
├
dan└
, tetapi saya tidak dapat diganggu untuk bekerja Rinciannya sekarang. (Sebagai catatan, itu akan menjadi 72 byte.)Penjelasan
Tahap 1: Substitusi
Kami mulai dengan mencocokkan indentasi pada setiap baris dan memasukkan
├──
.Tahap 2: Substitusi
Selanjutnya, kami mencocokkan setiap grup yang terdiri dari 4 spasi dan mengganti yang pertama dengan a
|
. Sekarang semua yang perlu diperbaiki adalah|
yang menuju ke bagian bawah output dan├
yang seharusnya└
. Kedua kasus tersebut dapat dikenali dengan melihat karakter langsung di bawah yang berpotensi ingin kita ubah.Tahap 3: Transliterasi
The
(?<=(.)*)
jumlah berapa banyak karakter mendahului pertandingan pada baris saat ini untuk mengukur posisi itu horizontal. Kemudian lookahead melompat ke baris berikutnya dengan.+¶
, cocok dengan karakter sebanyak yang kami tangkap dalam grup1
dengan(?>(?<-1>.)*)
(untuk maju ke posisi horizontal yang sama) dan kemudian memeriksa apakah karakter berikutnya (yaitu yang di bawah pertandingan yang sebenarnya) adalah salah satu dari|├└
. Jika itu masalahnya, pertandingan gagal, dan dalam semua kasus lainnya pertandingan berhasil dan panggung menggantikan ruang untuk|
dan└
untuk├
.Ini tidak akan memperbaiki semua karakter dalam sekali jalan, jadi kami menerapkan tahap ini berulang kali dengan
+
opsi sampai output berhenti berubah.Tahap 4: Substitusi
Semua yang tersisa adalah baris pertama, jadi kami cukup mencocokkan awal string dan menambahkan
.
dan linefeed.sumber
+`(?<=(.*))\|(?!.+¶\1[|├])
(spasi)+`(?<=(.*))├(?!.+¶\1[│├└])
└
?m`^ *
$&└──
T+` └`|├`(?<=(.*)).(?=.+¶\1[|└])
JavaScript (ES6),
237128 byteDimana
\n
mewakili karakter baris baru literal. Penjelasan:r
dibuat daris
dengan mendahulukan.
baris dan memasukkan└──
di akhir setiap indentasi baris. Ini sekarang benar untuk baris terakhir dari input, tetapi masing└
- masing harus "diperpanjang" ke atas sejauh mungkin. Ini adalah tugas dariq
, yang mencari└
dan secara rekursif mengganti spasi tepat di atasnya dengan|
s kecuali jika mencapai yang lain└
yang akan berubah menjadi├
gantinya. Rekursi berakhir ketika tidak ada penggantian lebih lanjut yang dapat dilakukan. Perhatikan bahwa jika karakter di atas└
adalah spasi atau└
maka teks di sebelah kiri└
selalu sama dengan yang ada di baris sebelumnya sehingga saya bisa menggunakan\1
untuk menguji bahwa satu karakter di atas yang lain.sumber