在 Brainfuck 中计算 x ==y
Count if x ==y in Brainfuck
我正在尝试在 brainfuck 中构建一个计数器来计算“!”的出现次数在任何给定的输入中,如果 '!'出现3次'OK'应该打印出来,否则什么都不打印。
这是我的代码:
+++ //0:'3'
[>++++++++++ ++++++++++ ++++++++++ +++ // a loop which compare each char in the given text with the '33*+'which means '!' saved in cell 1:'33'
>,<
[->-<] <-] //and reducing the 3 in cell 0 -1
>>>++++++++++ ++++++++++ ++++++++++ // char 'o' in 2
++++++++++ ++++++++++ ++++++++++
++++++++++ ++++++++++ ++++++++++
++++++++++ ++++++++++ +
> ++++++++++ +++++++++ ++++++++++ // char 'k' in 3
++++++++++ +++++++++ ++++++++++
++++++++++ +++++++++ ++++++++++
++++++++++ +++++++
<<<[->]>>.>. // if false ok won't be printed .
现在上面的问题是计数器计数器每个字符,而不仅仅是 '!'。我的问题是,如何在 Brainfuck 中指定它?
BF 中只有一个比较运算符。将某物与 0 进行比较(分别使用 [
和 ]
命令)。
因此,要比较相等性,您需要将一个数字从另一个数字中减去,并检查结果是否为 0。如果您正在使用允许换行的 brainfuck 实现(从 0 中减去 1 得到最大值)那么这真的很容易,因为你像这样从一个数字中减去另一个数字(假设值在单元格 0 和 1 中):
>[<->-]<
这以单元格 0 中的结果结束,单元格 0 和单元格 1 的指针设置为 0。
从那里开始,检查值是否为 0 很简单。指针仍位于单元格 0(减法结果所在的位置),您可以执行以下操作:
[ if the current value is not 0
your code goes here
return back to cell 0
[-] clear cell 0 so the "loop" exits after only one iteration
] exit the loop after only one iteration (if cell 0 was originally nonzero) and leave cell 0 with the value 0 inside
如果您的 brainfuck 实现不支持换行,则您需要一次执行此步骤。从每个数字中减去一个,并在每一步检查它们中的任何一个是否为零(记住复制周围的值,这样它们就不会被破坏,您仍然可以执行下一次迭代)。一旦其中一个值为零,就终止循环。如果值相等,此时两个值都应为零。我将把这个算法的实现作为练习留给你:)
我正在尝试在 brainfuck 中构建一个计数器来计算“!”的出现次数在任何给定的输入中,如果 '!'出现3次'OK'应该打印出来,否则什么都不打印。 这是我的代码:
+++ //0:'3'
[>++++++++++ ++++++++++ ++++++++++ +++ // a loop which compare each char in the given text with the '33*+'which means '!' saved in cell 1:'33'
>,<
[->-<] <-] //and reducing the 3 in cell 0 -1
>>>++++++++++ ++++++++++ ++++++++++ // char 'o' in 2
++++++++++ ++++++++++ ++++++++++
++++++++++ ++++++++++ ++++++++++
++++++++++ ++++++++++ +
> ++++++++++ +++++++++ ++++++++++ // char 'k' in 3
++++++++++ +++++++++ ++++++++++
++++++++++ +++++++++ ++++++++++
++++++++++ +++++++
<<<[->]>>.>. // if false ok won't be printed .
现在上面的问题是计数器计数器每个字符,而不仅仅是 '!'。我的问题是,如何在 Brainfuck 中指定它?
BF 中只有一个比较运算符。将某物与 0 进行比较(分别使用 [
和 ]
命令)。
因此,要比较相等性,您需要将一个数字从另一个数字中减去,并检查结果是否为 0。如果您正在使用允许换行的 brainfuck 实现(从 0 中减去 1 得到最大值)那么这真的很容易,因为你像这样从一个数字中减去另一个数字(假设值在单元格 0 和 1 中):
>[<->-]<
这以单元格 0 中的结果结束,单元格 0 和单元格 1 的指针设置为 0。
从那里开始,检查值是否为 0 很简单。指针仍位于单元格 0(减法结果所在的位置),您可以执行以下操作:
[ if the current value is not 0
your code goes here
return back to cell 0
[-] clear cell 0 so the "loop" exits after only one iteration
] exit the loop after only one iteration (if cell 0 was originally nonzero) and leave cell 0 with the value 0 inside
如果您的 brainfuck 实现不支持换行,则您需要一次执行此步骤。从每个数字中减去一个,并在每一步检查它们中的任何一个是否为零(记住复制周围的值,这样它们就不会被破坏,您仍然可以执行下一次迭代)。一旦其中一个值为零,就终止循环。如果值相等,此时两个值都应为零。我将把这个算法的实现作为练习留给你:)