あなたのタスク-あなたがそれを受け入れることを選択した場合-は、方向を与えるトークンの文字列(左から右、任意の長さ)を解析および評価するプログラムを構築することです-左または右。4つの可能なトークンとその意味は次のとおりです。
> 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
ただし、キャッチがあります。プログラムが解析できるはずの方向のトークンは、次の形式で表示されます。
<<->-><<->->>->>->
...言い換えると、それらは連結されており、指示の正しい優先順位と実行するステップの量を(先読みすることによって)把握することはプログラムのタスクです。優先順位は次のとおりです(最高の優先順位から最低の優先順位へ)。
->
<-
>
<
あなたが発生した場合は<-
、左へのステップは、以前のいずれかの開始以降または最後のリセット以降に行われていなかったとき、左に1つのステップを取ります。同じルールがに適用されますが->
、その後は右に移動します。
プログラムは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
明確化のために:プログラムの出力は、符号付き整数としての最終終了位置のみであるべきです。上記の表は、私の例が実行した手順を示すためのものです。このようなテーブル、テーブル行、またはステップの終了位置だけを出力する必要はありません。符号付き整数としての最終終了位置のみが必要です。
1週間後の最短コードが勝ちます。
<-
は、直後にa<
またはaが続く場合だけです->
。この言語では、<-
当時のシーケンスを表す方法はありませ>
んgo left the total amount of single steps that you've gone left, plus one, then go right one single step
。これは正しいですか、設計上ですか?