如何使用BrainF**k实现减法?

如何使用BrainFuck实现乘法?如何使用BrainFuck实现乘法?的帖子一样,也是我上课闲着无聊写的,不过这次也加了注释,方便理解

本次实现逻辑仍为暴力破解法,简单粗暴(毕竟BF也不支持高端操作)
倒推减法,得到加法,比如:
10 - 2 = ?
=> ? + 2 = 10
?为每一次循环需要猜测的数字

2020.09.27补充:

在V2EX发了个帖子,突然发现我减法做的复杂了,啊这,只要递减就可以了
https://www.v2ex.com/t/708480

以下是原文章思路:


# 代码(加注释版)

因为上一次的除法忘了写注释,这一次我在草稿纸上手动加了注释,方便直接打到电脑上

,>, #在index0 和 1 记录 被减数 减数
[ #循环 全程序最大的循环,用来控制是否接着循环猜数字
[->+>+<<] #把被减数放到index2和3
< #index0
[->>>>+>+<<<<<] #把减数放到index4 和 5
>>>>>>>> #index8 存储猜测的数字,每次循环不清空
+ #每次向上加一个数字
[-<+<+>>]<[->+<] #最终结果:index6 8 为猜测的数字
#index 6为循环内变量,需要被递减来判断是否猜测正确,index 8为全局变量,每次循环加一,不清空
# 中间过程,先把index8的内容加1后移动到index6 和 7再把index 7移动给index 8
< index 6
[-<<<+>>>] #把猜测的数字index6 加到index 3中
<<< #index 3
[->-<]>[>[-<<<<<+>>>>>]#如果index 3和index 4互相递减之后index4不是0,则把index5存储的的被减数放到index0
<<< #index 2
[-<+>] #把index2存储的减数放回index 1
]>> # index4
[-] #把4中的数字清空
<<< #index2
]
>>>>> #index 8
[-<<<<<<<<+>>>>>>>>]#如果猜对了,则把index8猜测的全局变量移动到给index 0

# 代码(装逼版,纯指令)

,>,[[->+>+<<]<[->>>>+>+<<<<<]>>>>>>>>+[-<+<+>>]<[->+<]<[-<<<+>>>]<<<[->-<]>[>[-<<<<<+>>>>>]<<<[-<+>]]>>[-]<<<]>>>>>[-<<<<<<<<+>>>>>>>>]

# 运行结果(图片)

运行4-2后的结果
标签:

《如何使用BrainF**k实现减法?》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Captcha Code