Учитывая набор замкнутых непересекающихся 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.