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