Brainf * ck, 98 77
Dies ist natürlich nicht zum Gewinnen gedacht, aber was wäre ein Wettbewerb, wenn es keine Brainfk-Lösung gäbe?
++++[>++++<-]>>,<[->>++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++[->++++++++<]>.[-]>[-<<<+>>>]<<<<]
Da brainfk nur mit 8-Bit-Ganzzahlen und keinen Negativen umgehen kann, halte ich mich nicht vollständig an die Regeln, aber hey, ich war nie dabei, um es zu gewinnen.
Dies funktioniert tatsächlich für 16-Bit-Eingaben, wenn Ihr Interpreter dies unterstützt
Ich habe es sogar in ASCII-Werten ausgegeben
Hier ist der kommentierte Code:
++[>++++<-] 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
Kürzere Algorithmus (77):
+>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+>+>+>+>+>+<<<<<<<<]>[.>]
Dieser kann nur 8-Bit-Ganzzahlen verarbeiten.
Der Algorithmus arbeitet mit einem Binärzähler, der eigentlich sehr kurz ist (ein Inkrement >[->]++[-<+]-<-
legt dann die Bits fest. Das Problem ist, dass es schwierig ist, alle Bits auszudrucken
Dieser letzte Algorithmus kann auf Kosten von Bytes an eine beliebige Anzahl von Bits angepasst werden. Um mit N Bit-Ganzzahlen umgehen zu können, sind zum Codieren 53 + 3 * N Bytes erforderlich.
Beispiele:
(1 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+<]>[.>]
(2 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+<<]>[.>]
(3 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+<<<]>[.>]
etc