Фон
Багато езотеричних мов програмування не мають вбудованих чисел в буквальних знаках, тому вам доведеться їх обчислювати під час виконання; і в багатьох із цих випадків представлення чисел може бути досить цікавим. У нас уже виникло завдання щодо представлення номерів для Underload. Ця проблема полягає у представленні чисел у модульному SNUSP . (Зверніть увагу, що вам не потрібно вивчати SNUSP для того, щоб виконати це завдання. Вся необхідна інформація знаходиться у специфікації - але фон може бути цікавим.)
Завдання
Для цього завдання виклик, модульний номер SNUSP - це рядок, сформований з символів @, +і =, за винятком того, що останній символ є a #, і передостанній символ повинен бути +або =(він не може бути @). Наприклад, дійсні числа включають @+#, ==#і @@+@=#; приклади неприпустимих чисел включають в себе +=, @@#і +?+#.
Значення модульного числа 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 повинно бути @@@=@@+++#, @@@=@@@++#, @@@@=@+++#або @@@@=@@++#.
Стан перемоги
Як виклик з гольф-кодом , переможець - найкоротший запис, виміряний в байтах.
=оптимально буде відбуватися лише як@=, правда?