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:
+++++++++> number 1
++++< number 2
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é:
0 1 2 3 4 5 6 7
n1 | n2 | marker | n/2 | 0 | counter | bit1 | bit2 |
8 9 10
temp | temp | result
Aquí está la fuente de XOR (los números indican dónde está el puntero en ese 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 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:
0 1 2 3 4
n | 2n | marker | 0 | carry