Brainf * ck, 98 77
Açıkçası bu kazanma amacıyla değil, eğer bir brainfk çözümü olmasaydı bir rekabet ne olurdu?
++++[>++++<-]>>,<[->>++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++[->++++++++<]>.[-]>[-<<<+>>>]<<<<]
Brainfk sadece 8 bit tamsayıları işleyebildiğinden ve negatif olmadığından, kurallara tam olarak uymadığını, ancak bunu kazanmak için asla orada değildim.
Tercümanınız destekliyorsa bu aslında 16 bit giriş için işe yarar
ASCII değerlerinde çıktı bile aldım
Açıklamalı kod şöyledir:
++[>++++<-] 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
Daha kısa algoritma (77):
+>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+>+>+>+>+>+<<<<<<<<]>[.>]
Bu sadece 8 bit tamsayıları işleyebilir.
Algoritma, aslında çok kısa olan bir ikili sayaç kullanarak çalışır (bir artış daha >[->]++[-<+]-<-
sonra bitleri ortaya koyar. Sorun tüm bitleri yazdırmanın zor olmasıdır
Bu son algoritma, bayt pahasına herhangi bir sayıda bite uyacak şekilde uyarlanabilir. N bit tamsayıları ile başa çıkabilmek için 53 + 3 * N bayt kodlaması gerekir.
örnekler:
(1 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+<]>[.>]
(2 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+<<]>[.>]
(3 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+<<<]>[.>]
etc