通过> <>(一种深奥的编程语言)的代码游泳的心爱的鱼已被带出自然环境。这种变化使它无法像过去那样四处移动:过去的环形运动仅限于简单的从左到右运动。但是仍然编写程序,好像鱼能够通过它们。亲爱的程序员,您的任务是编写程序来线性化> <>程序。并尽可能减少字节数;鱼没有很大的记忆。
在> <>中移动
在> <>中,移动是环形的,一次只能移动一个字符。这意味着鱼(指针)可以从一行的结尾“回到”开头。在> <>中,与大多数指针移动的方式相比,鱼还能够从上到下,从下到上和从右到左移动。因此,此移动方式将是有效的:
>>>^ >>>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)
。鱼会从第一个看到的命令开始解析命令,并在命令匹配上述方向转换器之一时更改其方向。
鱼在看到a时停止移动;
并终止程序。
输入值
输入将是通过STDIN给出的有效(例如,非无限循环)程序。如果愿意,您也可以阅读文件。每个节目的线将不一定是相同的长度。
输入以字符串形式给出,换行符分隔程序中的每一行。
程序不会循环,这也意味着它们将始终以终止;
。
输出量
输出将线性化程序。也就是说,您应该返回鱼是否“正常”运行程序时看到的所有字符(包括换向器)。这是指向的所有字符;
。
如果输入的线长度不等,并且鱼最终沿着比最长线的长度短的线移动,则应将鱼视为在空间上移动(请参见测试用例)。
熟悉> <>的人会知道,方向改变器不是在其中进行移动的唯一方法,但是为了简单起见,将输入视为它们是 影响运动唯一方法。
规则
- 适用标准漏洞
- 您可以编写完整的程序或函数
- 输入是通过STDIN或文件作为字符串提供的,其中包含用换行符分隔的程序行(
\n
)- 在合理的范围内,您可能会采取不同的输入方式(请随时问我是否有特定的输入方式)。您可能无法在输入处加上空格,以使行长匹配。
- 有关灵活输入,请参阅此 meta帖子。就其发布而言,一般共识应在合理范围内尽可能地灵活。
- 输出是通过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;
;
;