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