Brainf * ck, 98 77
Oczywiście nie ma to na celu wygrania, ale czym byłaby konkurencja, gdyby nie miała rozwiązania dla mózgu
++++[>++++<-]>>,<[->>++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++[->++++++++<]>.[-]>[-<<<+>>>]<<<<]
Ponieważ brainfk może obsłużyć tylko 8-bitowe liczby całkowite i żadnych negatywów, myślę, że nie w pełni przestrzega zasad, ale hej, nigdy nie byłem w stanie go wygrać.
To faktycznie działa dla 16-bitowego wejścia, jeśli twój interpreter obsługuje
Mam go nawet na wyjście w wartościach ascii
Oto kod z adnotacjami:
++[>++++<-] 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
Krótszy algorytm (77):
+>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+>+>+>+>+>+<<<<<<<<]>[.>]
Ten obsługuje tylko liczby całkowite 8bit.
Algorytm działa przy użyciu licznika binarnego, który jest w rzeczywistości bardzo krótki (jest to jeden przyrost, >[->]++[-<+]-<-który następnie określa bity. Problem polega na tym, że trudno jest wydrukować wszystkie bity
Ten ostatni algorytm można dostosować do dowolnej liczby bitów kosztem bajtów. Aby móc poradzić sobie z N bitami całkowitymi, wymaga 53 + 3 * N bajtów do zakodowania.
przykłady:
(1 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+<]>[.>]
(2 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+<<]>[.>]
(3 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+<<<]>[.>]
etc