Код для умножения двух однозначных чисел в Brainfuck - PullRequest
4 голосов
/ 02 марта 2011

Может кто-нибудь опубликовать кусок кода для умножения двух однозначных чисел на языке программирования brainf * ck?

Ответы [ 6 ]

8 голосов
/ 10 апреля 2011
,>,< input numbers at cell #1 #2
[
 > go to cell #2
 [
   ->+>+<< move data to cell #3 #4
 ]
 >> go to cell #4
 [
  -<<+>> move data to cell #2
 ]
 <<< go to cell #1
 - decrement cell #1
]
>>. output cell #3

Программа прочитает ячейку # 1, # 2, и результат появится в ячейке # 3

Я использую BF-интерпретатор, где я могу вводить числа как числа (не символы ASCII)

6 голосов
/ 03 ноября 2014

Ну, у меня может быть не самый эффективный способ обойти это, но это работает.Я делал вещи определенным образом, чтобы они работали со всеми этими

2 * 3 = 6

6 * 7 = 42

4 * 5= 20

Итак, вот оно:

read 
>, >, <<

convert from ascii
+++++ +
[
 >----- ---
 >----- ---
 <<-
]

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

separate numbers
>[-]>+> >+++++ +++++<
[
 - >- [>>>]+++++ +++++<<+
 [<<<]>>>>
]
<-
<+++++ +++++>>>[-<<<->>>]<<<


convert to ascii
<+++++ +
[
 >+++++ +++>
 [+++++ +++>]
 <[<]>-
]

print
>>[.<<]<[<<]>>.

Я использовал этот интерпретатор: http://esoteric.sange.fi/brainfuck/impl/interp/i.html

2 голосов
/ 29 ноября 2012

Ну, я был вдохновлен первым и сделал его намного проще:

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

48+ в конце для bfdev, чтобы показать это в ascii.

0 голосов
/ 14 июня 2019

Я знаю, что это было опубликовано более восьми лет назад, но я все же хотел бы поделиться своим ответом на случай, если кто-нибудь еще наткнется на эту тему.

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

При этом используется восемь ячеек пространства, которые все должны быть инициализированы нулем (если вы используете это в более крупной программе), а указатель начинается слева от большинства из восьми ячеек. Он будет принимать два однозначных числа ASCII и выводить однозначное число ASCII. Под номером ASCII я имею в виду, что он будет принимать и выводить значения ASCII символов, составляющих число. Когда эта программа будет завершена, указатель снова окажется в самом левом конце восьми ячеек, и все ячейки будут возвращены к нулю. Значения, которые будут получены на ленте при нормальной работе, не будут опускаться ниже 0 или превышать 81, поэтому вам не нужно беспокоиться о негативах или переносе.

0 голосов
/ 28 мая 2015

Вроде сложно понять, но работает

>[>>>+<<<-]>>>[>+>+<<-]>>[<<+>>-]<<<<<<[>+>+>+<<<-]>>>[<<<+>>>-]>>[-<<<[-<<+>>]<[>+>+<<-]>>[<<+>>-]<<>>>>]<[-]<<[-]<[-]<
0 голосов
/ 29 декабря 2011
,>,<[>[>+>+<<-]>>[<<+>>-]<<<-]>>.
...