Dowolną dodatnią liczbę całkowitą można uzyskać, rozpoczynając od 1 i stosując sekwencję operacji, z których każda albo „pomnóż przez 3”, albo „podziel przez 2, odrzucając resztę” .
Przykłady (pisanie f dla * 3 ig dla / 2):
4 = 1 *3 *3 /2 = 1 ffg
6 = 1 ffggf = 1 fffgg
21 = 1 fffgfgfgggf
Napisz program o następującym działaniu:
Dane wejściowe : dowolna dodatnia liczba całkowita, poprzez stdin lub na stałe. (W przypadku zakodowania na stałe, numer wejściowy zostanie wykluczony z długości programu.)
Wyjście : ciąg znaków f i g taki, że <input> = 1 <string>(jak w przykładach). Taki ciąg w odwrotnej kolejności jest również dopuszczalny. NB: Dane wyjściowe zawierają tylko f i g lub są puste.
Zwycięzcą jest pozycja z najmniejszą liczbą bajtów programu plus wyjście, gdy 41 to wejście.
x mod 3przypadki: jeśli x=3yskonstruuj y, a następnie zastosuj f; jeśli x=3y+1skonstruuj 2y+1i zastosuj, fto g; jeśli x=3y+2to się komplikuje, ale zasadniczo jest rekurencyjne.