5

仕様によると、

黒色のブロックとプログラムの端は、プログラムの流れを制限します。Piet インタープリターが黒いブロックに移動しようとしたり、エッジから離れようとすると、停止し、CC が切り替えられます。次に、インタープリターは現在のブロックから再び移動しようとします。2 回目に失敗すると、DP は時計回りに 1 ステップ移動します。これらの試行が繰り返され、試行ごとに CC と DP が変更されます。8 回試行してもインタプリタが現在のカラー ブロックを離れられない場合、抜け道はなく、プログラムは終了します。

私の読み方が間違っていない限り、これはフィボナッチ数列の例の動作と矛盾しています。

(出典: http://www.dangermouse.net/esoteric/piet/samples.html )

具体的には、左端に当たったときに DP が (0,3) ((0,0) は (上、左) である) で左に曲がるのはなぜですか? この時点で、DP と CC の両方が LEFT であるため、私の読みでは、シーケンスは次のようになります。

  1. (0,4) のエッジから外れてブロックを離れようとして (そして失敗しました)、
  2. CCをRIGHTに切り替え、
  3. (0,2) のエッジを外れてブロックを離れようとします (そして失敗します)。
  4. DPをUPにローテーションし、
  5. (1,1) の白いブロックに入って、(1,2) のブロックを出ようとする (そして成功する)

トレースによって示される動作は、DP が完全に回転し、CC が LEFT のままになっているようです。

私は何を誤解しましたか?

4

1 に答える 1

7

あなたの分析は正しいようです。サンプルはバグがあります。(1,1)の白いブロックは黒である必要があります。これは、サンプルイメージを取得して実行することで確認できます。

DMMのページからリンクされている少なくとも3つのインタープリターがバグがあることに注意してください-MarcMajcherはそのようにマークされており、Sylvain Tintillierは正しくトラバースして出力しますが、inとinnの意味を仕様から切り替えます(これはバグのないバージョンです)。 PietDevはカラーブロックを誤ってトラバースします。

編集:他の白いブロックもおそらく黒である必要があります(例:(6,3)のブロック)。

于 2010-04-29T16:19:34.097 に答える