nonebot-plugin-brainfuck
使用方法
群聊中使用 brainfuck:{语句}:输入
如 brainfuck:,>,++.<.:ab
可以得到输出 da
关于brainfuck
这是一句helloworld
++++++++[>++++[>++>+++>+++>+>+<<<<<-]>+>+>->+[<]<-]>>.>---.+++++++..+++.>>++++.>.<<-.<.+++.------.--------.>>>+.
你别笑!这可是图灵完备的语言!如果你愿意,甚至可以等价翻译成简单的汇编
简单的brainfuck语法
brainfuck可以理解为是对图灵机的完全模拟
计算机对指令纸带上逐个符号进行执行,同时计算机内拥有一条有限或无限长度的内存,每一个位置的数据都为0,指针初始位置指向地址为0的内存块
> 内存指针右移一个地址
< 内存指针左移一个地址
+ 当前指针指向的内存块内的数据+1
- 当前指针指向的内存块内的数据-1
. 把当前内存块内的数据输出到控制台
, 从控制台读取一个小于2^8的数字,写入控制台(本解释器中输入一个大于255的数字会被自动取256模)
[ 如果当前指针指向的内存块数据为0,则跳转到对应的]后执行
] 如果当前指针指向的内存块数据不为0,则跳转到对应的[后执行
看,语法很简单吧,现在,我们可以尝试着用brainfuck写一个简单的减法器了
,>++++++[<-------->-]<.
首先读取控制台中的一个数储存在地址0内,左移一格内存,在地址1的内存中写入6作为计数器,之后回到储存数字的内存地址,进行8次-1,然后令计数器-1,直到计数器归零后输出地址0的数字 等于对地址0进行了6次批量-1的计算,每次计算为8次-1,总计6*8 = 48次减一
同理
,>++++++++[<------>-]<.
也能输出完全相同的结果
现在你对brainfuck或者打孔编程有一点简单的概念了吧?好了,我们开始尝试着用它来写一个网络app,或者做个3A游戏吧!
关于这个解释器
是的,这个解释器甚至实现了一个完整的虚拟机……