7

作为我的brainf*ck 实现的调试器/测试程序,我创建了以下计数循环:

+[[>+]+]

使用单字节环绕单元格和带有环绕单元格的 30k 单元格,这将创建一个无限计数循环。它将每个单元格设置为 1,然后将每个单元格设置为 2,等等。

我的问题是,当它达到 255 时,内循环将单元格增加到 0,然后外循环立即将其增加到 1。这在溢出时充当“双步”,而不是单步。这是我可以让循环在这个紧凑的程序中无限继续的唯一方法。

每个单元格的计数0 -> 1 -> 2 ... 254 -> 255 -> 1 ...

虽然我希望它去0 -> 1 -> 2 ... 254 -> 255 -> 0 -> 1 ...

当前单元格为零时,很难继续循环。我玩过同一主题的变奏曲,但没有一个能做得恰到好处。

这个特定的程序只是一个用于测试的简单计数程序,但真正对我未来的程序有帮助的是知道如何反转循环条件,就像我需要使这个计数循环工作一样。

4

2 回答 2

4

尝试:

+[[>+]>[+>]+]

在第一个内部循环之后,我们知道数据是 0,然后是一堆 255。移动到下一个单元格并将它们全部递增,直到我们回到开始。然后增加第一个单元格并重新开始。

于 2011-09-07T23:21:59.150 回答
1

我昨晚考虑的另一种可能性,尽管它与您的要求有点不同:

-[[-]>-]

它与您的原件大小相同,但会倒计时。它将每个单元格从 255 循环到零,但一次只修改一个单元格。我想我会添加它,因为它是一个有趣的短循环,可用于测试。

当然,您可以仅使用 + 或仅使用 - 使任何这些循环仅向上或向下计数。

于 2011-09-08T15:02:09.607 回答