对于不熟悉的人来说,布莱福克是一种图灵完整的语言,只有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:59:17
这里是为大脑执行基本逻辑但复杂的操作的算法:)
https://stackoverflow.com/questions/3421347
复制相似问题