Điểm: 686
Tất cả các đoạn mã giả định rằng các số đã được tải trong ô 0 và 1 và con trỏ trỏ đến ô 0. Tôi có thể thêm một đoạn trích sau nếu điều đó là bắt buộc cho thử thách. Hiện tại, bạn có thể thử mã như thế này:
+++++++++> number 1
++++< number 2
XOR, 221
Kết quả được ghi vào ô 10, con trỏ kết thúc ở ô 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->>+<<]>[>[-<->]<[->+<]]>[[-]<<<[->+>-<<
]>[-<+>]+>+++++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
VÀ, 209
Kết quả được ghi vào ô 10, con trỏ kết thúc ở ô 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->[->+<]<]>[-]>[-<<<[->+>-<<]>[-<+>]+>++
+++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
HOẶC, 211
Kết quả được ghi vào ô 10, con trỏ kết thúc ở ô 5
>>>>>++++++++[-<<<<<[->>+<<[->>->+<]>>[->>>>+<<]<<<<]>>>[-<<<+>>>]<<[->+<[->->+>
>>>>]>[->>>>>+>>]<<<<<<<<]>>[-<<+>>]>>>[->>+<<]>[->+<]>[[-]<<<[->+>-<<]>[-<+>]+>
+++++++[-<[->>++<<]>>[-<<+>>]<]<[->>>>+<<<<]>>]<<<]
Xoay trái, 38
Kết quả được ghi vào ô 1, con trỏ kết thúc ở ô 4
[->++>+<[>-]>[->>+<]<<<]>>>>[-<<<+>>>]
KHÔNG, 7
Kết quả được ghi vào ô 1, con trỏ kết thúc tại ô 0
+[+>+<]
Giải trình:
XOR, AND và OR đều hoạt động theo kiểu tương tự: Tính n / 2 cho mỗi số và nhớ n mod 2. Tính toán XOR / AND / OR logic cho các bit đơn. Nếu bit kết quả được đặt, thêm 2 ^ n vào kết quả. Lặp lại 8 lần đó.
Đây là cách bố trí bộ nhớ tôi đã sử dụng:
0 1 2 3 4 5 6 7
n1 | n2 | marker | n/2 | 0 | counter | bit1 | bit2 |
8 9 10
temp | temp | result
Đây là nguồn cho XOR (số cho biết con trỏ đang ở đâu tại thời điểm đó):
>>>>>
++++ ++++ 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
]
<<<
]
Đối với xoay trái, một lần nữa có một điểm đánh dấu trong ô 2 để xác định xem 2n có bằng 0 hay không, vì bạn chỉ có thể xác định nếu một ô khác không trực tiếp. Nếu vậy, một bit mang được ghi vào ô 4 và sau đó được thêm vào 2n. Đây là cách bố trí bộ nhớ:
0 1 2 3 4
n | 2n | marker | 0 | carry