Brainf * ck, 98 77
Ovviamente questo non ha lo scopo di vincere, ma quale sarebbe una competizione se non avesse una soluzione Brainfk
++++[>++++<-]>>,<[->>++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++[->++++++++<]>.[-]>[-<<<+>>>]<<<<]
Dal momento che brainfk può gestire solo numeri interi a 8 bit e nessun aspetto negativo, suppongo che non rispetti completamente le regole, ma hey non ci sono mai stato per vincerlo.
Questo effettivamente funziona per l'input a 16 bit se il tuo interprete supporta
Ho anche ottenuto l'output in valori ASCII
Ecco il codice annotato:
++[>++++<-] 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
Algoritmo più breve (77):
+>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+>+>+>+>+>+<<<<<<<<]>[.>]
Questo può gestire solo numeri interi a 8 bit.
L'algoritmo funziona utilizzando un contatore binario che in realtà è molto breve (un incremento è >[->]++[-<+]-<-che quindi stabilisce i bit. Il problema è che è difficile stampare tutti i bit
Quest'ultimo algoritmo può essere adattato per adattarsi a qualsiasi numero di bit a spese dei byte. Per poter gestire numeri interi a N bit, per la codifica sono necessari 53 + 3 * N byte.
esempi:
(1 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+<]>[.>]
(2 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+<<]>[.>]
(3 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+<<<]>[.>]
etc