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
都有一个匹配项(
,每个人之后(
都有一个匹配项l/t
。也将至少有一个(
。 - 将恰好有一个
.
,并且它将始终是最后一个字符。
您可以通过命令行,STDIN或函数参数进行输入。如果愿意,可以使用单个换行符转义的字符串,而不是多行字符串,但是请在答案中进行指定。
输出量
输出应该是最终对象的表示,打印到STDOUT或作为字符串返回。特别:
字符串是通过用单引号引起来的,例如,
S'abc' -> 'abc'
。即使在Python中允许使用双引号,也不能对此挑战使用双引号。列表由
[]
(例如['a','b','c']
)包围的逗号分隔元素表示,而元组由()
(例如('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'
?