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