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:
+++++++++> number 1
++++< number 2
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:
0 1 2 3 4 5 6 7
n1 | n2 | marker | n/2 | 0 | counter | bit1 | bit2 |
8 9 10
temp | temp | result
Voici la source de XOR (les nombres indiquent où se trouve le pointeur à ce moment):
>>>>>
++++ ++++ counter
[
-
<<<<<
divide n1 by two
[ 0
-
>>+ set marker 2
<< 0
[->>->+<] dec marker inc n/2
>> 2 or 4
[->>>>+<<]
<<<<
]
>>>
[-<<<+>>>]
<<
divide n2 by two
[ 1
-
>+ set marker 2
< 1
[->->+>>>>>] dec marker inc n/2
> 2 or 9
[->>>>>+>>]
<<<< <<<<
]
>>[-<<+>>] 3
>>> 6
[->>+<<]>[>[-<->]<[->+<]]> one bit xor 8
[
[-]<<< 5
[->+>-<<] copy counter negative
> 6
[-<+>]
+> 7
++++ +++ cell 6 contains a one and cell 7 how many bits to shift
[-<[->>++<<]>>[-<<+>>]<] 2^n
< 6
[->>>>+<<<<]
>> 8
]
<<<
]
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:
0 1 2 3 4
n | 2n | marker | 0 | carry