问题标签 [brainfuck]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 在brainfuck程序中检测无限循环
我用MATLAB 脚本语言编写了一个简单的脑筋急转弯解释器。它被提供随机 bf 程序来执行(作为遗传算法项目的一部分)。我面临的问题是,程序在相当多的情况下都会出现无限循环,因此 GA 会卡在这一点上。
因此,我需要一种机制来检测无限循环并避免在 bf 中执行该代码。
一个明显的(微不足道的)案例是当我有
我可以检测到这一点并拒绝运行该程序。
对于非平凡的情况,我发现基本思想是:确定循环的一次迭代如何改变当前单元格。如果变化是负的,我们最终会达到 0,所以这是一个有限循环。否则,如果更改为非负数,则为无限循环。
在单个循环的情况下实现这一点很容易,但是对于嵌套循环,它变得非常复杂。例如,(以下(1)指的是单元格1的内容等)
因此代码不断运行。然而,在单元格 1 上对 + 和 - 的数量进行简单检查会说 - 的数量更多,因此不会检测到无限循环。
给定 bf 中任意数量的循环的任意嵌套,谁能想到一个检测无限循环的好算法?
编辑:我确实知道停止问题通常是无法解决的,但我不确定是否不存在特殊情况例外。就像,也许 Matlab 可以充当超级图灵机,能够确定 bf 程序的停止。我可能大错特错,但如果是这样,我想确切地知道如何以及为什么。
第二次编辑:我写了我声称的无限循环检测器。它可能会遗漏一些边缘情况(或者不太可能,以某种方式逃脱图灵先生的魔掌),但到目前为止似乎对我有用。以伪代码形式,这里是:
testing - 如何测试解释器或编译器?
我一直在尝试为 Brainfuck 创建一个解释器,虽然制作和启动和运行非常简单,但我的一部分希望能够针对它运行测试。我似乎无法理解一个人可能需要编写多少测试来测试所有可能的指令组合以确保实现正确。
显然,使用 Brainfuck,指令集很小,但我不禁认为,随着更多指令的添加,您的测试代码会成倍增长。无论如何,比您的典型测试更重要。
现在,在编写编译器和解释器方面,我几乎是新手,所以我的假设很可能是错误的。
基本上,你甚至从哪里开始测试这样的东西?
http - HTTP response was too large: 10485810. The limit is: 10485760
i have written an online brainfuck interpreter ..!! the problem is when i take the text input , it gives an error !!... HTTP response was too large: 10485810. The limit is: 10485760.
it seems the max limit of gae is 1mb.. how can i get around it !1
parsing - 创建一个 Brainfuck 解析器,解析循环运算符的最佳方法是什么?
我正在创建一个 Brainfuck 解析器(在 BASIC 方言中)最终创建一个解释器,但我意识到它并不像我最初想象的那么简单。我的问题是我需要一种方法来准确解析 Brainfuck 程序中的匹配循环运算符。这是一个示例程序:
'[' = 循环开始
']' = 循环结束
我需要记录每个匹配循环运算符的起点和终点,以便我可以根据需要跳过源。有些循环是单独的,有些是嵌套的。
解析这个的最佳方法是什么?我在想也许可以通过源文件创建一个 2D 数组(或类似的)来记录每个匹配运算符的开始和结束位置,但这似乎是通过源代码“来来回回”的。这是最好的方法吗?
更多信息:Brainfuck 主页
编辑:非常感谢任何语言的示例代码。
carriage-return - 将dos2unix移植到brainfuck
我在 SuperUser.com 上就无用的答案进行了争论,并发现自己在挑战另一位发帖人,让他用脑筋急转弯来回答这个问题。他没有接受我,但现在我很好奇。
程序所需要做的就是将 CRLF 行尾转换为 LF(dos 样式到 unix)。周围的任何 bf 编码器都可以提供帮助吗?
interpreter - 在解释器中实现 Brainfuck 循环
我想用我新创建的编程语言构建一个 Brainfuck(该死的名字)解释器,以证明它是图灵完备的。
现在,到目前为止一切都清楚了(<>+-,.
)——除了一件事:循环([]
)。我假设您从这里开始了解(非常困难的)BF 语法:
- 如何在我的解释器中实现 BF 循环?
伪代码是什么样子的?[
当解释器到达循环开始( )或循环结束( )时,我该怎么办]
?
检查循环是否应该继续或停止不是问题(current cell==0
),而是:
- 我必须在何时何地进行检查?
- 如何知道循环开始的位置?
- 如何处理嵌套循环?
由于循环可以嵌套,我想我不能只使用包含当前循环起始位置的变量。
我见过用各种语言实现的非常小的 BF 解释器,我想知道他们是如何设法使循环工作但无法弄清楚的。
python - python中的'~'是什么意思?
python中的'~'是什么意思?
我不久前在 python 中找到了这个 BF 解释器。
我想知道它的作用,因为我想在我的 ti 84 上做一个(和一个 PF 的)
BF 是http://en.wikipedia.org/wiki/Brainfuck 和 PF 是类似的东西
memory - 如何获取一个大整数作为输入并将其存储在内存中
我知道在 Brainfuck 中对大整数进行算术运算,虽然有时可能相当乏味,但完全有可能。
然而,我想知道的是,普遍接受的最佳实践是将大整数(甚至是字符串,我想)作为输入。
大多数编译器/解释器允许您一次提供完整的字符串作为输入(然后使用 单独读取每个字符,
)。但我想知道的是——如果你不知道输入流何时停止,你怎么能读进去呢?我想一种方法是告诉用户将某个字符/字符串附加到他们的号码以表明它已经结束,但这似乎有点不方便用户。
我更喜欢一个考虑到可移植性的答案(特定于实现的解决方案很有趣,但不是这个问题的主要焦点)。如果没有完全与实现无关的方法来做到这一点,那么可以在大多数实现上工作并且优雅地失败的方法将是下一个最好的方法。
提前致谢。
computer-science - 在 Brainfuck 中实现控制结构
对于外行来说,Brainfuck是一种图灵完备的语言,只有 8 个命令,所有这些命令在 C 中都有文字等价物:
在任何有包管理器的 Linux 发行版上,你应该能够找到并安装包beef
,一个 Brainfuck 解释器,这样你就可以在家里玩了。
正如您在上面看到的,Brainfuck 只有一个控制结构,[…]
将 C 转换为:
这使您可以IF VAR = 0 THEN GOTO 10
从 BASIC 进行所有控制。以下将调用getchar()
,直到它返回0
:
但是,如果我只想阅读换行符\n
怎么办?在将我的大脑包裹在如何将其调整为简单的工作之后遇到了一些困难之后,if
我想出了以下几点:
(如果有人有更好的方法,请告诉我)
现在可以说我想测试\r
除了\n
. 鉴于我只有一次机会跳出循环,我该如何测试呢?我的目标是能够模拟switch
,嵌套if
的 s 或if/else if
s。
haskell - 为什么 GHC 抱怨类型错误?
这个小函数检查(有限)Brainfuck 字符串的有效性。它检查[
和]
是否平衡。该代码非常简单,并且编写为尾递归:
现在,GHC 抱怨打字问题:
也许我太傻了,无法弄清楚出了什么问题,但这对我来说看起来很奇怪。