Antecedentes
Muchos lenguajes de programación esotéricos no tienen números incorporados en literales, por lo que debe calcularlos en tiempo de ejecución; y en muchos de estos casos, la representación numérica puede ser bastante interesante. Ya hemos tenido el desafío de representar números para Underload. Este desafío se trata de representar números en SNUSP modular . (Tenga en cuenta que no necesita aprender SNUSP para completar este desafío, toda la información que necesita está en la especificación, pero puede encontrar interesantes los antecedentes).
La tarea
Para el propósito de este desafío, un número SNUSP modular es una cadena formada por los caracteres @, +y =, excepto que el último carácter es un #, y que el penúltimo carácter debe ser +o =(no puede ser @). Por ejemplo, números válidos incluyen @+#, ==#y @@+@=#; ejemplos de números no válidos incluyen +=, @@#, y +?+#.
El valor de un número SNUSP modular se calcula de forma recursiva de la siguiente manera:
#tiene un valor de 0 (este es el caso base).- Si el número tiene la forma
=x, para cualquier cadenax, su valor es igual al valor dex. - Si el número tiene la forma
+x, para cualquier cadenax, su valor es igual al valor dex, más 1. - Si el número tiene la forma
@cx, para cualquier carácter individualcy cualquier cadenax, su valor es igual al valor dex, más el valor decx.
Para este desafío, debe escribir un programa que tome un entero no negativo como entrada y genere una cadena que sea el número SNUSP modular más corto posible que tenga un valor igual a la entrada.
Aclaraciones
- Es completamente posible que haya más de una cadena con el mismo valor, y en particular, para algunos enteros habrá un empate para el número SNUSP modular más corto con ese valor. En tal caso, puede generar cualquiera de los números involucrados con el empate.
- No hay restricción en el algoritmo que usa para encontrar el número; por ejemplo, las cadenas de fuerza bruta y su evaluación es una táctica legal, pero también lo está haciendo algo más inteligente para reducir el espacio de búsqueda.
- Como es habitual en PPCG, su envío puede ser un programa completo o una función (elija el que sea más conciso en su idioma).
- Este no es un problema sobre el manejo de formatos de entrada y salida, por lo que puede usar cualquier medio razonable para ingresar un entero no negativo y generar una cadena. Hay una guía completa sobre meta , pero los métodos legales más comúnmente utilizados incluyen argumentos / retornos de función, argumentos de línea de comando y entrada / salida estándar.
Casos de prueba
Aquí están las representaciones más cortas de los primeros números:
- 0 :
# - 1 :
+# - 2 :
++# - 3 :
+++#o@++# - 4 :
++++#o+@++#o@=++# - 5 :
@+++#o@@++# - 6 :
+@+++#o+@@++#o@=+++#o@=@++#o@@=++# - 7 :
@++++#o@+@++# - 8 :
@@+++#o@@@++# - 9 :
+@@+++#o+@@@++#o@+++++#o@++@++#o@+@=++#o@@=+++#o@@=@++# - 10 :
@=@+++#o@=@@++#o@@@=++#( este es un caso de prueba bastante importante para verificar , ya que todas las respuestas posibles incluyen=) - 11 :
@+@+++#o@+@@++#o@@++++#o@@+@++# - 12 :
+@+@+++#o+@+@@++#o+@@++++#o+@@+@++#o@=+@+++#o@=+@@++#o@=@=+++#o@=@=@++#o@=@@=++#o@@=++++#o@@=+@++#o@@=@=++# - 13 :
@@@+++#o@@@@++# - 14 :
+@@@+++#o+@@@@++#o@=@++++#o@=@+@++#o@@+++++#o@@++@++#o@@+@=++# - 15 :
@+@++++#o@+@+@++#o@@=@+++#o@@=@@++#o@@@=+++#o@@@=@++#
Como caso de prueba más grande, la salida de la entrada 40 debe ser @@@=@@+++#, @@@=@@@++#, @@@@=@+++#, o @@@@=@@++#.
Condición de victoria
Como desafío de código de golf , el ganador es la entrada más corta, medida en bytes.
=óptimamente solo ocurrirá como@=, ¿verdad?