Любимая рыба, которая плавает по коду > <> (эзотерическому языку программирования) , была выведена из своего естественного окружения. Это изменение сделало его неспособным перемещаться так, как раньше: то, что раньше было тороидальным движением, было ограничено простым движением слева направо. Но> <> программы по-прежнему написаны так, как будто рыба была способна перемещаться по ним. Ваша задача, дорогой программист, написать программу для линеаризации программы> <>. И сделать это как можно меньше байтов; У рыб не очень большие воспоминания.
Движение в> <>
В> <> движение является тороидальным и по одному символу за раз. Это означает, что рыба (указатель) может «оборачиваться» от конца строки до начала. В> <> рыба также способна перемещаться сверху вниз, снизу вверх и справа налево, в отличие от способа перемещения большинства указателей. Таким образом, этот шаблон движения будет действительным:
>>>^ >>>v
>>>^ v
и это закончилось бы в бесконечном цикле (возвращаясь к верхней строке, как только он проходит бесконечно).
Рыба движется в сетке длиной, равной max (длина ряда) и высотой, равной количеству рядов.
Как вы выясните, в какую сторону движется рыба? Эти команды изменяют вектор направления движения (например, (-1,0)
означает справа налево):
Command | Direction Change
---------------------------
> | (1,0) (default)
< | (-1,0)
^ | (0,1)
v | (0,-1)
/ | (x,y) -> (y,x)
\ | (x,y) -> (-y,-x)
| | (x,y) -> (-x,y)
_ | (x,y) -> (x,-y)
# | (x,y) -> (-x,-y)
; | (0,0)
Как уже отмечалось, рыба начинает двигаться слева направо, то есть с вектором направления (1,0)
. Рыба начинает анализировать команды, начиная с первой команды, которую видит, и меняет свое направление, если команда соответствует одному из вышеупомянутых переключателей направления.
Рыба перестает двигаться, когда видит ;
и завершает программу.
вход
Ввод будет действительной (например, не бесконечно зацикливающейся) программой, передаваемой через STDIN. Вы также можете прочитать файл, если хотите. Строки каждой программы не обязательно будут иметь одинаковую длину.
Входные данные даны в виде строки с символами новой строки, разделяющими каждую строку в программе.
Программы не будут зацикливаться, что также означает, что они всегда заканчиваются символом ;
.
Выход
Вывод будет линеаризован программой. То есть вы должны вернуть все символы (включая переключатели направления), которые рыба увидит, если она запускает программу «нормально». Это все персонажи на своем пути к ;
.
Если на входе есть линии неравной длины, и рыба в конечном итоге движется по линии, которая короче, чем длина самой длинной линии, вы должны рассматривать это так, как если бы рыба двигалась в пространстве (см. Контрольные примеры).
Те, кто знаком с> <>, будут знать, что переключатели направления - не единственный способ сделать движение в нем, но для простоты трактуйте входные данные так, как будто они - единственный способ повлиять на движение.
правила
- Применяются стандартные лазейки
- Вы можете написать либо полную программу, либо функцию
- Ввод осуществляется через STDIN или файл в виде строки, содержащей строки программы, разделенные символами новой строки (
\n
)- Вы можете по-разному воспринимать входные данные (в пределах разумного (не стесняйтесь спрашивать меня, имеете ли вы конкретный вид ввода). Вы не можете заполнять ввод пробелами, поэтому длина строк совпадает.
- Обратитесь к этому мета-сообщению относительно гибкого ввода. В том, что касается публикации, общий консенсус должен быть максимально гибким в пределах разумного.
- Вывод - это одна строка через STDOUT или возвращаемая функцией (в зависимости от того, что вы решили сделать, см. Правило 2)
Тестовые случаи
v >v
>abcv//;
gfed<^ih
v>abcv<defghi^//>v;
v >v
>abcv//;
gfed<^
v>abcv<defg ^//>v;
abcdef;
abcdef;
abcd|;
abcd|dcba;
abcd#;
abcd#dcba;
abcd\;
_
abcd\_\dcba;
^;
>abcde/
^jihg<
^ >abcde/ <ghij^a;
;
;