您的任务(如果您选择接受它的话)是构建一个程序,该程序分析并评估给出方向(左或右)的令牌字符串(从左到右,具有任意长度)。这是四个可能的标记及其含义:
> go right one single step
< go left one single step
-> go right the total amount of single steps that you've gone right, plus one,
before you previously encountered this token and reset this counter to zero
<- go left the total amount of single steps that you've gone left, plus one,
before you previously encountered this token and reset this counter to zero
不过有一个陷阱–您的程序应该能够解析的方向标记将以以下形式显示:
<<->-><<->->>->>->
...换句话说,它们是串联在一起的,并且程序的任务是弄清楚方向的正确优先顺序和要采取的步骤数量(向前看)。优先顺序如下(从最高优先级到最低优先级):
->
<-
>
<
如果遇到<-
自开始或最后一次复位以来以前没有向左走过的步骤,请向左走一步。同样的规则适用于->
,但是适用于右移。
您的程序应从0开始,其结果应为代表最终结束位置的有符号整数。
您可能希望输入始终是有效的(<--->>--<
例如,没有类似的东西)。
输入示例:
><->><-<-><-<>>->
本示例中的步骤:
step | token | amount | end position
------+-------+--------+--------------
1. | > | +1 | 1
2. | < | -1 | 0
3. | -> | +2 | 2
4. | > | +1 | 3
5. | <- | -2 | 1
6. | < | -1 | 0
7. | -> | +2 | 2
8. | <- | -2 | 0
9. | < | -1 | -1
10. | > | +1 | 0
11. | > | +1 | 1
12. | -> | +3 | 4
为了澄清:程序的输出应仅是有符号整数的最终结束位置。上面的表格仅用于说明我的示例采取的步骤。无需输出这样的表格,表格行,甚至仅输出步骤的最终位置。仅需要最终的结束位置(有符号整数)。
一周后,最短的代码将获胜。
<-
a<
或a 紧随其后->
。有没有在这种语言没有办法代表序列<-
,然后>
-这将是go left the total amount of single steps that you've gone left, plus one, then go right one single step
。这是正确的设计吗?