O módulo pickle do Python é usado para serialização, permitindo despejar um objeto de uma maneira que possa ser reconstruído posteriormente. Para isso, pickle usa uma linguagem simples baseada em pilha.
Para simplificar, trataremos de um pequeno subconjunto desse idioma:
( 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
Sua tarefa é implementar esse subconjunto do idioma. Observe que aqui \n
é uma nova linha literal, e as novas linhas são realmente importantes para o idioma.
Para aqueles familiarizados com as linguagens do GolfScript ou do tipo CJam, (
e l/t
opere da mesma forma [
e ]
respectivamente.
Entrada
Para manter as coisas simples, a entrada sempre será válida. Em particular, você pode assumir o seguinte sobre a entrada:
- As strings consistem apenas em letras minúsculas e espaços
[a-z ]
e sempre usam aspas simples. - Não haverá caracteres estranhos, com todas as instruções especificadas acima. Por exemplo, isso significa que as novas linhas só ocorrerão após as seqüências de caracteres.
- Cada
l/t
um tem uma correspondência(
antes e cada(
um tem uma correspondêncial/t
depois. Também haverá pelo menos um(
. - Haverá exatamente um
.
, e sempre será o personagem final.
Você pode receber informações via linha de comando, STDIN ou argumento de função. Você pode usar uma única cadeia de caracteres com escape de nova linha em vez de uma cadeia de linhas múltiplas, se desejar, mas especifique isso na sua resposta.
Resultado
A saída deve ser uma representação do objeto final, impressa em STDOUT ou retornada como uma string . Especificamente:
As strings são representadas pela abertura e fechamento de aspas simples com conteúdo no meio, por exemplo
S'abc' -> 'abc'
. Você não pode usar aspas duplas para esse desafio, mesmo que elas sejam permitidas no Python.As listas são representadas por elementos separados por vírgula e cercados por
[]
( por exemplo['a','b','c']
), enquanto as tuplas são representadas por elementos separados por vírgula e cercados por()
( por exemplo('a','b','c')
).- Os espaços não importam, por exemplo,
('a', 'b', 'c' )
está tudo bem. - Você não pode ter uma vírgula antes do colchete de fechamento. Observe que isso é intencionalmente diferente das regras de sintaxe do Python para facilitar as coisas para a maioria das linguagens e também para tornar mais difícil simplesmente construir a lista / tupla no Python e depois produzi-la, devido à forma como a tupla de elemento único é representada (para isso desafio, precisamos
('a')
em oposição a('a',)
).
Exemplos
O texto acima pode parecer assustador, mas os exemplos a seguir devem tornar as coisas um pouco mais claras.
(l.
Saída possível: []
(t.
Saída possível: ()
(S'hello world'
l.
Saída possível: ['hello world']
(S'string one'
S'string two'
S'string three'
t.
Saída possível: ('string one', 'string two', 'string three')
(S'a'
(S'b'
S'c'
lt.
Saída possível: ('a',['b','c'])
((S'a'
S'b'
(lS'c'
t(S'd'
tl.
Saída possível: [('a', 'b', [], 'c'), ('d')]
((S'a'
((S'b'
t(S'c'
lS'd'
(((ltlS'e'
S'f'
lS'g'
tl.
Saída possível: [('a',[('b'),['c'],'d',[([])],'e','f'],'g')]
Regras
- Isso é código-golfe , então o código com o menor número de bytes vence.
- Não é permitida nenhuma funcionalidade projetada para funcionar com picles de Python.
Nota de segurança: no código real, apenas retire as fontes de sua confiança, ou você poderá receber uma cos\nsystem\n(S'rm -rf'\ntR.
surpresa desagradável
S'abc'\n
empurrarabc
ou'abc'
?