Brainfuck比较2个数字大于或小于

时间:2011-05-29 15:30:28

标签: brainfuck

如何将两个数字与不等式进行比较? (大于或小于)

我想比较一位数 例如

1 2
5 3
9 2

6 个答案:

答案 0 :(得分:20)

这是比较两个数字的最佳方法。为什么,如果你足够聪明,你可以在更大的程序中使用相同的代码。它非常便携。

假设我们有两个数字a,b。 我们有两个块: if(a> = b) else , 希望足够。

    0 1 0 a b 0

像这样制作数组。并指向(4)即指向 a

    +>+<                   This is for managing if a=0 and b=0
    [->-[>]<<]             This is a magic loop. if a is the one which 
                           reaches 0 first (a<b),then pointer will be at(4).
                           Else it will be at (3)
    <[-  
         //       BLOCK (a>=b)
         //You are at (2) and do whatever you want and come back to (2).
         //Its a must
    ]
    <[-<
         //       BLOCK(a<b)
         //You are at (1) and do whatever you want and come back to (1).
         //Its a must
    ]

它不会影响以下程序代码,因为两个代码块最终都会进入(1)您可以进行进一步编码,假设指针将达到(1)

如果您复制代码,请删除文档。因为代码包含一些有效的brainfuck符号,例如&lt; 。等等。

答案 1 :(得分:10)

一旦你知道两个数字之间的距离,你应该在相同的循环迭代中应该或减少它们,然后检查两者是否为零:你会理解哪一个更小。

例如:

+++++ > +++ < [->-< check is first is zero, then second]

(这只是为了给你一个提示,你必须注意同等数量和类似的问题。

答案 2 :(得分:4)

我也在考虑这个问题,虽然我确定这不是最佳解决方案,但至少它可以回答哪个数字更大的问题=)

程序要求两个字符,输出'&lt;'如果第一个更小,'&gt;'如果它更大,'='如果它们相等。输出一个字符后,程序会通过询问其他输入来暂停。

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

希望有点清楚:

+                                   init (0) to 1
>,                                  read (1)
>,                                  read (2)
<<[                                 loop forever
  >-[>>>]                           decrement (1) going to (4) if (1) != 0
  <[                                goto (0) == 1 if (1) reached 0 (otherwise goto (3))
    >>-[>++++++++++[->++++++<]>.,]  decrement (2) printing lessthan if larger than 0
    ++++++++++[->++++++<]>+.,       if (2) == 0 print '='
  ]
  <-[>>>]                           decrement (2) going to (5) if (2) != 0
  <<[                               goto (0) == 1 if (2) reached 0 (otherwise goto (3))
    >>>++++++++++[->++++++<]>++.,   print largerthan since (2) reached 0 first
  ]
  <<<                               goto(0)
]

答案 3 :(得分:1)

我提出了一个解决方案,为您提供布尔值和指针始终在同一点。

这是开头的样子:

0 0 0 a b 0 0
      p

这是两个可能的输出:

0 0 0 0 0 1 0   #true
            p

0 0 0 0 0 0 0   #false
            p

代码:

 >>>>
    [                 # while cell != 0
      -               #   decrement a
      [               #   if a != 0
        >-            #     decrement b 
        [             #     if b != 0
          <           #       go left
          <-<         #       undo the finally-block;
        ]             #     finally-block
        <[-]>         #       clear a
        >+>           #       res = 1; move to end-position
        <<<           #       undo the finally-block
      ]               #   finally-block
      >[-]>>          #     clear b; res = 0; move to end-position
    ]                 #

缩小版本:

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

答案 4 :(得分:-1)

给定两个数字A和B,如果A大于B,则下面的代码将打印A;如果B大于A,则打印B;如果两者相等,则打印C.

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

答案 5 :(得分:-10)

BF中没有这样的东西。 BF中的><分别将指针移动到右侧和左侧。