Будь-яке додатне ціле число можна отримати, починаючи з 1 і застосовуючи послідовність операцій, кожну з яких або "помножити на 3", або "ділити на 2, відкинувши будь-який залишок" .
Приклади (написання f для * 3 і g для / 2):
4 = 1 *3 *3 /2 = 1 ffg
6 = 1 ffggf = 1 fffgg
21 = 1 fffgfgfgggf
Напишіть програму з такою поведінкою:
Введення : будь-яке додатне ціле число, через stdin або жорстко закодоване. (Якщо жорстко закодовано, вхідна цифра буде виключена з програмної довжини.)
Вихід : рядок f і g такий, що <input> = 1 <string>
(як у прикладах). Така рядок у зворотному порядку також прийнятна. Примітка: Вихід містить лише f і g, або порожній.
Виграш - запис із найменшими байтами програми плюс-вихід, коли 41 - це вхід.
x mod 3
: якщо x=3y
побудувати y, а потім застосувати f
; якщо x=3y+1
побудувати 2y+1
та застосувати f
тоді g
; якщо x=3y+2
тоді це ускладнюється, але по суті є рекурсивним.