Это моя голова
\ /-- -|
/ -\ | | |
\ \ \ \ |
--\ | \ | |
/ |--| / / |
/|- //--| / |
| | || //\ |
| \ /| // \ |
Он состоит ровно из восьми волосков. Мои волосы слишком длинные. Пожалуйста, обрежьте каждую отдельную прядь до указанной мной длины.
вход
Главной достопримечательностью этого раздела является фактическая голова волос. Вот графическое представление с цветовой кодировкой и анимация для ленивых:
А вот полное описание того, что такое набор волос:
- Отдельные волоски, которые мы будем называть пряди , будут сделаны из
/
,\
,|
и-
символы 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, потому что я запутался даже в себе!) Более простой способ понять это может быть просто посмотреть на верхнюю часть второго ряда.
-
следует присоединить четвертую ветвь, а не третью.