Su tarea es crear un programa de brainfuck para cada uno de los siguientes operadores binarios. Cada programa debe tomar uno o dos números de 8 bits (A y B) de la entrada y calcular la operación especificada:
A XOR B
A AND B
A OR B
A Shifted Left by 1 (circular shift)
NOT A
No tiene que implementar todos los 5. La puntuación se calcula mediante:
#totalCharacters + {4000 * #problemsNotCompleted}
Por lo tanto, los puntajes válidos son de cero (mejor) a 20,000 (nada completado).
No me importa dónde almacene el resultado, o si conserva o no la entrada. Asuma las celdas de 8 bits y todas las celdas vacías que necesite a la derecha solamente.
Puede suponer que los números ya están en cualquier ubicación de memoria que funcione mejor para usted, por lo que no necesita preocuparse por las operaciones 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
fuente
fuente
Respuestas:
Puntuación: 275
Funciona mejor expandirlos con un contador binario. Las partes menos intuitivas tratan con la posibilidad de que A o B sea 0. No encontré una forma rentable de usar el control de flujo no destructivo en la manipulación de bits real de los primeros tres. Por cierto, todo esto debería funcionar bien con celdas de 16 bits y lentamente con 32 bits.
XOR, 86
Asume que A y B están en las celdas 1 y 2, almacena A XOR B en la celda 2, el puntero comienza en la celda 0 y termina en la celda 5.
Y 78
Asume que A y B están en las celdas 1 y 2, almacena A o B en la celda 4, el puntero comienza en la celda 0 y termina en la celda 5.
O, 86
Asume que A y B están en las celdas 1 y 2, almacena A o B en la celda 2, el puntero comienza en la celda 0 y termina en la celda 5.
ROL, 18
Asume que A está en la celda 0, almacena A ROL 1 en la celda 1, el puntero comienza y termina en la celda 0.
NO 7
Asume que A está en la celda 0, almacena NO A en la celda 1, el puntero comienza y termina en la celda 0.
fuente
Puntuación: 686
Todos los fragmentos suponen que los números ya están cargados en la celda 0 y 1 y que el puntero apunta a la celda 0. Puedo agregar un fragmento atoi más adelante si es necesario para el desafío. Por ahora, puedes probar el código de esta manera:
XOR, 221
El resultado se escribe en la celda 10, el puntero termina en la celda 5
Y, 209
El resultado se escribe en la celda 10, el puntero termina en la celda 5
O 211
El resultado se escribe en la celda 10, el puntero termina en la celda 5
Girar a la izquierda, 38
El resultado se escribe en la celda 1, el puntero termina en la celda 4
NO 7
El resultado se escribe en la celda 1, el puntero termina en la celda 0
Explicación:
XOR, AND y OR funcionan de manera similar: calcule n / 2 para cada número y recuerde n mod 2. Calcule el XOR / AND / OR lógico para los bits individuales. Si se establece el bit resultante, agregue 2 ^ n al resultado. Repite eso 8 veces.
Este es el diseño de memoria que utilicé:
Aquí está la fuente de XOR (los números indican dónde está el puntero en ese momento):
Para girar a la izquierda, una vez más hay un marcador en la celda 2 para determinar si 2n es cero, ya que solo puede determinar si una celda no es cero directamente. Si es así, se escribe un bit de acarreo en la celda 4 y luego se agrega a 2n. Este es el diseño de la memoria:
fuente
,>,<
. Editaré la pregunta.Puntuación (actual):
12038837/ -Los programas suponen que los números se cargan en cualquier celda especificada, por
,
o similar. También supone que todas las celdas son de 8 bits sin firmar con ajuste según sea necesario. Al comienzo de cada fragmento, los números se cargan en la celda 0 (y 1 si es necesario).Operaciones de bits - 799
Las operaciones de bit siguen la misma estructura general.
Girar a la izquierda A, 1-31 / -
El número
A
se carga en la celda 0.NO A - 7
El número
A
se carga en la celda 0.fuente