Brainf * ck, 98 77
분명히 이것은 승리의 목적이 아니지만 brainfk 솔루션이 없다면 경쟁은 무엇입니까?
++++[>++++<-]>>,<[->>++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++[->++++++++<]>.[-]>[-<<<+>>>]<<<<]
brainfk는 8 비트 정수와 음수 만 처리 할 수 있으므로 규칙을 완전히 준수하지는 않지만 이길 수는 없었습니다.
인터프리터가 지원하는 경우 실제로 16 비트 입력에서 작동합니다
심지어 ASCII 값으로 출력했습니다.
주석이 달린 코드는 다음과 같습니다.
++[>++++<-] 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
더 짧은 알고리즘 (77) :
+>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+>+>+>+>+>+<<<<<<<<]>[.>]
이것은 8 비트 정수만 처리 할 수 있습니다.
이 알고리즘은 실제로 매우 짧은 이진 카운터를 사용하여 작동합니다 (한 증분은 >[->]++[-<+]-<-
비트를 배치합니다. 문제는 모든 비트를 인쇄하는 것이 어렵다는 것입니다)
마지막 알고리즘은 바이트를 희생하여 임의의 수의 비트에 맞도록 조정될 수 있습니다. N 비트 정수를 처리 할 수 있으려면 인코딩에 53 + 3 * N 바이트가 필요합니다.
예 :
(1 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+<]>[.>]
(2 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+<<]>[.>]
(3 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+<<<]>[.>]
etc