Фон
(За матеріалами правдивої, щиросердної історії)
У свій час я часто грав з Ліспом і подібними мовами. Я писав з ними, керував ними, інтерпретував їх, проектував і змушував машини писати разом із ними для мене ... І якщо є одна річ, яка мене турбує, це бачить Лісп, який не відповідає моєму конкретному стилю форматування.
На жаль, деякі текстові редактори ( кашель XCode кашлю ), як правило, знімають мої прекрасні вкладки та пробіли, коли код копіюється та вставляється ... Візьміть цей прекрасно розташований синтаксис, схожий на Lisp:
(A
(B
(C)
(D))
(E))
(Де ABCDE
є довільні функції)
ДЕЯКІ текстові редактори, які розмалюють цей чудовий код до наступного кінця:
(A
(B
(C)
(D))
(E))
Який безлад! Це не читабельно!
Допоможіть мені, тут?
Змагання
Ваша мета в цьому завданні - взяти ряд функцій, розділених новими рядками у форматі, описаному нижче, та повернути більш красиву композицію, яка підкреслює читабельність та елегантність.
Вхідні дані
Ми визначаємо функцію аргументів F
arity N
як конструкцію, аналогічну наступному:
(F (G1 ...) (G2 ...) (G3 ...) ... (GN ...))
де G1, G2, ..., GN
всі функції самі по собі. Арность 0
функція A
просто (A)
, в той час як арность 2
функція B
має вигляд(B (...) (...))
Ваш код повинен приймати введення як ряд функцій з одним новим рядком перед провідними дужками кожної функції (крім першої функції). Наведений вище приклад є коректним вводом.
Ви можете припустити:
- Дужки врівноважені.
- Функцію ніколи не доведеться відступати більше 250 разів.
- КОЖНА функція оточена дужками:
()
- Ім'я функції міститиме лише символи, що друкуються ASCII.
- Ім'я функції ніколи не буде містити дужки чи пробіли.
- На вході є додатковий новий рядок.
Вихід
Ваш код повинен виводити той самий набір функцій, де єдиними змінами є додавання пробілів чи вкладок перед провідними дужками функцій. Результат повинен відповідати наступним правилам:
- Перша функція (і пізніші функції верхнього рівня) не повинні мати попередніх пробілів
- Аргументом горизонтального розташування функції є саме одна вкладка праворуч від горизонтального розташування цієї функції.
- Вкладка визначена реалізацією, але повинна містити принаймні 3 пробіли.
- Ви можете необов'язково друкувати максимум два пробіли після кожного рядка.
Правила
- Це код-гольф: виграє найкоротший код!
- Стандартні лазівки заборонені.
Приклади
Вхід:
(A
(B
(C)
(D))
(E))
Вихід:
(A
(B
(C)
(D))
(E))
Вхід:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
Вихід:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
Вхід:
(-:0
(*:0
(%:0
(Arg:6)
(Write:0
(Read:0
(Arg:30))
(Write:0
(Const:-6)
(Arg:10))))
(%:0
(Const:9)
(/:0
(Const:-13)
(%:0
(Arg:14)
(Arg:0)))))
(WriteArg:22
(-:0
(Const:45)
(?:0
(Arg:3)
(Arg:22)
(Arg:0)))))
Вихід:
(-:0
(*:0
(%:0
(Arg:6)
(Write:0
(Read:0
(Arg:30))
(Write:0
(Const:-6)
(Arg:10))))
(%:0
(Const:9)
(/:0
(Const:-13)
(%:0
(Arg:14)
(Arg:0)))))
(WriteArg:22
(-:0
(Const:45)
(?:0
(Arg:3)
(Arg:22)
(Arg:0)))))
()
?