指针位置 - 转到0或特定(检查是否超出范围)

时间:2016-03-03 16:04:46

标签: brainfuck

我是脑筋急动的新手,刚开始迈出第一步。我希望有一些帮助找出一个聪明的方法(即使它有点hacky),看看我的指针是否超出界限,然后再去那里。因此,我希望能够看到我在内存数组的第一个单元格,而不是进一步减少指针。我试着谷歌搜索,我找不到任何东西。如果有人有任何想法,即使他们只是纯逻辑而没有代码,我也会很感激。

从许多人看来,如果有人像import Tkinter as tk from contextlib import contextmanager @contextmanager def temp_change(widget, **kargs): old_values = {key:widget.cget(key) for key in kargs} widget.config(**kargs) try: yield #wait for `with` block to finish executing... finally: widget.config(**old_values) window = tk.Tk() var = tk.StringVar() def validate(*args): print("Validation took place") return True entry = tk.Entry(validate="focusin", validatecommand=validate) print("Entry created. Associating textvariable") entry.config(textvariable=var) print("textvariable associated. Changing value") with temp_change(entry, validate="none"): var.set("Text") print("Value changed") entry.pack() tk.mainloop() 那样编写一段代码,因为他们只是在内存数组的末尾环绕,那么很多脑筋解释器都不会卡住。然而,其中一些卡住了。所以,如果这是一个非常特定于解释器的问题,让我概括一下:无论现有的位置如何,有没有办法去存储器阵列中的特定位置?

2 个答案:

答案 0 :(得分:3)

“无论现有位置如何,有没有办法转到存储器阵列中的特定位置?”

非常简单的回答:没有。

我不是想成为一个聪明的人或任何东西。答案真的很简单。这在BF中根本不可能。你想确保你不出界吗?您必须正确编码,确保您始终能够确定指针的实际位置。

即使您使用“hacky解决方案”编写恰好在一个解释器上运行良好的代码,那么它也不会是一个有效的程序。它不会只运行任何翻译。

在BF中,单元格不可寻址。你必须忍受这个事实。

答案 1 :(得分:2)

使用>启动代码,使第一个单元格= 0。现在假设其间的数字不是0,您可以使用[<]返回起始数组。例如,我已经明确地将ASCII字符A-Z映射到单元格2-27,将单元格1保留为0.这样,如果我想打印出一条消息,我会去

> >>>>>>>>.>.[<]在将数据指针返回到单元格1之前显示hi,从而节省了编写所有<的时间。

同样,这是假设两者之间的数字不是0。但是,如果您在特定单元格中处理数据并且您知道数据不会达到0,则可以跳回到标记为0的上一个单元格,依此类推。这或多或少类似于批处理文件中的反向结果。

所以假设我有单元数据[0 2 3 4 0 5 3 9 3 2 0 2 3 2 0],我们在第3位有数据交换器。我们可以通过执行<[<]<[<]跳回第一个数组,因为命令将跳过0值,并且重复[<]直到它到达下一个0.如果需要快速获取代码周围的数据指针,可以使用反向使用相同的想法。最重要的是,以下代码>+++>++>+[<][<][<]的测试运行将我返回到第一个单元格,尽管有额外的<,因为括号强制代码跳过,因为单元格1标记为0.({{3 }})

然而正如@Cedric Mamo在他的回答中所说,没有明确的方法可以阻止代码超出界限,因为如果你不小心输入了&lt;在你到达单元格1之后,你走出了界限。除非你按照我上面提到的保护措施进行编程并观察你在做什么,否则没有确切的方法可以防止这种情况发生。