Votre tâche consiste à créer un programme brainfuck pour chacun des opérateurs binaires suivants. Chaque programme doit prendre un ou deux nombres à 8 bits (A et B) en entrée et calculer l'opération spécifiée:
A XOR B
A AND B
A OR B
A Shifted Left by 1 (circular shift)
NOT A
Vous n'êtes pas obligé de mettre en œuvre tous les 5. Le score est calculé par:
#totalCharacters + {4000 * #problemsNotCompleted}
Les scores valides vont donc de zéro (le meilleur) à 20 000 (rien de terminé).
Peu m'importe où vous stockez le résultat, ou si vous conservez ou non l'entrée. Supposons des cellules 8 bits et autant de cellules vides que nécessaire à droite uniquement.
Vous pouvez supposer que les numéros se trouvent déjà dans l'emplacement de mémoire qui vous convient le mieux, vous n'avez donc pas à vous soucier des opérations d'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
la source
la source
Réponses:
Résultat: 275
Il est préférable de les étendre avec un compteur binaire. Les parties moins intuitives traitent de la possibilité que A ou B soit égal à 0. Je n'ai pas trouvé de moyen rentable d'utiliser le contrôle de flux non destructif dans la manipulation réelle des bits des trois premiers. Soit dit en passant, ceux-ci devraient tous fonctionner correctement avec des cellules 16 bits et lentement avec 32 bits.
XOR, 86
Suppose que A et B se trouvent dans les cellules 1 et 2, stocke A XOR B dans la cellule 2, le pointeur commence dans la cellule 0 et se termine dans la cellule 5.
ET, 78
Suppose que A et B se trouvent dans les cellules 1 et 2, stocke A OU B dans la cellule 4, le pointeur commence dans la cellule 0 et se termine dans la cellule 5.
OU, 86
Suppose que A et B se trouvent dans les cellules 1 et 2, stocke A OU B dans la cellule 2, le pointeur commence dans la cellule 0 et se termine dans la cellule 5.
ROL, 18
Suppose que A est dans la cellule 0, stocke A ROL 1 dans la cellule 1, le pointeur commence et se termine dans la cellule 0.
NON, 7
Suppose que A est dans la cellule 0, stocke PAS A dans la cellule 1, le pointeur commence et se termine dans la cellule 0.
la source
Résultat: 686
Tous les extraits supposent que les nombres sont déjà chargés dans les cellules 0 et 1 et que le pointeur pointe vers la cellule 0. Je peux ajouter un extrait atoi plus tard si cela est nécessaire pour le défi. Pour l'instant, vous pouvez essayer le code comme ceci:
XOR, 221
Le résultat est écrit dans la cellule 10, le pointeur se termine dans la cellule 5
ET, 209
Le résultat est écrit dans la cellule 10, le pointeur se termine dans la cellule 5
OU, 211
Le résultat est écrit dans la cellule 10, le pointeur se termine dans la cellule 5
Rotation à gauche, 38
Le résultat est écrit dans la cellule 1, le pointeur se termine dans la cellule 4
NON, 7
Le résultat est écrit dans la cellule 1, le pointeur se termine à la cellule 0
Explication:
XOR, AND et OR fonctionnent tous de façon similaire: Calculez n / 2 pour chaque nombre et souvenez-vous de n mod 2. Calculez le XOR / AND / OR logique pour les bits simples. Si le bit résultant est défini, ajoutez 2 ^ n au résultat. Répétez cela 8 fois.
Voici la disposition de la mémoire que j'ai utilisée:
Voici la source de XOR (les nombres indiquent où se trouve le pointeur à ce moment):
Pour la rotation vers la gauche, une fois encore, il y a un marqueur dans la cellule 2 pour déterminer si 2n est zéro, car vous ne pouvez déterminer que si une cellule est non nulle directement. Si c'est le cas, un bit de retenue est écrit dans la cellule 4 et ajouté plus tard à 2n. Voici la disposition de la mémoire:
la source
,>,<
. Je vais modifier la question.Résultat (actuel):
12038837/ -Les programmes supposent que les nombres sont chargés dans la cellule spécifiée, par
,
ou similaire. Il suppose également que toutes les cellules ne sont pas signées 8 bits avec un habillage selon les besoins. Au début de chaque extrait, les nombres sont chargés dans la cellule 0 (et 1 si nécessaire).Opérations sur les bits - 799
Les opérations sur les bits suivent la même structure générale.
Tourner à gauche A, 1 - 31 / -
Le numéro
A
est chargé dans la cellule 0.PAS A - 7
Le numéro
A
est chargé dans la cellule 0.la source