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:
+++++++++> number 1
++++< number 2
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:
0 1 2 3 4 5 6 7
n1 | n2 | marker | n/2 | 0 | counter | bit1 | bit2 |
8 9 10
temp | temp | result
Aqui está a fonte do XOR (os números indicam onde o ponteiro está naquele momento):
>>>>>
++++ ++++ 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
]
<<<
]
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:
0 1 2 3 4
n | 2n | marker | 0 | carry