如何检查 Brainf*ck 中的两个细胞是否相等?

问题描述 投票:0回答:4

如何检查单元格 #0 中的值是否等于单元格 #1 中的值?我正在尝试编写相当于的代码:

if(a == b)
{
    //do stuff
}
else
{
    //do something else
}

我读过Brainfuck比较2个数字大于或小于,第二个答案让我大致了解了我需要做什么,但我无法弄清楚。 (该解决方案给出

if a < b, else
。)

我想我需要做一些事情来减少这两个值,如果它们同时达到 0,那么它们就是真的。但每次我想到这个问题时,我总是被困在同一个出口点。

如何检查 Brainfuck 中两个细胞是否相等?

if-statement conditional-statements equality brainfuck
4个回答
4
投票

我想我明白了,我不是一个脑残专家,但这个问题看起来很有趣。可能有一种更简单的方法来做到这一点,但我采用了你的逐一递减值的方法。

在这种情况下,如果单元格 0 和 1 中的两个值相等,则向前跳一吨,如果不相等,则向前跳一点(第二个括号是不相等的情况,第三个括号是相等的情况)

请注意,我正在使用 Brainfucks while 语句作为贫民区 if (cell != 0)

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

在线尝试:http://fatiherikli.github.io/brainfuck-visualizer/#KysrKysrKysrKysrKysrKysKPgorKysrKysrKysrKysrKysrKwo+KzwKWyAtIDwgLSA+XSA8Wz4+Pj4+XSA+PiBbPj4+Pj4+Pj4 +Pj4+Pj4+Pj4+Pj4+XQoKCg==

示例实现,如果两个值相等则打印 T (true),如果不相等则打印 F (false)
http://fatiherikli.github.io/brainfuck-visualizer/#KysrCj4KKysrKwo+KzwKWyAtIDwgLSA+XSA8Wz4+PgorKysrKysrKysrKysrKysrKysrKworKysrKysrKysrKysrKysrKysrKworKysrKysrK ysrKysrKysrKysrKworKysrKysrKysrCi4KPgoKXSA+PiBbCisrKysrKysrKysrKysrKysrKysrCisrKysrKysrKysrKysrKysrKysrCisrKysrKysrKysrKysrKysrKysrC isrKysrKysrKysrKysrKysrKysrCisrKwouCj4KXQ==


1
投票
+>>(a+++++)>(b+++++)>>+<<<
[[->]<<]
<
[>>>>>-<<<<<
    a>b
]
>>
[->>-<
    a<b
]
>>
[-
    a=b
]

指针以相同状态结束于同一指针,但相应括号内的代码已被执行。


1
投票

我为我的 bf 编译器想出了这个
基本上它是相减,然后检查结果是否为 0。
可以轻松更改为以 if/else 方式执行内容

布局:

[A] B

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

输出

0 [result]

如果相等则结果为 1


0
投票

我尝试了一些提供的解决方案,但对结果不是很满意。这就是我想到的。

Check equality of a and b storing result at c
Note: this only work if a greater/equal to b or cell wrapping is supported
# set up
a=++++(feel free to change this value)>
b=++++(feel free to change this value)>
c=+< //memory pointer is now at b
// equality check
[-<->] // try empty out both a and b
<[[-]>>c-<<] // go to a and check if is 0; if not empty and set c=0; move memory pointer back to a 

这段代码适用于这个 brainfuck-visualizer,因为它支持单元格换行。

© www.soinside.com 2019 - 2024. All rights reserved.