Brainfuck сравнить 2 числа больше или меньше, чем - PullRequest
16 голосов
/ 29 мая 2011

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

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

1 2
5 3
9 2

и т. д.

Ответы [ 5 ]

20 голосов
/ 11 ноября 2012

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

Предположим, у нас есть два числа 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)

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

10 голосов
/ 29 мая 2011

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

Например:

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

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

4 голосов
/ 05 июля 2012

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

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

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

Надеюсь, что-то понятнее:

+                                   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 голосов
/ 06 февраля 2017

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

0 голосов
/ 29 мая 2011

Такого в БФ не существует. > и < в BF перемещают указатель вправо и влево соответственно.

...