Das Pickle-Modul von Python wird für die Serialisierung verwendet, sodass ein Objekt so abgelegt werden kann, dass es später rekonstruiert werden kann. Pickle verwendet dazu eine einfache Stack-basierte Sprache.
Um die Dinge einfach zu halten, werden wir uns mit einer kleinen Teilmenge dieser Sprache befassen:
( 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
Ihre Aufgabe ist es, diese Teilmenge der Sprache zu implementieren. Beachten Sie, dass \n
es sich hier um einen wörtlichen Zeilenumbruch handelt und Zeilenumbrüche für die Sprache tatsächlich wichtig sind.
Für diejenigen, die mit GolfScript oder CJam-ähnlichen Sprachen, (
und l/t
funktioniert ähnlich wie [
und ]
jeweils.
Eingang
Zur Vereinfachung ist die Eingabe immer gültig. Insbesondere können Sie Folgendes für die Eingabe annehmen:
- Zeichenfolgen bestehen nur aus Kleinbuchstaben und Leerzeichen
[a-z ]
und verwenden immer einfache Anführungszeichen. - Es werden keine fremden Zeichen angezeigt. Alle Anweisungen sind wie oben angegeben. Dies bedeutet zum Beispiel, dass Zeilenumbrüche immer erst nach Zeichenfolgen auftreten.
- Jeder
l/t
hat ein Matching(
davor und jeder(
hat ein Matchingl/t
danach. Es wird auch mindestens einen geben(
. - Es wird genau einen geben
.
, und es wird immer den endgültigen Charakter geben.
Sie können Eingaben über die Befehlszeile, STDIN oder das Funktionsargument vornehmen. Wenn Sie möchten, können Sie anstelle einer mehrzeiligen Zeichenfolge eine einzelne Zeichenfolge mit Zeilenumbruch verwenden. Geben Sie dies jedoch in Ihrer Antwort an.
Ausgabe
Die Ausgabe sollte eine Darstellung des endgültigen Objekts sein, auf STDOUT gedruckt oder als Zeichenfolge zurückgegeben werden . Speziell:
Zeichenfolgen werden durch Öffnen und Schließen von einfachen Anführungszeichen mit Inhalten dazwischen dargestellt, z
S'abc' -> 'abc'
. Sie dürfen für diese Herausforderung keine doppelten Anführungszeichen verwenden, auch wenn sie in Python zulässig sind.Listen werden durch durch Kommas getrennte Elemente dargestellt, die von
[]
(z. B.['a','b','c']
) umgeben sind, während Tupel durch durch Kommas getrennte Elemente dargestellt werden, die von()
(z('a','b','c')
. B. ) umgeben sind.- Leerzeichen spielen keine Rolle, zB
('a', 'b', 'c' )
ist okay. - Vor der schließenden Klammer darf kein Komma stehen. Beachten Sie, dass dies absichtlich von den Python-Syntaxregeln abweicht, um die Arbeit für die meisten Sprachen zu vereinfachen und es auch schwieriger zu machen, die Liste / das Tupel in Python zu erstellen und dann auszugeben, da das Tupel aus einem Element besteht (aus diesem Grund) Herausforderung brauchen wir
('a')
im Gegensatz zu('a',)
).
Beispiele
Der obige Text mag einschüchternd erscheinen, aber die folgenden Beispiele sollen die Dinge etwas klarer machen.
(l.
Mögliche Ausgabe: []
(t.
Mögliche Ausgabe: ()
(S'hello world'
l.
Mögliche Ausgabe: ['hello world']
(S'string one'
S'string two'
S'string three'
t.
Mögliche Ausgabe: ('string one', 'string two', 'string three')
(S'a'
(S'b'
S'c'
lt.
Mögliche Ausgabe: ('a',['b','c'])
((S'a'
S'b'
(lS'c'
t(S'd'
tl.
Mögliche Ausgabe: [('a', 'b', [], 'c'), ('d')]
((S'a'
((S'b'
t(S'c'
lS'd'
(((ltlS'e'
S'f'
lS'g'
tl.
Mögliche Ausgabe: [('a',[('b'),['c'],'d',[([])],'e','f'],'g')]
Regeln
- Das ist Code-Golf , also gewinnt der Code mit den wenigsten Bytes.
- Alle Funktionen, die für die Verwendung mit Python-Gurken entwickelt wurden, sind nicht zulässig.
Sicherheitshinweis: In echtem Code sollten Sie nur die Auswahl von Quellen entfernen, denen Sie vertrauen. Andernfalls erhalten Sie möglicherweise eine böse cos\nsystem\n(S'rm -rf'\ntR.
Überraschung
S'abc'\n
schiebenabc
oder'abc'
?