Wynik: 686
Wszystkie fragmenty zakładają, że liczby są już załadowane do komórek 0 i 1 oraz że wskaźnik wskazuje na komórkę 0. Mogę dodać fragment atoi później, jeśli jest to wymagane do wyzwania. Na razie możesz wypróbować następujący kod:
+++++++++> number 1
++++< number 2
XOR, 221
Wynik jest zapisywany w komórce 10, wskaźnik kończy się w komórce 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->>+<<]>[>[-<->]<[->+<]]>[[-]<<<[->+>-<<
]>[-<+>]+>+++++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
ORAZ 209
Wynik jest zapisywany w komórce 10, wskaźnik kończy się w komórce 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->[->+<]<]>[-]>[-<<<[->+>-<<]>[-<+>]+>++
+++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
LUB 211
Wynik jest zapisywany w komórce 10, wskaźnik kończy się w komórce 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->>+<<]>[->+<]>[[-]<<<[->+>-<<]>[-<+>]+>
+++++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
Obróć w lewo, 38
Wynik jest zapisywany w komórce 1, wskaźnik kończy się w komórce 4
[->++>+<[>-]>[->>+<]<<<]>>>>[-<<<+>>>]
NIE 7
Wynik jest zapisywany w komórce 1, wskaźnik kończy się na komórce 0
+[+>+<]
Wyjaśnienie:
XOR, AND i OR działają podobnie: Oblicz n / 2 dla każdej liczby i zapamiętaj n mod 2. Oblicz logiczne XOR / AND / OR dla pojedynczych bitów. Jeśli bit wynikowy jest ustawiony, dodaj 2 ^ n do wyniku. Powtórz to 8 razy.
Oto układ pamięci, którego użyłem:
0 1 2 3 4 5 6 7
n1 | n2 | marker | n/2 | 0 | counter | bit1 | bit2 |
8 9 10
temp | temp | result
Oto źródło XOR (liczby wskazują, gdzie w tym czasie znajduje się wskaźnik):
>>>>>
++++ ++++ 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
]
<<<
]
W przypadku obracania w lewo ponownie w komórce 2 znajduje się znacznik określający, czy 2n jest równy zero, ponieważ można jedynie ustalić, czy komórka jest niezerowa bezpośrednio. Jeśli tak, bit przeniesienia jest zapisywany w komórce 4, a później dodawany do 2n. Oto układ pamięci:
0 1 2 3 4
n | 2n | marker | 0 | carry