如何在Brainf*ck中检查两个单元格是否相等?

5
我该如何检查单元格#0中的值是否等于单元格#1中的值?我正在尝试编写与以下代码等效的代码:
if(a == b)
{
    //do stuff
}
else
{
    //do something else
}

我阅读了 Brainfuck compare 2 numbers as greater than or less than,第二个答案给了我一个大致的想法,但我无法理解。 (该解决方案提供了如果a < b,则。)
我认为我需要做的是将两个值都减少,如果它们同时达到0,则它们为真。但每次考虑时,我都卡在同一个出口点上。
如何检查Brainfuck中的两个单元格是否相等?

也许这是一个愚蠢的问题,但为什么会有人折磨自己使用Brainf*ck呢? - Maantje
5
有些人喜欢挑战。为什么会有人折磨自己去学习如何解魔方呢? - John Coleman
3个回答

4

我觉得我明白了,虽然我不是Brainfuck专家,但这个问题看起来很有趣。可能有更简单的方法来做到这一点,但我采用了您逐个递减值的方法。

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

请注意,我使用Brainfuck的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+PgorKysrKysrKysrKysrKysrKysrKworKysrKysrKysrKysrKysrKysrKworKysrKysrKysrKysrKysrKysrKworKysrKysrKysrCi4KPgoKXSA+PiBbCisrKysrKysrKysrKysrKysrKysrCisrKysrKysrKysrKysrKysrKysrCisrKysrKysrKysrKysrKysrKysrCisrKysrKysrKysrKysrKysrKysrCisrKwouCj4KXQ==


非常聪明!我会让它保持开放一段时间,看看是否有其他想法出现,但现在我会使用这个。谢谢! - Evorlor
1
@Evolor 因为我需要某些数字为1才能在if语句评估为true时运行代码,括号内的代码只有在单元格不为0时才运行。我找不到一种方法来检查它是否为true,但我可以检查它是否为false,如果为false,则将指针移动,以便稍后下一个if语句不会运行,因为您将处于0位置,否则您将处于那个1位置,并且将运行第三个括号中的代码。(抱歉,这个解释真的很糟糕) - Keatinge
@Evorlor 我感觉可能有一些方法可以避免使用第三个单元格,而是基于原始的两个单元格来完成,但我不够聪明,无法想出如何这样做。 - Keatinge
谢谢 :-) 如果我有想法,我会告诉你的,但是目前我也想不到什么。 - Evorlor

1

我为我的BF编译器想出了这个方法。

基本上它是先减去,然后检查结果是否为0。

可以很容易地改变为if / else-ish的方式来执行其他操作。

布局:

[A] B

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

输出

0 [result]

如果相等,则结果为1。


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

指针停留在相同的状态下,但适当括号内的代码已被执行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接