Ваша задача состоит в том, чтобы создать одну программу brainfuck для каждого из следующих бинарных операторов. Каждая программа должна взять одно или два 8-битных числа (A и B) из ввода и вычислить указанную операцию:
A XOR B
A AND B
A OR B
A Shifted Left by 1 (circular shift)
NOT A
Вам не нужно реализовывать все 5. Оценка рассчитывается по формуле:
#totalCharacters + {4000 * #problemsNotCompleted}
Таким образом, действительные оценки от нуля (лучший) до 20 000 (ничего не завершено).
Мне все равно, где вы храните результат или сохраняете ли вы ввод. Предположим, 8-битные ячейки и столько пустых ячеек, сколько нужно только справа.
Вы можете предположить, что числа уже находятся в любом месте памяти, которое лучше всего подходит для вас, поэтому вам не нужно беспокоиться об операциях ввода-вывода.
code-golf
binary
brainfuck
code-golf
code-golf
ascii-art
random
code-golf
code-golf
code-challenge
sorting
code-golf
code-challenge
java
code-golf
statistics
code-golf
code-challenge
fastest-code
code-golf
math
code-golf
math
kolmogorov-complexity
code-golf
code-golf
array-manipulation
combinatorics
code-golf
kolmogorov-complexity
popularity-contest
underhanded
code-golf
math
floating-point
code-golf
interpreter
code-golf
music
code-golf
code-golf
cryptography
code-challenge
scrabble
code-golf
code-challenge
popularity-contest
quine
code-golf
quine
cryptography
code-golf
kolmogorov-complexity
code-golf
printable-ascii
code-golf
chess
code-golf
math
number-theory
code-challenge
c
code-golf
random
popularity-contest
hello-world
code-shuffleboard
code-golf
compression
grammars
code-golf
tips
code-golf
sequence
code-golf
string
code-challenge
sorting
permutations
code-golf
string
code-challenge
optimization
code-golf
interpreter
code-challenge
string
code-golf
math
number
fibonacci
string
compression
c#
code-golf
chemistry
popularity-contest
math
c
c++
java
code-golf
math
function
code-golf
complex-numbers
code-golf
geometry
captncraig
источник
источник
Ответы:
Оценка: 275
Лучше расширить их с помощью двоичного счетчика. Менее интуитивно понятные части имеют дело с возможностью того, что A или B равны 0. Я не нашел выгодного способа использовать неразрушающее управление потоком в реальных битовых манипуляциях первых трех. Между прочим, все это должно нормально работать с 16-разрядными ячейками и медленно с 32-разрядными.
XOR, 86
Предполагается, что A и B находятся в ячейках 1 и 2, хранит A XOR B в ячейке 2, указатель начинается в ячейке 0 и заканчивается в ячейке 5.
И, 78
Предполагается, что A и B находятся в ячейках 1 и 2, хранит A OR B в ячейке 4, указатель начинается в ячейке 0 и заканчивается в ячейке 5.
ИЛИ 86
Предполагается, что A и B находятся в ячейках 1 и 2, хранит A OR B в ячейке 2, указатель начинается в ячейке 0 и заканчивается в ячейке 5.
РОЛ, 18
Предполагается, что A находится в ячейке 0, хранит A ROL 1 в ячейке 1, указатель начинается и заканчивается в ячейке 0.
НЕ, 7
Предполагается, что A находится в ячейке 0, хранит NOT A в ячейке 1, указатель начинается и заканчивается в ячейке 0.
источник
Оценка: 686
Все фрагменты предполагают, что числа уже загружены в ячейки 0 и 1 и что указатель указывает на ячейку 0. Я могу добавить фрагмент atoi позже, если это потребуется для вызова. На данный момент вы можете попробовать код следующим образом:
XOR, 221
Результат записывается в ячейку 10, указатель заканчивается в ячейке 5
И, 209
Результат записывается в ячейку 10, указатель заканчивается в ячейке 5
ИЛИ 211
Результат записывается в ячейку 10, указатель заканчивается в ячейке 5
Поверните налево, 38
Результат записывается в ячейку 1, указатель заканчивается в ячейке 4
НЕ, 7
Результат записывается в ячейку 1, указатель заканчивается в ячейке 0
Объяснение:
XOR, AND и OR работают одинаково: вычислите n / 2 для каждого числа и запомните n mod 2. Рассчитайте логическое XOR / AND / OR для отдельных битов. Если результирующий бит установлен, добавьте 2 ^ n к результату. Повторите это 8 раз.
Это макет памяти, который я использовал:
Вот источник для XOR (числа указывают, где находится указатель в то время):
Для левого поворота снова есть маркер в ячейке 2, чтобы определить, равен ли 2n нулю, поскольку вы можете только определить, является ли ячейка ненулевой напрямую. Если это так, бит переноса записывается в ячейку 4, а затем добавляется к 2n. Это макет памяти:
источник
,>,<
. Я отредактирую вопрос.Счет (текущий):
12038837 / -Программы предполагают, что числа загружаются в любую ячейку, указанную
,
или аналогичную. Также предполагается, что все ячейки 8-битные без знака с переносом по мере необходимости. В начале каждого фрагмента числа загружаются в ячейку 0 (и 1, если необходимо).Битовые операции - 799
Битовые операции следуют той же общей структуре.
Поверните влево A, 1 - 31 / -
Номер
A
загружается в ячейку 0.НЕ А - 7
Номер
A
загружается в ячейку 0.источник