Texto de sabor
El esolang basado en pila baja carga tiene algunos vínculos interesantes a la programación funcional. Uno de ellos es su tratamiento del tipo de datos numéricos: como el cálculo lambda, usted representa el número natural N por una función que realiza una acción N veces.
Para simplificar las cosas, solo consideraremos el siguiente subconjunto de comandos de Subcarga:
:
- Este comando duplica el elemento superior en la pila.*
- Este comando concatena los dos primeros elementos de la pila en un solo elemento.
Definimos un número N de subcarga como una cadena de :
y *
que, cuando se ejecuta, consume el elemento superior de la pila y produce N copias de ese elemento concatenados juntos. Algunos ejemplos:
- No hay números de subcarga 0, -1, 1/2, π.
- La cadena vacía
es el número 1 de baja carga, porque deja la pila intacta.
:*
es el número 2 de Subcarga, porque duplica el elemento superior y luego concatena esas dos copias en un solo elemento:(A):*
=(A)(A)*
=(AA)
.::**
es el número de subcarga 3:(A)::**
=(A)(A):**
=(A)(AA)*
=(AAA)
.:::***
es el número de subcarga 4.:*:*
es también el número de subcarga 4:(A):*:*
=(AA):*
=(AA)(AA)*
=(AAAA)
.
En general, encontrará que, si M
y N
son los números de Subcarga M y N, entonces :N*
es el número N + 1, y MN
es el número M × N.
El reto
Su tarea es escribir el programa más corto (tomando entrada en STDIN) o la función (tomando entrada a través del argumento) que produce la representación más corta del número de Subcarga para su entrada como una cadena. Es decir, si la entrada es un número natural positivo N> 1, debe producir un número de subcarga N cuya longitud en caracteres es menor o igual que la de cualquier otro número de subcarga N.
Muestra de entradas y salidas: ("Entrada - OUTPUT
.")
- 1 -
.
- 2 -
:*
. - 5 -
::*:**
(2 × 2 + 1). - 7 -
::*::***
(2 × 3 + 1) o:::**:**
(3 × 2 + 1). - 33 -
::*:*:*:*:**
(2 × 2 × 2 × 2 × 2 + 1). - 49 -
::*:*:*:*::***
(16 × 3 + 1, longitud 14) pero no::*::***::*::***
(7 × 7, longitud 16).
Si la entrada no es un número natural positivo, puede devolver un error, producir un comportamiento indefinido o incluso no terminar. Se agradece una explicación del método de su presentación para encontrar la respuesta.
Se aplican restricciones de laguna estándar: sin entrada adicional, sin solicitudes web, el valor de salida / retorno debe ser exactamente la respuesta y no un flujo aleatorio infinito de :
y *
, etc.
x
es 2*A117498(x)
donde A117498 proporciona la combinación óptima de métodos binarios y factoriales para encontrar una cadena de suma.