Qualquer número inteiro positivo pode ser obtido começando com 1 e aplicando uma sequência de operações, cada uma das quais é "multiplicada por 3" ou "dividida por 2, descartando qualquer restante" .
Exemplos (escrevendo f para * 3 eg para / 2):
4 = 1 *3 *3 /2 = 1 ffg
6 = 1 ffggf = 1 fffgg
21 = 1 fffgfgfgggf
Escreva um programa com o seguinte comportamento:
Entrada : qualquer número inteiro positivo, via stdin ou codificado. (Se codificado, o número de entrada será excluído do comprimento do programa.)
Saída : uma sequência de f e g tais que <input> = 1 <string>
(como nos exemplos). Essa string na ordem inversa também é aceitável. NB: A saída contém apenas f e eg, ou está vazia.
O vencedor é a entrada com o menor número de bytes de programa com saída quando 41 é a entrada.
x mod 3
: se x=3y
construa y e aplique f
; se x=3y+1
construir 2y+1
e aplicar f
então g
; se, x=3y+2
então, fica complicado, mas essencialmente é recursivo.