Коробки ASCII выглядят так:
++ +---+ +------+ +---+ +---+
++ | | | | | | | |
| | | | | | | |
+-+ | | | | | | | |
+-+ | | | | | | +---+
+---+ | | | |
+--+ | | | | ++
| | | | | | ||
| | +------+ | | ||
+--+ | | ||
+---+ ||
||
+-----+ ||
+------------+ | | ++
| | | |
| | | |
+------------+ +-----+
Вот несколько примеров таких же ASCII-блоков:
++ +- -+ +- -+ +- -+ +- -+
++ | - | | - - | | - | | - |
| | | -- | | | | |
+-+ | | | | " | - |
+-+ | - | || | | +- -+
+- -+ | | | |
+--+ | -- | | | ++
| | | - - | " ||
| | +- -+ | | ||
+--+ | - | | |
+- -+ | |
-- ||
- - +- -+ ||
+- - - -+ | - - | ++
| -- -- | | = |
| -- -- | | - - |
+- - - -+ +- -+
- -
--
Вот ссылка на все эти блоки тестовых примеров в более удобном для копирования формате. Порядок - все входы, за которыми следуют все выходы в одинаковом порядке.
Ваша цель - взять ASCII-бокс в качестве входных данных и вернуть взорванный бокс. Правила взрыва:
- «+» никогда не меняется; ни "-", ни "|" непосредственно рядом с "+"
- Начиная с углов, «-» и «|» переместиться внутрь на один пробел больше, чем сделал тот же персонаж ближе к углу. Если "-" и "|" никогда не будет двигаться в том же месте, ни один не движется.
- Если «-» и «-» перемещаются в одно и то же место, поместите «=» в это место. Если "|" и "|" переместитесь в то же место, поставьте «в этом месте». Они считаются двумя соответствующими персонажами в одном и том же месте, которые движутся в противоположных направлениях.
- Два "-" или два "|" может двигаться мимо друг друга, как видно в нижнем левом примере.
- Если коробка достаточно тонкая, она начнет расширяться наружу таким же образом, всегда удаляясь от той стороны, с которой она начала.
- Результат должен быть симметричным относительно центральной линии в направлениях x и y (игнорируя новые строки); это включает пробелы, поэтому для удовлетворения этого результата может потребоваться заполнить пробелами.
Детали правила:
- Это код-гольф, поэтому выигрывает самая короткая программа в байтах.
- Применяются стандартные лазейки.
- Вы можете предположить, что каждая строка заканчивается символом новой строки.
- Единственными символами во входной строке будут «+», «-», «|», «» и «\ n» (новая строка), и ваша выходная строка должна следовать тем же правилам с добавлением «=» и "как возможные персонажи.
- При желании у вас может быть один завершающий символ новой строки в конце последней строки.
- Наименьшее поле ASCII, которое вам нужно обработать, - это левый верхний пример. Каждая коробка ASCII будет иметь ровно 4 "+", точно по углам.
- Вам нужно будет обрабатывать поля размера
m x n
для любых целых чисел,m,n
таких что2<=m,n<256
(максимально возможный размер строки255*(255+1)
) - Вы можете предположить, что вы всегда получите один действительный ASCII-блок в качестве ввода.
||
в этом примере должен быть "
или что-то ...
"
хотя? Я думаю, что "
только появляется на 3-шириной или больше?
"
пойдет? Слева или справа? Это не может быть и то и другое, но не может быть и так, потому что результат симметричен.