Структура каталогів Графічне опрацювання


9

Перетворіть класичну структуру каталогів так:

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

У це

.
├── config.yml
├── drafts
|   ├── begin-with-the-crazy-ideas.textile
|   └── on-simplicity-in-technology.markdown
└── includes
    ├── footer.html
    └── header.html
  • Чотири пробіли вказують вкладену папку або файл вищевказаного редактора.
  • Дозволені рівні вкладених категорій можуть змінюватись.

Оновлення

  • імена файлів : дійсні назви файлів Linux без пробілів та ліній передач: будь-який байт, крім NUL, /та spaces,linefeeds
  • малювання символів:
    • | вертикальна лінія (U + 007C)
    • графічні коробки світлого горизонтального (U + 2500)
    • малюнки коробки світла вертикально і праворуч (U + 251C)

Переможець : Найкоротший код у байтах виграє!


1
Ласкаво просимо до PPCG! Гарний перший пост!
Rɪᴋᴇʀ

Чи повинні вертикальні лінії бути \ x7C вертикальною лінією або \ u2502 Малюнки коробки світлою вертикальною?
Ніл

@Neil Мені не було відомо про "Малюнки коробки світлою вертикаллю", я використав "Вертикальну лінію" у прикладі, і вже є дві відповіді на це. Було б більше сенсу використовувати колишній один із них, оскільки два інших символи - тип " Малюнки коробки" , чи варто оновити питання на \ u2502?
marcanuy

Оскільки я не можу легко ввести символи коробки для малювання у свою відповідь за вибором, я написав свою відповідь, використовуючи символи L, + та -, а потім скоригував рахунок, вважаючи, що ви використовуєте символи малювання поля у всьому, хоча я насправді просто скопіював і вставлено з вашого запитання без перевірки. Якщо вертикальна лінія є прийнятною, я міг би знизити свій рахунок на 1.
Ніл

1
Відмінно, адже тепер він зберігає мої 2 байти на моїй новій відповіді!
Ніл

Відповіді:


2

Сітківка , 88 байт

m`^ *
$&├── 
 {4}
|   
T+`|├` └`(?<=(.)*).(?!.+¶(?>(?<-1>.)*)[|├└])
^
.¶

Спробуйте в Інтернеті!

Я припускаю, що я міг би технічно вважати це одним байтом на символ, замінюючи деякі символи, читаючи джерело як ISO 8859-1, а потім знаходив однобайтове кодування для виводу, який містить і , але мені не можна заважати працювати одразу деталі. (Для запису це було б 72 байти.)

Пояснення

Етап 1: Заміна

m`^ *
$&├── 

Почнемо з зіставлення відступів на кожному рядку та вставки ├──.

Етап 2: Заміна

 {4}
|   

Далі ми підбираємо кожну групу з 4 пробілів і замінюємо перший на а |. Тепер все, що потрібно для виправлення, - це |те, що йде в нижній частині результату, і це повинно бути . Обидва ці випадки можна розпізнати, дивлячись на персонажа прямо під тим, який ми, можливо, хочемо змінити.

Етап 3: Транслітерація

T+`|├` └`(?<=(.)*).(?!.+¶(?>(?<-1>.)*)[|├└])

У (?<=(.)*)підраховує , скільки символів передують матч на поточному рядку , щоб виміряти його в горизонтальне положення. Тоді упереджувальний вибірка скаче до наступного рядка з .+¶, сірниками , як багато символів , як ми захопили в групі 1з (?>(?<-1>.)*)(в заздалегідь же горизонтальне положення) , а потім перевіряє , чи є один з наступного символу (тобто один нижчим за фактичний матчу) |├└. Якщо це так, матч виходить з ладу, і в усіх інших випадках це вдається, і сцена замінює пробіли на |і для .

Це не виправить усіх символів за один запуск, тому ми застосовуємо цей етап неодноразово з +опцією, поки вихід не перестане змінюватися.

Етап 4: Заміна

^
.¶

Все, що залишилося, - це перший рядок, тому ми просто співставляємо початок рядка і додаємо a .і linefeed.


Пояснення, будь ласка?
Ніл

@Neil Там ви йдете.
Мартін Ендер

Чи допомогло б це використовувати +`(?<=(.*))\|(?!.+¶\1[|├])(простір) +`(?<=(.*))├(?!.+¶\1[│├└]) ?
Ніл

@Neil Я спробував щось подібне, але я не думаю, що мені вдалося зберегти байти за допомогою нього.
Мартін Ендер

Нова ідея:m`^ * $&└── T+` └`|├`(?<=(.*)).(?=.+¶\1[|└])
Ніл

2

JavaScript (ES6), 237 128 байт

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

Де \nпредставляє буквальний символ нового рядка. Пояснення: rстворюється sшляхом попереднього додавання .рядка та вставки └──в кінці відступу кожного рядка. Тепер це правильно для останнього рядка вводу, але кожен повинен бути «розширений» вгору, наскільки це можливо. Це завдання q, яка здійснює пошук a і рекурсивно замінює пробіли безпосередньо над ним |s, якщо не досягає іншого, який замість цього перетворюється . Рекурсія закінчується, коли не можна проводити ніяких додаткових замін. Зауважте, що якщо символ над пробілом або пробілом, текст зліва від поля завжди такий же, як у попередньому рядку, тому я можу просто використовувати\1 перевірити, що один символ знаходиться над іншим.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.