Se puede obtener cualquier número entero positivo comenzando con 1 y aplicando una secuencia de operaciones, cada una de las cuales es "multiplicar por 3" o "dividir por 2, descartando cualquier resto" .
Ejemplos (escribir f para * 3 yg para / 2):
4 = 1 *3 *3 /2 = 1 ffg
6 = 1 ffggf = 1 fffgg
21 = 1 fffgfgfgggf
Escribe un programa con el siguiente comportamiento:
Entrada : cualquier número entero positivo, vía stdin o codificado. (Si está codificado, el número de entrada se excluirá de la longitud del programa).
Salida : una cadena de f y g tal que <input> = 1 <string>
(como en los ejemplos). Tal cadena en orden inverso también es aceptable. NB: La salida contiene solo f's y g's, o está vacía.
El ganador es la entrada con la menor cantidad de bytes de programa más salida cuando 41 es la entrada.
x mod 3
: si x=3y
construye y y luego aplica f
; si x=3y+1
construye 2y+1
y aplica f
entonces g
; si x=3y+2
entonces se complica pero esencialmente es recursivo.