Фон
Многие эзотерические языки программирования не имеют чисел, встроенных в литералы, поэтому их нужно вычислять во время выполнения; и во многих из этих случаев представление чисел может быть довольно интересным. У нас уже была проблема с представлением чисел для Underload. Эта задача заключается в представлении чисел в модульном SNUSP . (Обратите внимание, что вам не нужно изучать SNUSP, чтобы выполнить эту задачу - вся необходимая информация находится в спецификации - но вы можете найти интересный фон).
Задание
Для этой задачи модульный номер SNUSP представляет собой строку, образованную из символов @, +и =, за исключением того, что последний символ представляет собой #, и что предпоследний символ должен быть +или =(он не может быть@ ). Например, действительные числа включают @+#, ==#и @@+@=#; примеры недопустимых чисел включают в себя +=, @@#и +?+#.
Значение модульного номера SNUSP вычисляется рекурсивно следующим образом:
#имеет значение 0 (это базовый случай).- Если номер имеет форму
=x, для любой строкиxего значение равно значениюx. - Если номер имеет форму
+x, для любой строкиxего значение равно значениюxплюс 1. - Если число имеет форму
@cx, для любого отдельного символаcи любой строкиx, его значение равно значениюxплюс значениеcx.
Для этой задачи вы должны написать программу, которая принимает неотрицательное целое число в качестве входных данных и выводит строку, которая является наименьшим возможным модульным номером SNUSP, который имеет значение, равное входному значению.
Разъяснения
- Вполне возможно, что будет несколько строк с одним и тем же значением, и, в частности, для некоторых целых чисел будет найден самый короткий модульный номер SNUSP с этим значением. В таком случае вы можете вывести любое число, участвующее в игре.
- Нет никаких ограничений на алгоритм, который вы используете, чтобы найти число; например, перебор строк и их оценка - это легальная тактика, но мы делаем что-то более умное, чтобы уменьшить пространство поиска.
- Как обычно на PPCG, ваша заявка может быть либо полной программой, либо функцией (выберите более лаконичный язык).
- Это не проблема обработки входных и выходных форматов, поэтому вы можете использовать любые разумные средства для ввода неотрицательного целого числа и вывода строки. Существует полное руководство по мета , но наиболее часто используемые легальные методы включают аргументы / возвраты функций, аргументы командной строки и стандартный ввод / стандартный вывод.
Контрольные примеры
Вот кратчайшие представления первых нескольких чисел:
- 0 :
# - 1 :
+# - 2 :
++# - 3 :
+++#или@++# - 4 :
++++#или+@++#или@=++# - 5 :
@+++#или@@++# - 6 :
+@+++#или+@@++#или@=+++#или@=@++#или@@=++# - 7 :
@++++#или@+@++# - 8 :
@@+++#или@@@++# - 9 :
+@@+++#или+@@@++#или@+++++#или@++@++#или@+@=++#или@@=+++#или@@=@++# - 10 :
@=@+++#или@=@@++#или@@@=++#( это довольно важный тест для проверки , так как все возможные ответы включают=) - 11 :
@+@+++#или@+@@++#или@@++++#или@@+@++# - 12 :
+@+@+++#или+@+@@++#или+@@++++#или+@@+@++#или@=+@+++#или@=+@@++#или@=@=+++#или@=@=@++#или@=@@=++#или@@=++++#или@@=+@++#или или@@=@=++# - 13 :
@@@+++#или@@@@++# - 14 :
+@@@+++#или+@@@@++#или@=@++++#или@=@+@++#или@@+++++#или@@++@++#или@@+@=++# - 15 :
@+@++++#или@+@+@++#или@@=@+++#или@@=@@++#или@@@=+++#или@@@=@++#
В качестве тестового примера большего, выходной сигнал от входа 40 должно быть @@@=@@+++#, @@@=@@@++#, @@@@=@+++#или @@@@=@@++#.
Состояние победы
Что касается соревнования по коду-гольфу , то победителем считается самая короткая запись, измеряемая в байтах.
=оптимально будет происходить только так@=, верно?