Как я могу проверить, равны ли две клетки в brainf*ck?
Как я могу проверить, равно ли значение в ячейке #0 значению в ячейке #1? Я пытаюсь написать код, эквивалентный:
if(a == b)
{
//do stuff
}
else
{
//do something else
}
Я прочитал, что Брейнфак сравнивает 2 числа как больше или меньше, и второй ответ дал мне общее представление о том, что мне нужно сделать, но я не могу понять это. (Это решение дает if a < b, else
.)
Я думаю, что мне нужно сделать что-то в порядке уменьшения обоих значений, и если они достигают 0 одновременно, то это правда. Но я все время застреваю в одной и той же точке выхода каждый раз, когда думаю об этом.
Как я могу проверить, равны ли две клетки в мозговом члене?
3 ответа
Я думаю, что у меня есть, я не эксперт по бреду, но этот вопрос выглядел интересным. Там может быть более простой способ сделать это, но я пошел с вашим методом уменьшения значений по одному.
В этом случае, если два значения в ячейках 0 и 1 равны, переходят на тонну вперед, если они не равны, переходят немного вперед (вторые скобки - это неравный случай, третьи скобки - равный случай)
Обратите внимание, что я использую brainfucks while в качестве гетто if (cell!= 0)
+++++++++++++++++
>
+++++++++++++++++
>+<
[ - < - >] <[>>>>>] >> [>>>>>>>>>>>>>>>>>>>>>]
Попробуйте сделать это онлайн: http://fatiherikli.github.io/brainfuck-visualizer/#KysrKysrKysrKysrKysrKysKPgorKysrKysrKysrKysrKysrKwo+KzwKWyAtIDwgLSA+XSA8Wz4+Pj4+X+jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjk
В качестве примера реализации выведите T (true), если два значения равны, F (false), если они не равны
http://fatiherikli.github.io/brainfuck-visualizer/#KysrCj4KKysrKwo+KzwKWyAtIDwgLSA+XSA8Wz4+PgorKysrKysrKysrKysrKysrKysrKworKysrKysrKysrKysrKysrKysrKworKysrKysrKysrKysrKysrKysrKworKysrKysrKysrCi4KPgoKXSA+PiBbCisrKysrKysrKysrKysrKysrKysrCisrKysrKysrKysrKysrKysrKysrCisrKysrKysrKysrKysrKysrKysrCisrKysrKysrKysrKysrKysrKysrCisrKwouCj4KXQ==
Я придумал это для своего компилятора bf,
в основном он вычитает, а затем проверяет, равен ли результат 0.
Можно легко изменить, чтобы выполнять материал в порядке if/else-ish
Макет:
[A] B
>[-<->]+<[>-<[-]]>
Выход
0 [result]
Результат равен 1, если он равен
+>>(a+++++)>(b+++++)>>+<<<
[[->]<<]
<
[>>>>>-<<<<<
a>b
]
>>
[->>-<
a<b
]
>>
[-
a=b
]
Указатель заканчивается на том же указателе в том же состоянии, но код в соответствующих скобках был выполнен.