El módulo pickle de Python se utiliza para la serialización, lo que permite volcar un objeto de tal manera que luego pueda reconstruirse. Para esto, pickle usa un lenguaje simple basado en la pila.
Para simplificar las cosas, trataremos con un pequeño subconjunto de este lenguaje:
( Push a mark to the stack
S'abc'\n Push a string to the stack (here with contents 'abc')
l Pop everything up to the last mark, wrapping all but the mark in a list
t Pop everything up to the last mark, wrapping all but the mark in a tuple
. Terminate the virtual machine
Su tarea es implementar este subconjunto del lenguaje. Tenga en cuenta que aquí \n
hay una nueva línea literal, y las nuevas líneas son realmente importantes para el idioma.
Para aquellos familiarizados con los lenguajes similares a GolfScript o CJam, (
y l/t
funcionan de manera similar a [
y ]
respectivamente.
Entrada
Para mantener las cosas simples, la entrada siempre será válida. En particular, puede asumir lo siguiente sobre la entrada:
- Las cadenas solo consistirán en letras minúsculas y espacios
[a-z ]
, y siempre usarán comillas simples. - No habrá caracteres extraños, con todas las instrucciones como se especificó anteriormente. Por ejemplo, esto significa que las nuevas líneas solo ocurrirán después de las cadenas.
- Todos
l/t
tienen una coincidencia(
antes y todos(
tienen una coincidencial/t
después. También habrá al menos uno(
. - Habrá exactamente uno
.
, y siempre será el personaje final.
Puede tomar la entrada a través de la línea de comando, STDIN o argumento de función. Si lo desea, puede usar una sola cadena de escape de nueva línea en lugar de una cadena multilínea, pero especifique esto en su respuesta.
Salida
El resultado debe ser una representación del objeto final, impreso en STDOUT o devuelto como una cadena . Específicamente:
Las cadenas se representan abriendo y cerrando comillas simples con contenido intermedio, por ejemplo
S'abc' -> 'abc'
. No puede usar comillas dobles para este desafío, aunque estén permitidas en Python.Las listas están representadas por elementos separados por comas rodeados por
[]
( por ejemplo['a','b','c']
), mientras que las tuplas están representadas por elementos separados por comas rodeados por()
( por ejemplo('a','b','c')
).- Los espacios no importan, por ejemplo,
('a', 'b', 'c' )
está bien. - No puede tener una coma antes del corchete de cierre. Tenga en cuenta que esto es intencionalmente diferente de las reglas de sintaxis de Python para facilitar las cosas para la mayoría de los lenguajes, y también para dificultar simplemente construir la lista / tupla en Python y luego generarla, debido a cómo se representa la tupla de un solo elemento (para esto desafío, necesitamos
('a')
en lugar de('a',)
).
Ejemplos
El texto anterior puede parecer desalentador, pero los siguientes ejemplos deberían aclarar un poco las cosas.
(l.
Salida posible: []
(t.
Salida posible: ()
(S'hello world'
l.
Salida posible: ['hello world']
(S'string one'
S'string two'
S'string three'
t.
Salida posible: ('string one', 'string two', 'string three')
(S'a'
(S'b'
S'c'
lt.
Salida posible: ('a',['b','c'])
((S'a'
S'b'
(lS'c'
t(S'd'
tl.
Salida posible: [('a', 'b', [], 'c'), ('d')]
((S'a'
((S'b'
t(S'c'
lS'd'
(((ltlS'e'
S'f'
lS'g'
tl.
Salida posible: [('a',[('b'),['c'],'d',[([])],'e','f'],'g')]
Reglas
- Este es el código de golf , por lo que gana el código en la menor cantidad de bytes.
- No se permite ninguna funcionalidad diseñada para trabajar con pepinillos en Python.
Nota de seguridad: en el código real, solo desconéctelo de las fuentes en las que confía, de lo contrario, podría recibir una desagradable cos\nsystem\n(S'rm -rf'\ntR.
sorpresa
S'abc'\n
Empujaabc
o'abc'
?