Вступление
У меня много ASCII-камней. Они построены с черточками, трубами, V, каретками, угловыми скобками, косыми чертами и пробелами. Пример:
/--\
| |
| |
\--/
Я хочу разрушить их, вот так:
/\
/ \
\ /
\/
Все углы стали более круглыми. Более сложный пример:
/----\
| \------\
| |
| |
\------------/
/--\
/ \------\
| \
\ /
\----------/
После очередной эрозии он станет
/\
/ \------\
< \
\ /
\--------/
И другой:
/\------\
< \
\ /
\------/
Вызов
Ваша задача состоит в том, чтобы написать программу, которая может разрушить ввод один раз. Вы можете предположить, что есть только один камень, и вы можете предположить, что это один замкнутый контур. Входные данные будут содержать только символы /\ -| <> ^V \n
и будут иметь пробелы для создания прямоугольника. Программа может либо получать ввод из STDIN и выводить в STDOUT, либо может быть функцией. В конце каждой строки находится символ новой строки. Эрозия должна следовать правилам, изложенным ниже (Примечание: в примерах камень не завершен, это для простоты объяснения). Вывод должен быть в том же формате, что и ввод, с тем же размером, что и ввод. Однако завершающие пробелы могут быть опущены.
Косые черты распространятся на трубопроводы и черточки и переместятся.
/---
|
|
/--
/
|
/-
/
/
Если две косые черты объединяются, используется соответствующий символ из <>^V
.
/-----\
| |
| |
| |
\-----/
/---\
/ \
| |
\ /
\---/
/-\
/ \
< >
\ /
\-/
^
/ \
< >
\ /
V
Если часть скалы может слиться, она будет. Примечание: если одна часть может объединяться, а другая - нет (т. Е. Во /\
второй строке примера), то и та, которая может объединиться (см. Пример).
/\
/\-^-/\-/ \--
|
<
|
/
\
|
/
/
\
\
|
|
/-------/\--
/
|
|
|
|
|
|
/
\
|
|
|
В конце концов, все камни станут ничем.
<> ^ /\
V \/
Контрольные примеры
Тест 1:
/----\
| \------\
| |
| |
\------------/
/--\
/ \------\
| \
\ /
\----------/
/\
/ \------\
< \
\ /
\--------/
/\------\
< \
\ /
\------/
/-----\
< \
\ /
\----/
/---\
< \
\ /
\--/
/-\
< \
\ /
\/
^
< \
\/
Тест 2:
/----\
| |
| |
| |
| |
\----/
/--\
/ \
| |
| |
\ /
\--/
/\
/ \
/ \
\ /
\ /
\/
/\
/ \
\ /
\/
/\
\/
Тест 3:
^ /\
/\--/\--/ \--/ \-\
\ |
| |
/ |
\ |
| |
| |
/ |
< |
\ |
| |
| |
/ |
/ |
\ |
\-----------------/
/-------^----/\-\
/ \
| |
| |
| |
| |
| |
| |
< |
| |
| |
| |
| |
/ |
\ /
\---------------/
/-------------\
/ \
/ \
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
\ /
\ /
\-------------/
/-----------\
/ \
/ \
/ \
| |
| |
| |
| |
| |
| |
| |
| |
\ /
\ /
\ /
\-----------/
/---------\
/ \
/ \
/ \
/ \
| |
| |
| |
| |
| |
| |
\ /
\ /
\ /
\ /
\---------/
/-------\
/ \
/ \
/ \
/ \
/ \
| |
| |
| |
| |
\ /
\ /
\ /
\ /
\ /
\-------/
/-----\
/ \
/ \
/ \
/ \
/ \
/ \
| |
| |
\ /
\ /
\ /
\ /
\ /
\ /
\-----/
/---\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\---/
/-\
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
\-/
^
/ \
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
/ \
\ /
\ /
\ /
\ /
V
^
/ \
/ \
/ \
\ /
\ /
\ /
V
^
/ \
/ \
\ /
\ /
V
^
/ \
\ /
V
^
V
счет
Это код-гольф , поэтому выигрывает программа с наименьшим количеством байтов!
Стандартные лазейки не допускаются.
"\x20\x20\x20\x20\x20\x20/\\\n/-\\\x20\x20/\x20\x20\\-\\\n|\x20\x20\\/\x20\x20\x20\x20\x20|\n\\---------/\n"