Ароматный текст
Основанный на стеке esolang Underload имеет некоторые интересные связи с функциональным программированием. Одним из них является обработка числового типа данных - подобно лямбда-исчислению, вы представляете натуральное число N функцией, которая выполняет действие N раз.
Для простоты мы рассмотрим только следующее подмножество команд недогрузки:
:- Эта команда дублирует верхний элемент в стеке.*- Эта команда объединяет два верхних элемента в стеке в один элемент.
Определим НЕДОГРУЗКИ цифру N в виде строки :и *, при исполнении, потребляйте верхний элемент в стеке, и производят N копий этого элемента объединяются вместе. Несколько примеров:
- Нет цифр недогрузки 0, -1, 1/2, π.
- Пустая строка
является цифрой недогрузки 1, поскольку она не затрагивает стек. :*является цифрой недогрузки 2, потому что она дублирует верхний элемент, а затем объединяет эти две копии в один элемент:(A):*=(A)(A)*=(AA).::**является цифрой недогрузки 3:(A)::**=(A)(A):**=(A)(AA)*=(AAA).:::***является цифрой недогрузки 4.:*:*также цифра недогрузки 4:(A):*:*=(AA):*=(AA)(AA)*=(AAAA).
В общем, вы обнаружите, что если Mи Nявляются числами недогрузки M и N, то :N*это число N + 1 и MNэто число M × N.
Соревнование
Ваша задача - написать самую короткую программу (с вводом по STDIN) или функцию (с вводом через аргумент), которая генерирует самое короткое представление цифры Underload для его ввода в виде строки. То есть, если вход является положительным натуральным числом N> 1, вы должны создать цифру недогрузки N, длина которой в символах меньше или равна длине любой другой цифры недогружения N.
Образцы входов и выходов: («Вход - OUTPUT.»)
- 1 -
. - 2 -
:*. - 5 -
::*:**(2 × 2 + 1). - 7 -
::*::***(2 × 3 + 1) или:::**:**(3 × 2 + 1). - 33 -
::*:*:*:*:**(2 × 2 × 2 × 2 × 2 + 1). - 49 -
::*:*:*:*::***(16 × 3 + 1, длина 14), но не::*::***::*::***(7 × 7, длина 16).
Если ввод не является положительным натуральным числом, вы можете вернуть ошибку, вызвать неопределенное поведение или даже не завершиться. Объяснение вашего метода поиска ответа приветствуется.
Применяются стандартные ограничения лазейки: никаких дополнительных входных данных, никаких веб-запросов, выходное / возвращаемое значение должно быть именно ответом, а не бесконечным случайным потоком символов :и *т. Д.
x- это то, 2*A117498(x)где A117498 дает оптимальную комбинацию двоичных и факторных методов для нахождения цепочки сложений.