Brainf * ck, 98 77
Очевидно, что это не для того, чтобы выиграть, но что было бы для конкуренции, если бы у нее не было мозгового решения
++++[>++++<-]>>,<[->>++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++[->++++++++<]>.[-]>[-<<<+>>>]<<<<]
Так как 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