brainf_ck 不是列表中的操作
brainf_ck not operation in a list
我对列表中的 not 操作(以及几乎所有操作)有疑问。我对列表的意思是 0 i1 i2 i3 ... in-1 in 0 with a unknown n
在我的程序中,我在该列表中的未知索引处,我需要检查它是否为 0
对于 not 算法,您需要一个临时值,但您只能使用 [<] 或 [>] 获得该值,但您将丢失列表中的值。
提醒:a = 0 算法是这样的:
t0[-]+
a[t0-]
t0[
<code>
]
我唯一能想到的是在每个索引之间留下一个 1 但这看起来非常不优雅。
所以我的问题是:有更好的方法吗?
实际上,每个元素之间的 1 确实是更有效的方法之一。然后你简单地来回走动,直到你遇到一个零,你就知道你在序列的哪一端,还有多少。而且每次手术后它们也很容易清理。
有一些方法可以让每个元素只使用一个单元格,但这需要将所有元素移动到你想要的那个元素的左边一个位置,然后将它们全部移回,对于每个操作。在某些情况下,如果您只在每个元素中存储较小的值并且您有很多元素,这可能会更快。
取决于你想要达到的目标。我个人认为第一个选择留下 1 的踪迹并在之后清除它们是更好的选择,即使它需要 space 的两倍,因为在一般情况下它通常要快得多。
我对列表中的 not 操作(以及几乎所有操作)有疑问。我对列表的意思是 0 i1 i2 i3 ... in-1 in 0 with a unknown n
在我的程序中,我在该列表中的未知索引处,我需要检查它是否为 0 对于 not 算法,您需要一个临时值,但您只能使用 [<] 或 [>] 获得该值,但您将丢失列表中的值。
提醒:a = 0 算法是这样的:
t0[-]+
a[t0-]
t0[
<code>
]
我唯一能想到的是在每个索引之间留下一个 1 但这看起来非常不优雅。
所以我的问题是:有更好的方法吗?
实际上,每个元素之间的 1 确实是更有效的方法之一。然后你简单地来回走动,直到你遇到一个零,你就知道你在序列的哪一端,还有多少。而且每次手术后它们也很容易清理。
有一些方法可以让每个元素只使用一个单元格,但这需要将所有元素移动到你想要的那个元素的左边一个位置,然后将它们全部移回,对于每个操作。在某些情况下,如果您只在每个元素中存储较小的值并且您有很多元素,这可能会更快。
取决于你想要达到的目标。我个人认为第一个选择留下 1 的踪迹并在之后清除它们是更好的选择,即使它需要 space 的两倍,因为在一般情况下它通常要快得多。