Brainf * ck, 98 77
Évidemment, ce n'est pas dans le but de gagner, mais que serait une compétition si elle n'avait pas de solution brainfk
++++[>++++<-]>>,<[->>++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]++++++[->++++++++<]>.[-]>[-<<<+>>>]<<<<]
Étant donné que brainfk ne peut gérer que des entiers 8 bits et aucun négatif, je suppose qu'il ne respecte pas pleinement les règles, mais je n'ai jamais été là pour le gagner.
Cela fonctionne réellement pour une entrée 16 bits si votre interprète prend en charge
Je l'ai même obtenu en sortie en valeurs ascii
Voici le code annoté:
++[>++++<-] 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
Algorithme plus court (77):
+>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+>+>+>+>+>+<<<<<<<<]>[.>]
Celui-ci ne peut gérer que des entiers 8 bits.
L'algorithme fonctionne en utilisant un compteur binaire qui est en fait très court (un incrément permet de >[->]++[-<+]-<-
disposer les bits. Le problème est qu'il est difficile d'imprimer tous les bits
Ce dernier algorithme peut être adapté pour s'adapter à n'importe quel nombre de bits au détriment des octets. Pour pouvoir traiter des entiers N bits, il faut 53 + 3 * N octets pour coder.
exemples:
(1 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+<]>[.>]
(2 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+<<]>[.>]
(3 bit) +>,>-<[>>[->]++[-<+]-<-]++++++++[->++++++<]>+[->+>+>+<<<]>[.>]
etc