Sua tarefa é criar um programa cerebral para cada um dos seguintes operadores binários. Cada programa deve pegar um ou dois números de 8 bits (A e B) da entrada e calcular a operação especificada:
A XOR B
A AND B
A OR B
A Shifted Left by 1 (circular shift)
NOT A
Você não precisa implementar todos os 5. A pontuação é calculada por:
#totalCharacters + {4000 * #problemsNotCompleted}
Portanto, as pontuações válidas variam de zero (melhor) a 20.000 (nada concluído).
Não me importo onde você armazena o resultado ou se preserva ou não a entrada. Suponha células de 8 bits e quantas células vazias forem necessárias apenas para a direita.
Você pode supor que os números já estejam em qualquer local de memória que funcione melhor para você, para que você não precise se preocupar com operações de E / S.
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
fonte
fonte
Respostas:
Pontuação: 275
Funciona melhor para expandi-los com um contador binário. As partes menos intuitivas lidam com a possibilidade de que A ou B seja 0. Não encontrei uma maneira lucrativa de usar o controle não destrutivo do fluxo na manipulação real de bits dos três primeiros. Aliás, todos eles devem funcionar bem com células de 16 bits e lentamente com 32 bits.
XOR, 86
Supõe que A e B estão nas células 1 e 2, armazena A XOR B na célula 2, o ponteiro começa na célula 0 e termina na célula 5.
AND, 78
Supõe que A e B estão nas células 1 e 2, armazena A ou B na célula 4, o ponteiro começa na célula 0 e termina na célula 5.
OU 86
Supõe que A e B estão nas células 1 e 2, armazena A ou B na célula 2, o ponteiro começa na célula 0 e termina na célula 5.
ROL, 18
Supõe que A esteja na célula 0, armazena um ROL 1 na célula 1, o ponteiro inicia e termina na célula 0.
NÃO 7
Supõe que A esteja na célula 0, armazena NÃO A na célula 1, o ponteiro inicia e termina na célula 0.
fonte
Pontuação: 686
Todos os trechos assumem que os números já estão carregados nas células 0 e 1 e que o ponteiro aponta para a célula 0. Posso adicionar um trecho de atoi posteriormente, se necessário para o desafio. Por enquanto, você pode tentar o código assim:
XOR, 221
O resultado é gravado na célula 10, o ponteiro termina na célula 5
AND, 209
O resultado é gravado na célula 10, o ponteiro termina na célula 5
OR, 211
O resultado é gravado na célula 10, o ponteiro termina na célula 5
Girar para a esquerda, 38
O resultado é gravado na célula 1, o ponteiro termina na célula 4
NÃO 7
O resultado é gravado na célula 1, o ponteiro termina na célula 0
Explicação:
XOR, AND e OR funcionam de maneira semelhante: calcule n / 2 para cada número e lembre-se do mod 2. Calcule o XOR / AND / OR lógico para os bits únicos. Se o bit resultante estiver definido, adicione 2 ^ n ao resultado. Repita isso 8 vezes.
Este é o layout de memória que eu usei:
Aqui está a fonte do XOR (os números indicam onde o ponteiro está naquele momento):
Para rotação à esquerda, mais uma vez há um marcador na célula 2 para determinar se 2n é zero, pois você só pode determinar se uma célula é diferente de zero diretamente. Nesse caso, um bit de transporte é gravado na célula 4 e posteriormente adicionado a 2n. Este é o layout da memória:
fonte
,>,<
. Vou editar a pergunta.Pontuação (atual):
12038837/ -Os programas assumem que os números são carregados em qualquer célula especificada, por
,
ou similar. Ele também pressupõe que todas as células tenham 8 bits sem assinatura com quebra automática, conforme necessário. No início de cada trecho, os números são carregados na célula 0 (e 1, se necessário).Operações de bit - 799
As operações de bit seguem a mesma estrutura geral.
Gire à esquerda A, 1 - 31 / -
O número
A
é carregado na célula 0.NÃO A - 7
O número
A
é carregado na célula 0.fonte