5

根据规范,

黑色色块和程序的边缘限制了程序流程。如果 Piet 解释器试图移入黑色块或离开边缘,它会停止并切换 CC。然后解释器再次尝试从其当前块移动。如果第二次失败,DP 将顺时针移动一步。重复这些尝试,在交替尝试之间更改 CC 和 DP。如果在八次尝试之后解释器不能离开它当前的色块,就没有出路并且程序终止。

除非我读错了,否则这与此处的斐波那契数列示例的行为不一致:

(来自:http ://www.dangermouse.net/esoteric/piet/samples.html )

具体来说,为什么 DP 碰到左边缘时会在 (0,3) 处左转((0,0) 是 (top, left))?此时,DP 和 CC 都是 LEFT,所以,根据我的阅读,顺序应该是:

  1. 尝试(但失败)通过在 (0,4) 处离开边缘来离开块,
  2. 将 CC 切换到右侧,
  3. 通过在 (0,2) 处离开边缘来尝试(并失败)离开块。
  4. 将 DP 旋转到 UP,
  5. 通过进入 (1,1) 处的白色块尝试(并成功)离开 (1,2) 处的块

跟踪指示的行为似乎是 DP 一直旋转,将 CC 留在左侧。

我误解了什么?

4

1 回答 1

7

您的分析似乎是正确的;样品有问题。(1,1) 处的白色块应该是黑色的。您可以通过抓取示例图像并执行它来验证这一点。

请注意,从 DMM 页面链接的至少三个解释器是错误的 - Marc Majcher 的标记为这样,Sylvain Tintillier 的遍历和输出正确,但从规范中切换了 in 和 inn 的含义(是一个无错误的版本),并且PietDev 错误地遍历色块。

编辑:其他白色块可能也需要是黑色的,例如 (6,3) 处的块。

于 2010-04-29T16:19:34.097 回答