Brainfuck中的无限计数循环

时间:2011-09-07 22:54:17

标签: brainfuck esoteric-languages

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

+[[>+]+]

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:4)

尝试:

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

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

答案 1 :(得分:1)

我昨晚考虑的另一种可能性,虽然它与你的要求有点不同:

-[[-]>-]

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

当然,您可以通过仅使用+或仅使用 - 。

来使这些循环中的任何一个完全向上或向下计数