Pythonのpickleモジュールはシリアル化に使用され、後で再構築できるようにオブジェクトをダンプできます。このため、pickleは単純なスタックベースの言語を使用します。
物事を単純にするために、この言語の小さなサブセットを扱います。
( 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
あなたの仕事は、言語のこのサブセットを実装することです。これ\n
は文字通り改行であり、改行は実際に言語にとって重要であることに注意してください。
GolfScriptまたはCJam状の言語に精通した者のために、(
そしてl/t
同様に動作[
し、]
それぞれ。
入力
物事を単純にするために、入力は常に有効です。特に、入力について次のことを想定できます。
- 文字列は小文字とスペースのみで構成され、
[a-z ]
常に一重引用符を使用します。 - 余分な文字はなく、すべての指示は上記のとおりです。たとえば、これは、文字列の後にのみ改行が発生することを意味します。
- すべての前に
l/t
一致があり、すべての後に一致があります。また、少なくとも1つあります。(
(
l/t
(
- が1つだけあり
.
、常に最後の文字になります。
コマンドライン、STDIN、または関数引数を介して入力を取得できます。必要に応じて、複数行の文字列ではなく単一の改行エスケープ文字列を使用できますが、回答でこれを指定してください。
出力
出力は、最終オブジェクトの表現であり、STDOUTに出力されるか、stringとして返されます。具体的には:
文字列は、コンテンツを挟む一重引用符の開閉によって表され
S'abc' -> 'abc'
ます。Pythonで許可されていても、このチャレンジに二重引用符を使用することはできません。リストは、で囲まれたカンマ区切りの要素によって表されている
[]
(例えば、['a','b','c']
タプルはコンマで区切られた要素によってrepsentedている間に囲まれた、)()
(例えば、('a','b','c')
)。- スペースは関係ありません
('a', 'b', 'c' )
。たとえば、大丈夫です。 - 右大括弧の前にコンマを置くことはできません。これは、ほとんどの言語で物事を簡単にするためにPython構文規則と意図的に異なることに注意してください。また、単一要素のタプルがどのように表されるかにより、Python挑戦、我々は必要
('a')
とは反対に('a',)
)。
例
上記のテキストは手ごわいように思えるかもしれませんが、次の例で少しわかりやすくします。
(l.
可能な出力: []
(t.
可能な出力: ()
(S'hello world'
l.
可能な出力: ['hello world']
(S'string one'
S'string two'
S'string three'
t.
可能な出力: ('string one', 'string two', 'string three')
(S'a'
(S'b'
S'c'
lt.
可能な出力: ('a',['b','c'])
((S'a'
S'b'
(lS'c'
t(S'd'
tl.
可能な出力: [('a', 'b', [], 'c'), ('d')]
((S'a'
((S'b'
t(S'c'
lS'd'
(((ltlS'e'
S'f'
lS'g'
tl.
可能な出力: [('a',[('b'),['c'],'d',[([])],'e','f'],'g')]
ルール
- これはcode-golfであるため、最小バイトのコードが優先されます。
- Pythonのピクルスで動作するように設計された機能は許可されていません。
セキュリティに関する注意:実際のコードでは、信頼できるソースからのみピクルスを外します。さもないと、cos\nsystem\n(S'rm -rf'\ntR.
意外なサプライズが発生する可能性があります
S'abc'\n
プッシュしますabc
か'abc'
?