Brainfuck сравнить 2 числа как больше или меньше, чем

Как я могу сравнить два числа с неравенством? (больше или меньше чем)

Я хочу сравнить однозначные цифры Например

1 2
5 3
9 2

и т.п.

5 ответов

Это лучший способ сравнения двух чисел. Почему, если вы достаточно умны, вы можете использовать один и тот же код в больших программах.

Предположим, у нас есть два числа a, b. у нас есть два блока: если ( a>=b) и еще, надеюсь, этого достаточно.

    0 1 0 a b 0

Сделайте массив таким. И указать на (4) т.е. указать на

    +>+<                   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)

Пожалуйста, удалите документацию, если вы копируете код. Потому что код содержит несколько допустимых символов, например <., так далее.

Как только вы узнаете, какое расстояние между двумя числами, вы должны или уменьшите оба из них в одной и той же итерации цикла, а затем проверьте, что оба равны нулю: вы поймете, какое из них меньше.

Например:

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

(это просто для того, чтобы дать вам подсказку, вам придется позаботиться о равных числах и подобных проблемах.

Я тоже думал об этом, и хотя я уверен, что это не лучшее решение, по крайней мере, оно может ответить на вопрос, какое число больше =)

Программа запрашивает два символа, выводит "<", если первый меньше, ">", если он больше, и "=", если они равны. После вывода одного символа программа останавливается, запрашивая дополнительный ввод.

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

Надеюсь, несколько яснее:

+                                   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)
]

Я сделал решение, которое возвращает логическое значение и указатель всегда в одной и той же точке.

Вот как это выглядит в начале:

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
    ]                 #

уменьшенная версия:

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

Учитывая два числа A и B, следующий код напечатает A, если A больше, чем B, B, если B больше, чем A, и C, если оба равны.

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

В БФ такой вещи не существует. > а также < в BF переместите указатель вправо и влево соответственно.

Другие вопросы по тегам