Modulo pickle di Python viene utilizzato per la serializzazione, consentendo di scaricare un oggetto in modo tale da poterlo successivamente ricostruire. Per questo, pickle usa un semplice linguaggio basato su stack.
Per semplificare le cose, ci occuperemo di un piccolo sottoinsieme di questa lingua:
( 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
Il tuo compito è implementare questo sottoinsieme della lingua. Nota che\n
è una newline letterale e le newline sono in realtà importanti per la lingua.
Per coloro che hanno familiarità con i linguaggi simili a GolfScript o CJam (
e l/t
operano in modo simile a [
e ]
rispettivamente.
Ingresso
Per semplificare le cose, l'input sarà sempre valido. In particolare, è possibile assumere quanto segue sull'input:
- Le stringhe saranno composte solo da lettere minuscole e spazi
[a-z ]
e utilizzeranno sempre virgolette singole. - Non ci saranno caratteri estranei, con tutte le istruzioni come sopra specificato. Ad esempio, ciò significa che i newline si verificheranno solo dopo le stringhe.
- Ognuno
l/t
ha una corrispondenza(
prima di esso e ognuno(
ha una corrispondenzal/t
dopo di esso. Ce ne sarà anche almeno uno(
. - Ce ne sarà esattamente uno
.
e sarà sempre il personaggio finale.
È possibile accettare input tramite riga di comando, STDIN o argomento della funzione. Se lo desideri, puoi utilizzare una singola stringa con escape di nuova riga anziché una stringa su più righe, ma specifica questa nella tua risposta.
Produzione
L'output deve essere una rappresentazione dell'oggetto finale, stampato su STDOUT o restituito come stringa . In particolare:
Le stringhe sono rappresentate aprendo e chiudendo virgolette singole con contenuto in mezzo, ad es
S'abc' -> 'abc'
. Non puoi usare virgolette doppie per questa sfida, anche se sono consentite in Python.Gli elenchi sono rappresentati da elementi separati da virgole racchiusi da
[]
(ad esempio['a','b','c']
), mentre le tuple sono rappresentate da elementi separati da virgole racchiusi da()
(ad es.('a','b','c')
).- Gli spazi non contano, ad es
('a', 'b', 'c' )
. Va bene. - Non è possibile avere una virgola prima della parentesi quadra di chiusura. Nota che questo è intenzionalmente diverso dalle regole di sintassi di Python per rendere le cose più facili per la maggior parte delle lingue, e anche per rendere più difficile semplicemente creare l'elenco / tupla in Python e poi emetterlo, a causa di come viene rappresentata la tupla a elemento singolo (per questo sfida, abbiamo bisogno
('a')
invece di('a',)
).
Esempi
Il testo sopra potrebbe sembrare scoraggiante, ma i seguenti esempi dovrebbero rendere le cose un po 'più chiare.
(l.
Uscita possibile: []
(t.
Uscita possibile: ()
(S'hello world'
l.
Uscita possibile: ['hello world']
(S'string one'
S'string two'
S'string three'
t.
Uscita possibile: ('string one', 'string two', 'string three')
(S'a'
(S'b'
S'c'
lt.
Uscita possibile: ('a',['b','c'])
((S'a'
S'b'
(lS'c'
t(S'd'
tl.
Uscita possibile: [('a', 'b', [], 'c'), ('d')]
((S'a'
((S'b'
t(S'c'
lS'd'
(((ltlS'e'
S'f'
lS'g'
tl.
Uscita possibile: [('a',[('b'),['c'],'d',[([])],'e','f'],'g')]
Regole
- Questo è code-golf , quindi vince il codice nel minor numero di byte.
- Non è consentita alcuna funzionalità progettata per funzionare con i sottaceti Python.
Nota di sicurezza: nel codice reale, solo deselezionare da fonti di cui ti fidi, altrimenti potresti ricevere una brutta cos\nsystem\n(S'rm -rf'\ntR.
sorpresa
S'abc'\n
spingereabc
o'abc'
?