Brainf * ck, 98 77
Rõ ràng điều này không nhằm mục đích chiến thắng nhưng cạnh tranh sẽ là gì nếu nó không có giải pháp brainfk
++++[>++++<-]>>,<[->>++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++[->++++++++<]>.[-]>[-<<<+>>>]<<<<]
Vì brainfk chỉ có thể xử lý các số nguyên 8 bit và không có tiêu cực nào, tôi đoán nó không hoàn toàn tuân thủ các quy tắc nhưng hey tôi chưa bao giờ ở trong đó để giành được nó.
Điều này thực sự hoạt động cho đầu vào 16 bit nếu trình thông dịch của bạn hỗ trợ
Tôi thậm chí đã có nó để đầu ra trong các giá trị ascii
Đây là mã chú thích:
++[>++++<-] preload 8 onto cell 1
>>,< input into cell 2
[- iterate over cell 1
>>++< put 2 in cell 3
[->-[>+>>]>[+[-<+>]>+>>]<<<<<] division algorithm: converts {n d} into {0 d_minus_n%d n%d n/d}
>[-]++++++[->++++++++<]> clears cell 4 and puts 48(ascii of 0) into cell 5
.[-] output n%2 and clear it (the bit)
>[-<<<+>>>] bring n/2 into cell 2 (to be used for division in next iteration)
<<<<] end iterate
Thuật toán ngắn hơn (77):
+>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+>+>+>+>+>+<<<<<<<<]>[.>]
Điều này chỉ có thể xử lý số nguyên 8 bit.
Thuật toán hoạt động bằng cách sử dụng bộ đếm nhị phân thực sự rất ngắn (một mức tăng >[->]++[-<+]-<-sau đó đưa ra các bit. Vấn đề là rất khó để in ra tất cả các bit
Thuật toán cuối cùng đó có thể được điều chỉnh để phù hợp với bất kỳ số bit nào với chi phí byte. Để có thể xử lý các số nguyên N bit, cần phải có byte 53 + 3 * N để mã hóa.
ví dụ:
(1 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+<]>[.>]
(2 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+<<]>[.>]
(3 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+<<<]>[.>]
etc