Rya*_*ney 7 computer-science turing-machines brainfuck
对于没有经验的人来说,Brainfuck是一种图灵完备的语言,只有8个命令,所有这些命令在C中都有文字等价物:
bf c
----------------------
> ++ptr;
< --ptr;
+ ++*ptr;
- --*ptr;
. putchar(*ptr);
, *ptr=getchar();
[ while (*ptr) {
] }
Run Code Online (Sandbox Code Playgroud)
在任何带有软件包管理器的Linux发行版上,你应该能够找到并安装这个软件包beef,一个Brainfuck解释器,这样你就可以在家里玩了.
如上所示,Brainfuck只有一个控制结构,[…]它转换为C:
while (*ptr) { … }
Run Code Online (Sandbox Code Playgroud)
这让您可以IF VAR = 0 THEN GOTO 10从BASIC获得所有控制权.以下将调用,getchar()直到它返回0:
, # *ptr = getchar();
[ # while (*ptr) {
>, # *(++ptr) = getchar();
] # }
Run Code Online (Sandbox Code Playgroud)
但是,如果我只想读取换行符\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;
] # }
Run Code Online (Sandbox Code Playgroud)
(如果有人有更好的方法,请告诉我)
现在让我们说我想测试\r除了循环之外的那个\n.考虑到我只有一次突破循环的机会,我该如何测试?我的目标是能够模仿switch,嵌套ifs或if/else ifs.
我还没有看链接,但我想AShelly 的答案可能更普遍有用……但是,之前不敢让我的手指输入一些 Brainfuck,我决定现在也可以时间一样,并且能够得到以下内容,我认为这是有效的。
后半部分仅用于打印第一部分捕获的内容。另外,我不会说谎,在尝试解决这个问题后,我的大脑确实感觉彻底“操蛋”了……一种命名非常恰当的语言,呵呵。
+
[
>,
----------
[
---
[
+++++++++++++
>>
]
]
<
[
>>
]
<
]
++++++++++++
[
<
]
>
[
.>
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1173 次 |
| 最近记录: |