Le module pickle de Python est utilisé pour la sérialisation, ce qui permet de vider un objet d'une manière telle qu'il puisse être reconstruit plus tard. Pour cela, pickle utilise un langage simple basé sur la pile.
Pour simplifier les choses, nous traiterons d'un petit sous-ensemble de ce langage:
( 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
Votre tâche consiste à implémenter ce sous-ensemble de la langue. Notez qu'il \n
s'agit ici d'une nouvelle ligne littérale, et les nouvelles lignes sont en fait importantes pour la langue.
Pour ceux qui sont familiers avec les langages GolfScript ou CJam (
et qui l/t
fonctionnent de manière similaire [
et ]
respective.
Contribution
Pour simplifier les choses, l'entrée sera toujours valide. En particulier, vous pouvez supposer ce qui suit à propos de l'entrée:
- Les chaînes ne seront composées que de lettres minuscules et d'espaces
[a-z ]
et utiliseront toujours des guillemets simples. - Il n'y aura pas de caractères étrangers, toutes les instructions étant celles spécifiées ci-dessus. Par exemple, cela signifie que les sauts de ligne ne se produiront qu'après les chaînes.
- Chacun
l/t
a une correspondance(
avant et chaque(
a une correspondancel/t
après. Il y en aura également au moins un(
. - Il y en aura exactement un
.
et ce sera toujours le dernier caractère.
Vous pouvez saisir des informations via la ligne de commande, STDIN ou l'argument de fonction. Vous pouvez utiliser une seule chaîne d'échappement de nouvelle ligne au lieu d'une chaîne multiligne si vous le souhaitez, mais veuillez le préciser dans votre réponse.
Production
La sortie doit être une représentation de l'objet final, imprimée sur STDOUT ou retournée sous forme de chaîne . Plus précisément:
Les chaînes sont représentées par l'ouverture et la fermeture de guillemets simples avec du contenu entre les deux, par exemple
S'abc' -> 'abc'
. Vous ne pouvez pas utiliser de guillemets doubles pour ce défi, même s'ils sont autorisés en Python.Les listes sont représentées par des éléments séparés par des virgules entourés par
[]
( par exemple['a','b','c']
), tandis que les tuples sont représentés par des éléments séparés par des virgules entourés par()
( par exemple('a','b','c')
).- Les espaces n'ont pas d'importance, par exemple,
('a', 'b', 'c' )
ça va. - Vous ne pouvez pas avoir de virgule avant le crochet de fermeture. Notez que ceci est intentionnellement différent des règles de syntaxe Python pour rendre les choses plus faciles pour la plupart des langues, et aussi pour rendre plus difficile la construction simple de la liste / du tuple en Python, puis sa sortie, en raison de la façon dont le tuple à élément unique est représenté (pour cela défi, nous avons besoin
('a')
par opposition à('a',)
).
Exemples
Le texte ci-dessus peut sembler intimidant, mais les exemples suivants devraient rendre les choses un peu plus claires.
(l.
Sortie possible: []
(t.
Sortie possible: ()
(S'hello world'
l.
Sortie possible: ['hello world']
(S'string one'
S'string two'
S'string three'
t.
Sortie possible: ('string one', 'string two', 'string three')
(S'a'
(S'b'
S'c'
lt.
Sortie possible: ('a',['b','c'])
((S'a'
S'b'
(lS'c'
t(S'd'
tl.
Sortie possible: [('a', 'b', [], 'c'), ('d')]
((S'a'
((S'b'
t(S'c'
lS'd'
(((ltlS'e'
S'f'
lS'g'
tl.
Sortie possible: [('a',[('b'),['c'],'d',[([])],'e','f'],'g')]
Règles
- C'est du code-golf , donc le code dans le moins d'octets gagne.
- Toute fonctionnalité conçue pour fonctionner avec des cornichons Python n'est pas autorisée.
Note de sécurité: en vrai code, ne décochez que les sources de confiance, sinon vous pourriez avoir une mauvaise cos\nsystem\n(S'rm -rf'\ntR.
surprise
S'abc'\n
pousserabc
ou'abc'
?