Может кто-нибудь опубликовать фрагмент кода для умножения двух однозначных чисел на языке программирования brainf*ck?
Код для умножения двух однозначных чисел в Brainfuck
Ответы (6)
,>,< 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).
Что ж, возможно, у меня не самый эффективный способ обойти это, но он работает. Я делал вещи особым образом, чтобы это работало со всеми этими
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
Ну, я был вдохновлен первым и сделал его намного проще:
,>,<>[->+>+<<]>>[->>+<<]<[->>>+<<<]>>>++++++++++++++++++++++++++++++++++++++++++++++++
48+ в конце для bfdev, чтобы показать его в ascii.
Я знаю, что это было опубликовано более восьми лет назад, но я все же хотел бы поделиться своим ответом на случай, если кто-то еще наткнется на эту тему.
,>,>++++++[-<--------<-------->>]<<[->[->+>+<<]>[-<+>]<<]>[-]
>+>[->+<<<<+>>>]>[<<[-]+>>>[-]++++++++++<[->-[>]<<]<[-<<-----
----->>>>>>>+<<<<<]<[-<]>>>]>>>[-<<<<<<+>>>>>>]<<[-]<<<++++++
[-<++++++++<++++++++>>]<.[-]<.[-]
Это использует восемь ячеек пространства, которые все должны быть инициализированы нулем (в случае, если вы используете это в более крупной программе), а указатель начинается слева от большинства восьми ячеек. Он будет принимать два однозначных числа ASCII и выводить одно двузначное число ASCII. Под номером ASCII я подразумеваю, что он будет принимать и выводить значения ASCII символов, составляющих число. Когда эта программа завершится, указатель снова окажется в крайнем левом конце восьми ячеек, и все ячейки будут возвращены к нулю. Значения, которые это создаст на ленте при нормальной работе, не опустятся ниже 0 и не превысят 81, поэтому вам не нужно беспокоиться о негативах или переносе.
Немного сложно понять, но это работает
>[>>>+<<<-]>>>[>+>+<<-]>>[<<+>>-]<<<<<<[>+>+>+<<<-]>>>[<<<+>>>-]>>[-<<<[-<<+>>]<[>+>+<<-]>>[<<+>>-]<<>>>>]<[-]<<[-]<[-]<