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