Puan: 686
Tüm snippet'ler, sayıların zaten 0 ve 1 hücresine yüklendiğini ve işaretçinin 0 hücresini gösterdiğini varsayar. Şimdilik kodu şöyle deneyebilirsiniz:
+++++++++> number 1
++++< number 2
XOR, 221
Sonuç 10 hücresine yazılır, işaretçi 5. hücrede biter
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->>+<<]>[>[-<->]<[->+<]]>[[-]<<<[->+>-<<
]>[-<+>]+>+++++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
VE, 209
Sonuç 10 hücresine yazılır, işaretçi 5. hücrede biter
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->[->+<]<]>[-]>[-<<<[->+>-<<]>[-<+>]+>++
+++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
VEYA, 211
Sonuç 10 hücresine yazılır, işaretçi 5. hücrede biter
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->>+<<]>[->+<]>[[-]<<<[->+>-<<]>[-<+>]+>
+++++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
Sola Döndür, 38
Sonuç hücre 1'e yazılır, işaretçi hücre 4'te biter
[->++>+<[>-]>[->>+<]<<<]>>>>[-<<<+>>>]
DEĞİL, 7
Sonuç hücre 1'e yazılır, işaretçi 0 hücresinde biter
+[+>+<]
Açıklama:
XOR, VE ve VEYA hepsi benzer şekilde çalışır: Her sayı için n / 2 hesapla ve n mod 2'yi hatırla. Tek bitler için mantıksal XOR / VE / VEYA hesapla. Ortaya çıkan bit ayarlanmışsa, sonuca 2 ^ n ekleyin. Bunu 8 kez tekrarlayın.
Kullandığım bellek düzeni bu:
0 1 2 3 4 5 6 7
n1 | n2 | marker | n/2 | 0 | counter | bit1 | bit2 |
8 9 10
temp | temp | result
İşte XOR kaynağı (sayılar işaretçinin o sırada nerede olduğunu gösterir):
>>>>>
++++ ++++ 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
]
<<<
]
Sola döndürme için, 2n hücresinde 2n'nin sıfır olup olmadığını belirlemek için bir kez daha bir işaretleyici vardır, çünkü yalnızca bir hücrenin doğrudan sıfır olup olmadığını belirleyebilirsiniz. Bu durumda, hücre 4'e bir taşıma biti yazılır ve daha sonra 2n'ye eklenir. Bu bellek düzeni:
0 1 2 3 4
n | 2n | marker | 0 | carry