Tout entier positif peut être obtenu en commençant par 1 et en appliquant une séquence d'opérations, chacune étant soit «multipliée par 3», soit «divisée par 2, en éliminant tout reste» .
Exemples (écrire f pour * 3 et g pour / 2):
4 = 1 *3 *3 /2 = 1 ffg
6 = 1 ffggf = 1 fffgg
21 = 1 fffgfgfgggf
Écrivez un programme avec le comportement suivant:
Entrée : tout entier positif, via stdin ou codé en dur. (S'il est codé en dur, le numéro d'entrée sera exclu de la longueur du programme.)
Sortie : une chaîne de f et de g telle que <input> = 1 <string>
(comme dans les exemples). Une telle chaîne dans l'ordre inverse est également acceptable. NB: La sortie ne contient que des f et g, ou est vide.
Le gagnant est l'entrée avec le moins d'octets de programme-plus-sortie lorsque 41 est l'entrée.
x mod 3
: si x=3y
construire y puis appliquer f
; si x=3y+1
construire 2y+1
et appliquer f
alors g
; si x=3y+2
alors cela devient compliqué mais essentiellement récursif.