Punteggio: 686
Tutti i frammenti presumono che i numeri siano già caricati nelle celle 0 e 1 e che il puntatore punti alla cella 0. Posso aggiungere un frammento audio in un secondo momento, se necessario per la sfida. Per ora, puoi provare il codice in questo modo:
+++++++++> number 1
++++< number 2
XOR, 221
Il risultato viene scritto nella cella 10, il puntatore termina nella cella 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->>+<<]>[>[-<->]<[->+<]]>[[-]<<<[->+>-<<
]>[-<+>]+>+++++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
E, 209
Il risultato viene scritto nella cella 10, il puntatore termina nella cella 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->[->+<]<]>[-]>[-<<<[->+>-<<]>[-<+>]+>++
+++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
O, 211
Il risultato viene scritto nella cella 10, il puntatore termina nella cella 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->>+<<]>[->+<]>[[-]<<<[->+>-<<]>[-<+>]+>
+++++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
Ruota a sinistra, 38
Il risultato viene scritto nella cella 1, il puntatore termina nella cella 4
[->++>+<[>-]>[->>+<]<<<]>>>>[-<<<+>>>]
NON, 7
Il risultato viene scritto nella cella 1, il puntatore termina nella cella 0
+[+>+<]
Spiegazione:
XOR, AND e OR funzionano tutti in modo simile: calcola n / 2 per ciascun numero e ricorda n mod 2. Calcola lo XOR / AND / OR logico per i singoli bit. Se il bit risultante è impostato, aggiungere 2 ^ n al risultato. Ripeti 8 volte.
Questo è il layout di memoria che ho usato:
0 1 2 3 4 5 6 7
n1 | n2 | marker | n/2 | 0 | counter | bit1 | bit2 |
8 9 10
temp | temp | result
Ecco la fonte per XOR (i numeri indicano dove si trova il puntatore in quel 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
]
<<<
]
Per la rotazione a sinistra, c'è ancora una volta un marcatore nella cella 2 per determinare se 2n è zero, poiché è possibile determinare solo se una cella è direttamente diversa da zero. In tal caso, un bit di carry viene scritto nella cella 4 e successivamente aggiunto a 2n. Questo è il layout di memoria:
0 1 2 3 4
n | 2n | marker | 0 | carry