StickStack es un lenguaje de programación basado en pila muy simple con solo dos instrucciones:
|
empuja la longitud de la pila sobre la pila-
saca los dos elementos superiores de la pila y hace retroceder su diferencia (second topmost - topmost
)
Detalles del idioma
- La pila está vacía al inicio del programa.
- Todas las instrucciones se ejecutan secuencialmente de izquierda a derecha.
- Si hay menos de 2 números en la pila, la
-
instrucción es ilegal. - Al final de la ejecución, la pila debe contener exactamente un número .
Cualquier número entero puede ser generado por un programa StickStack. Por ejemplo:
|||--||-- generates the number 2 through the following stack states:
[]
[0]
[0, 1]
[0, 1, 2]
[0, -1]
[1]
[1, 1]
[1, 1, 2]
[1, -1]
[2]
Para evaluar su código StickStack puede usar este evaluador en línea (CJam) . (Gracias por @Martin por el código).
La tarea
Debe escribir un programa o función que proporcione un número entero como salidas de entrada o devuelva una cadena que representa un programa StickStack que genera el número dado.
Tanteo
- Su puntaje principal es la duración total de los programas StickStack para los siguientes casos de prueba. Puntaje más bajo es mejor.
- Su envío es válido solo si ejecutó su programa en todos los casos de prueba y contó su puntaje.
- Su puntaje secundario (desempate) es la duración de su función o programa generador.
Casos de prueba de entrada
(Cada número es un caso de prueba diferente).
-8607 -6615 -6439 -4596 -4195 -1285 -72 12 254 1331 3366 3956 5075 5518 5971 7184 7639 8630 9201 9730
Su programa debería funcionar para cualquier número entero (que su tipo de datos pueda manejar) no solo para los casos de prueba dados. Las soluciones para los números de prueba no deben codificarse en su programa. Si habrá dudas sobre la codificación, se cambiarán los números de prueba.