在此挑战中,您必须将列表列表解析为更简单的列表格式。
这项挑战基于我的sadflak解析器。在我的sadflak解析器中,它删除了所有(),并在列表的开头替换为()的总和,以使程序运行更快。
要解析为悲伤列表,您必须执行以下操作(Python实现的事情,使用一个元组的元组):
def sadlistfunc(list):
new-sadlist = [0]
for i in list:
if i == ():
new-sadlist[0]+=1
else:
new-sadlist.append(sadlistfunc(i))
这是一个递归函数。对于列表,请从列表输入中的()数量开始创建一个新列表,然后该列表的其余部分依次是每个列表的悲伤列表版本,而不是列表输入中的()。返回列表。
输入:
您可以采用几种不同的格式输入:
- 您可以将其作为列表
- 你可以把它当成元组
- 你可以把它当作一个字符串
如果将其作为字符串使用,则应使用一些括号,如出现在脑筋急转弯中的括号。您不能使用字符1和2
只是合理
输入将始终在一个列表内,但是您的程序可能会在输入之外假设一个隐式列表层,即()()()=(()()()),或者可能选择不包含。示例将带有明确的外部列表
输出:
可以是列表,元组或字符串,或其他任何形式。您可以使用任何合理的输出格式,例如元共识。
例:
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]
请注意,输入内容并不严格。这些输入可以是:
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]
或其他一些合理的格式
解释的测试用例:
(()()((())())())
为了“满足”,首先我们计算()的数量
()() ()
( ((())()) )
3.然后我们将其删除,并在开头添加3
(3,((())()))
此列表中只有一个列表。我们对此感到遗憾
((())())
多少 ()?
()
((()) )
1.我们删除并在开头添加1
(1,(()))
这个里面有一个清单
(())
计数
()
( )
删除并添加计数
(1)
然后我们将其放回清单
(1,(1))
然后我们将其放回清单
(3,(1,(1)))
做完了
这是代码高尔夫,所以越短越好
((((())())())(())()) = [1, [1, [1, [1]], [1]]
应该是((((())())())(())()) = [1, [1, [1, [1]]], [1]]
。