Учитывая набор замкнутых непересекающихся 2d контуров (разделенных хотя бы одним пробелом даже по диагонали) со стрелками, ориентированными последовательно в одном и том же направлении по часовой стрелке или против часовой стрелки (каждый контур имеет свое направление) и положительным числом n
, переместите стрелки n
шаги по контурам в соответствующем направлении. Стрелки обозначены > v < ^
соответственно для направления вправо, вниз, влево и вверх. Там другие символы -
(горизонтальный), |
(вертикальный) и +
(угол). Когда стрелка находится в углу, она сохраняет свое текущее направление и меняет его только после выполнения поворота.
Между любыми двумя углами всегда будет прямой отрезок (или пространство) (как +-+
для горизонтали, так и для вертикали) - другими словами, резкие U
повороты запрещены. Сегменты между углами являются вертикальными или горизонтальными, а изгиб в углу всегда составляет 90 градусов.
Входные данные:
- положительное целое число
n
- число шагов - ASCII-представление контуров - это может быть многострочная строка, список строк, список символов и так далее.
Выход:
Одни и те же контуры со всеми стрелками сдвинули n
шаги в общем направлении каждого контура.
Тестовые случаи:
1.
Входные данные:
n
= 1
+----->->
| |
| v---+
| |
+---<-------+
Выход:
+------>+
| v
| +>--+
| |
+--<--------+
2.
Входные данные:
n
= 2
+-----+ +---+
| | | |
+-->--+ | v
| |
+--->---+ |
| |
+------<<---+
Выход:
+-----+ +---+
| | | |
+---->+ | |
| |
+----->-+ v
| |
+----<<-----+
3.
Входные данные:
n
= 3
+---+ +---+ +-------+
| | | v | |
^ | | | +-<-+ |
| | ^ | | v
| +---+ +-->----+ |
| |
| +-------+ +---+ |
| | | v | |
+---+ +---+ +---+
Выход:
+>--+ ^---+ +-------+
| | | | ^ |
| | | | +---+ |
| | | | | |
| +---+ v----->-+ |
| |
| +-------+ +---+ v
| | | | | |
+---+ +-<-+ +---+
4.
Входные данные:
n
= 1
+--+
| |
| +---+
| |
+----+ |
| |
+-+
Выход:
+--+
| |
| +---+
| |
+----+ |
| |
+-+
5.
вход
n
= 4
^>>>>
^ v
^ v>>>>
^ v
<<<<<<<<v
Выход:
^>>>>
^ v
^ v>>>>
^ v
<<<<<<<<v
6.
Входные данные:
n
= 1
^->
^ v
<<v
Выход:
^>+
^ v
<<v
Напишите функцию или программу, решающую вышеуказанную задачу. Самый короткий код в байтах на каждом языке выигрывает. Не разочаровывайтесь языками игры в гольф. Объяснение алгоритма и кода высоко ценится.
There will always be a straight segment (or a space) between any two corners (like +-+ for the horizontal and similar for the vertical) - in other words the sharp U turns are forbidden.