对于不熟悉的人来说,布莱福克是一种图灵完整的语言,只有8个命令,所有这些命令在C中都有文字等价物:
bf c
----------------------
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
. putchar(*ptr);
, *ptr=getchar();
[ while (*ptr) {
] }在任何有包管理器的linux发行版上,您都应该能够找到并安装包beef,这是一个Brainfuck解释器,这样您就可以在家玩了。
正如您在上面看到的,Brainfuck只有一个控制结构,[…],它将C转换为:
while (*ptr) { … }这使您可以从BASIC中获得IF VAR = 0 THEN GOTO 10的所有控制权。下面将调用getchar(),直到它返回0为止
, # *ptr = getchar();
[ # while (*ptr) {
>, # *(++ptr) = getchar();
] # }但是,如果我只想读给换行符char \n呢?在对如何将其作为一个简单的if进行调整的问题进行了讨论之后,我想出了以下几点:
, # *ptr = getchar(); /* store input */
---------- # *ptr -= 10; /* test for \n by subtracting 10 before loop */
[ # while (*ptr) { /* if *ptr == 0, last char read was \n */
++++++++++ # *ptr += 10; /* wasn't \n, add 10 back to val under ptr */
>, # *(++ptr) = getchar();
---------- # *ptr -= 10;
] # }(如果有人有更好的方法,请告诉我)
现在让我说,除了\r之外,我还想在\n上测试这个循环的突破。考虑到我只有一次机会打破循环,我如何测试这两种情况?我的目标是能够模仿switch、嵌套ifs或if/else ifs。
发布于 2010-08-10 05:49:44
我还没有看过链接,但我想阿瑟利的回答可能是更普遍的useful...however,因为我之前不敢用手指键入一些Brainfuck,所以我决定现在是最好的时机,并且能够得到以下内容,我认为这是可行的。
下半部分只是为了打印出第一部分所捕捉到的内容。而且,我也不会说谎,我的大脑在试图解决这个问题后,确实感到“完蛋”.一种非常贴切的语言,呵呵。
+
[
>,
----------
[
---
[
+++++++++++++
>>
]
]
<
[
>>
]
<
]
++++++++++++
[
<
]
>
[
.>
]发布于 2010-08-10 05:59:17
这里是为大脑执行基本逻辑但复杂的操作的算法:)
发布于 2010-08-10 05:12:55
有关如何从单一BF控制结构开始并定义一系列表示更复杂操作的越来越复杂的序列的说明,请参见此页。
https://stackoverflow.com/questions/3421347
复制相似问题