Це моя голова:
\ /-- -|
/ -\ | | |
\ \ \ \ |
--\ | \ | |
/ |--| / / |
/|- //--| / |
| | || //\ |
| \ /| // \ |
Він складається з рівно восьми волосків. Моє волосся занадто довге. Обріжте кожну окрему пасмо на вказану вами довжину.
Вхідні дані
Основна визначна пам'ятка в цьому розділі - власне волосся на волоссі. Ось графічне кольорове представлення разом із анімацією для лінивих:
І ось повна специфікація того, що таке набір волосків:
- Окремі волоски, які ми будемо називати пасма , будуть зроблені з
/
,\
,|
і-
символи ASCII, відтепер відомий як атоми . - Вся голова чути (всі пасма поєднані) будуть
c
стовпцями поr
рядках, деc
≥ 1 іr
≥ 2. - Кожна пасма буде ...
- починати з останнього ряду голови (ряд
r
- 1). - мають довжину,
l
деl
≥ 2.
- починати з останнього ряду голови (ряд
- Пасма можуть бути розібрані наступним способом:
- Починайте внизу пасма. Це буде а
/
,|
або\
атом, який ми будемо називати коренем . (Пасма аналізуються зліва направо, упорядковуються коренем.) - Знайдіть атом, який вказує на корінь.
- А
|
точка атом вгору і вниз. Через-
точки атом вліво і вправо (але ніколи не може вказувати на корені , так як тільки коріння можуть перебувати в нижньому ряду). А/
точка атом зліва вниз і вгору-вправо, а\
атом робить протилежний. - Завжди буде рівно один атом, який вказує на атом кореня.
- А
- Знайдіть невикористаний атом (той, який ще не є частиною жодної нитки), який вказує на цей атом, а також не знаходиться нижче цього атома (волосся не можуть рости вниз, але збоку все в порядку).
- Якщо є нуль, ви дійшли до кінця пасма!
- Якщо такий є, це наступний атом пасма. Повторіть крок 3 з цим атомом. (Цей атом зараз позначений як "використаний" для цілей кроку 3, оскільки він є частиною ланцюга.)
- Тут ніколи не буде безлічі невикористаних атомів в будь-якій точці голови.
- Починайте внизу пасма. Це буде а
Формат введення буде наступним:
- Голова волосся. Може бути введено як є (багаторядковий вхід з буквальними новими рядками), або з роздільником на ваш вибір замість нових рядків. Зверніть увагу, що голова завжди буде прямокутником; тобто пробіли пробілів додаватимуться за необхідності (дивне волосся прямолінійної форми справа - це лише усунути зайвий пробіл, щоб уникнути плутанини).
- Число ≥ 1, яке визначає, скільки волосся потрібно стригти. Це буде детально описано в наступному розділі.
Ви можете прийняти вхід до функції, використовувати STDIN / STDOUT тощо (що-небудь розумне ).
Вихід
Вашим результатом буде головка волосся з нанесеною стрижкою. Щоб надати стрижку, просто зменшіть довжину кожної пасма волосся на вказану кількість (яка завжди буде 1 або більше), починаючи з кінцевої точки волосся, що рухається до кореня. Однак завжди залишайте корінь недоторканим!
Ось простий приклад. Скажіть, вхід для голови є
\
/
|
|
З другим входом 2
, ви вирізали б два атоми з нитки і отримали результат
|
|
І з введенням 42
, вихід був би просто
|
Зауважте, що пробіли до голови та після неї абсолютно не мають значення; ви можете обрізати зайві нові рядки або ви можете додати більше накладок. Не має значення, доки голова залишається недоторканою. (Ви можете робити все, що завгодно, і з пробілом пробілів.)
Випробування
Для всіх тестових випадків буде використано приклад, поданий на самому початку цієї публікації.
Довжина стрижки = 1:
/- |
/ \ | |
\ \ \ \ |
--\ | \ | |
/ |-- / / |
|- //--| / |
| | || // |
| \ /| // \ |
Довжина 3:
|
\ |
--\ | \ |
/ |-- / / |
|- // | / |
| || // |
| \ /| // \ |
Довжина 7:
|- / |
| | / |
| \ /| // \ |
Довжина 1337:
| \ /| // \ |
Оцінка балів
Це код-гольф , тому найкоротший код у байтах виграє!
-
третьому пасма з лівих точок на |
на четвертому пасма зліва
-
, а не те , що він вказує на . Наприклад, |
не вказує на /
першу нитку, але на неї вказує /
. (Так, я знаю, що це заплутано; мені довелося переробляти GIF кілька разів, тому що я плутав навіть себе!) Більш простий спосіб зрозуміти це, можливо, просто подивитися на верхню частину другої нитки.
-
слід приєднати четверту нитку, а не третю.