问题标签 [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.
brainfuck - 脑残挑战
我有任何挑战。我必须编写brainfuck-code。
对于给定的数字 n 指定它的最后一个数字。
入口
输入将仅包含一行,其中只有一个整数 n ( 1 < = n < = 2,000,000,000 ),后跟换行符 '\n' (ASCII 10)。
出口
在输出上必须找到一个整数,表示 n 的最后一位。
示例 I 入口:32 出口:2
例二:入口:231231132 出口:2
这是我尝试过的,但没有奏效:
algorithm - 找出单元格中的数字是偶数还是奇数
鉴于磁带的第 0 个单元格中的一个数字已填充,其余的都只是用作暂存单元格(即它们都从 0 开始并且是临时的——我不在乎它们会发生什么),我想替换第 0 个带有 0 或 1 的单元格。如果是偶数,则为 0,如果是奇数,则为 1。
基本上,我想做的是(在 C-esque 伪代码中):
我知道存在一个定义如下的divmod 算法:
如果不需要保留 n,请使用以下变体:
但是,由于X % 2 == X & 1
,即 X mod 2 是 X 的最右边位,我认为 divmod 在计算复杂性方面可能是矫枉过正的。
有没有更好的算法/技术来确定细胞是否均匀?
loops - 在 Brainfuck 中多次打印文本
我在 Brainfuck 中试用了这个 hello world 程序。如何多次打印文本?这是我的代码:
algorithm - 混淆代码:最后一位
我有一个挑战是用 Brainfuck 语言编写混淆代码来执行以下操作:
对于给定的数字 n 输出其最后一位数字。
输入
输入将仅包含一行,其中只有一个整数 n ( 1 < = n < = 2,000,000,000 ),后跟换行符 '\n' (ASCII 10)。
输出
在输出上,必须找到一个整数,表示 n 的最后一位。
示例我输入:32 输出:2
例子二:输入:231231132 输出:2
这是我尝试过的,但没有奏效:
python - 我的自我修改 Brainf *** 的 Python 解释器有一个错误
我为一种名为Self-modifying Brainf*** (SMBF)的语言编写了这个 Python 解释器。今天我发现了一个错误,如果程序在初始单元格处或之后在磁带上动态创建代码,它将不会被执行。我编写这个解释器是为了尽可能接近链接页面上的 Ruby 解释器。请注意,这个错误也可能存在于原始的 Ruby 解释器中。不知道,我没用过。
SMBF 与普通 BF 的不同之处在于源代码放在磁带上指针开始所在单元格的左侧。因此程序<.
将打印源的最后一个字符(句点)。这行得通。
请注意,我删除了一些代码,因此它仍然可以运行,但在这篇文章中占用的空间更少。
口译员:
问题:
这一行是我设置程序的方式(所以我可以在 Ideone.com 上运行它):
程序添加到单元格直到它是 46,这是 ASCII 的十进制值.
,它应该打印当前单元格(句点)。但是由于某种原因,程序计数器pc
永远不会到达那个单元格。我希望程序运行它找到的所有代码,直到它到达磁带的末尾,但是我很难让程序计数器考虑磁带的中心,并确保它仍然正确,如果磁带中调整大小__setitem__
。
相关行是(我正在尝试):
原来是这样的:
所以我认为这while
条线要么需要调整,要么我需要将其更改为while True:
并使用一段try/except
时间chr(self.tape[pc])
来确定我是否已经到达磁带的末尾。
有谁知道出了什么问题或如何解决?
c++ - 有人能解释一下脑残吗?
我正在尝试编写一个笨拙的解释器,但我缺少一些上下文或其他东西。应该调用来处理“ +><>
”等转换的函数应该是:
程序测试如下:
http://www.muppetlabs.com/~breadbox/bf/
我真的不明白这是在做什么。我看过其他视频,但它只是没有意义。有人可以解释目标吗?
如果给函数一个要翻译的数组,那么 30000 字节数组的意义何在?
编辑:我应该编写 C++ 代码,将字符转换为 Brainfuck 命令的字符,并且他们应该在某个 30000 字节的数组上执行相应的命令,以及这意味着什么。
编辑:提供说明
摘要 为 Brainfk 编写一个简单的解释器。1 简介
Brainfk 程序有一个隐含的字节指针,称为指针,它可以在 30000 字节的数组中自由移动,最初全部设置为零。指针本身被初始化为指向该数组的开头。Brainfuck 编程语言由八个命令组成,每个命令都表示为一个字符。
•
>
增加指针。
•<
减少指针。
•+
增加指针处的字节。
•-
减少指针处的字节。
•.
一个点,输出指针处的字节。
•,
逗号,输入一个字节并将其存储在指针处的字节中。
•[
如果指针处的字节为零,则向前跳过匹配的]。
•]
向后跳转到匹配的 [ 除非指针处的字节为零。例如,“Hello, World!”的一个版本。Brainfk 中的程序是
2 要求
2.1 测试程序
我将使用程序对您的代码进行批量测试和评分。因此,请仔细检查您的函数签名。未能正常运行可能会影响您的项目成绩。入口函数都将具有名称interpret
。您可以根据需要实现任意数量的其他辅助函数。以下部分详细介绍了这些规范。2.1.1 C++ 我会使用 C++11 (
g++ -std=c++11 ...
) 来测试你的程序。因此,请随意使用一些最近添加到 C++ 中的好东西,例如 lambda 函数、数组初始化等。为方便起见,请将您的声明和实现代码分隔在bf.h
和中bf.cpp
。函数签名是std::vector<int> interpret(const std::string &src, const std::vector<int> &input = {});
我的测试程序看起来像
编辑:到目前为止我所拥有的:
BFK.h
BFK.cpp
你应该能够在不实例化任何东西的情况下调用解释,所以我不知道另一种方法来把它放在一起。我还没有实现跳转功能。
string - 打印出brainf*ck 270个字符的178个字符的字符串
我正在尝试用brainfuck 打印出一个178 个字符的字符串。这不会是一个问题,除非我仅限于使用 270 个字符的 Brainfuck。我正在考虑使用双向散列函数对 178 个字符的字符串进行散列,但我一直无法找到可行的解决方案。这是字符串:"Wikipedia is the best thing ever. Anyone in the world can write anything they want about any subject, so you know you are getting the best possible information." - Michael Scott
。
在一些 ascii->brainfuck 程序中直接运行字符串给了我大约 1,409 个字符,与我的目标 270 相去甚远。我想我应该能够用大约 60 个字符的字符串创建 Brainfuck 代码。所以我的问题是,有什么方法可以将上面的字符串转换为 60 个字符的字符串,然后再解码回字符串?
while-loop - 在brainfuck中将多个数字输入细胞的更好方法?
所以我试图让单元格保持这样的第一个单元格为空(0),第二个为 9*4,第二个为 9*10,第三个为 9*12,第四个为 9*13,和依此类推,直到最后一个正在使用的单元格有 9*15。也就是说,到目前为止,brainfuck 中的以下代码:
反正有没有压缩这段代码?也就是说,是否有正确的单元格保存有问题的数字但使用较少的字符来做到这一点?我想过使用嵌套循环,但我不确定如何构造这样的东西。我是这门语言的新手,我正在尝试对其进行测试,但我认为我想太多了。
python - 我看似功能强大的 BF interpereter 无法运行标准的 BF 程序
这是我的interpereter的代码:
当我运行这个程序时:
我得到的结果
这个 porgram 是任何其他 bf interpereter 中的功能性“hello world”程序。即使将输出转换为 ASCII,它也不是“Hello World”。关于我的 interpereter 是否有任何重大问题可以指出?命令是否正确?
brainfuck - 指针位置 - 转到 0 或特定(检查是否超出范围)
我是一个brainfuck的新手,刚刚开始迈出我的第一步。我需要一些帮助来找出一个聪明的方法(即使它有点笨拙)来查看我的指针是否超出范围,然后再去那里。因此,我希望能够看到我位于内存阵列的第一个单元,并且不会进一步减少我的指针。我试着用谷歌搜索这个,我找不到任何东西。如果有人有任何想法,即使它们只是纯逻辑而没有代码,我也会很感激。
<<<<.
从看来,如果有人编写一段代码,就像他们只是在内存数组的末尾环绕一样,许多笨拙的解释器不会被卡住。然而,他们中的一些人被卡住了。所以,如果这是一个非常特定于解释器的问题,让我概括一下:有没有办法去内存阵列中的特定位置而不考虑现有位置?