Ароматный текст
Основанный на стеке 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 дает оптимальную комбинацию двоичных и факторных методов для нахождения цепочки сложений.