首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表解析为悲伤列表。

将列表解析为悲伤列表。
EN

Code Golf用户
提问于 2017-06-26 00:24:06
回答 8查看 1.5K关注 0票数 11

在此挑战中,必须将列表列表解析为更简单的列表格式。

此挑战基于我的sadflak解析器。在我的sadflak解析器中,它删除了所有(),替换为列表开头的()s之和,以使程序运行得更快。

要将其解析为悲伤列表,您必须这样做(python实现,使用元组的一个元组):

代码语言:javascript
复制
def sadlistfunc(list):
    new-sadlist = [0]
    for i in list:
        if i == ():
            new-sadlist[0]+=1
        else:
            new-sadlist.append(sadlistfunc(i))

这是一个递归函数。对于一个列表,启动一个新的列表,从列表输入中的()开始,然后这个列表的其余部分依次是每个列表中没有()的悲伤列表版本。把名单还给我。

输入:

您可以采用几种不同的格式进行输入:

  • 你可以把它当作一张清单
  • 你可以把它当作一个元组
  • 你可以把它当作一根线

如果你把它当作字符串,你应该使用一些括号,就像在脑子里显示的一样。您不能使用字符1和字符2。

只要讲理

输入总是在一个列表中,但是您的程序可能在输入之外假定一个隐式列表层,即()=(())(),或者它可能选择不这样做。示例将包含显式外部列表。

输出:

可能是列表、元组或字符串,或者其他什么。您可以使用任何合理的输出格式,这是元共识。

示例:

代码语言:javascript
复制
(()()()) = [3]
(((()))) = [0,[0,[1]]]
((())()(())) = [1, [1], [1]]
() = invalid input, if the outside bracket is explicit.
((((())())())(())()) = [1, [1, [1, [1]]], [1]]

注意,输入并不严格。这些投入可以是:

代码语言:javascript
复制
[[],[],[]]
[[[[]]]]
[[[]],[],[[]]]
[]
[[[[[]],[]],[]],[[]],[]]

或者其他合理的格式

解释了测试用例:

代码语言:javascript
复制
(()()((())())())

要"sadify“这个,我们首先要计算()的数量。

代码语言:javascript
复制
 ()()        ()
(    ((())())  )
  1. 然后我们删除这些,并在开始时添加一个3
代码语言:javascript
复制
(3,((())()))

这个列表中有一个列表。我们把这个

代码语言:javascript
复制
((())())

有多少人?

代码语言:javascript
复制
     ()
((())  )
  1. 我们删除并在开头添加一个1
代码语言:javascript
复制
(1,(()))

这里面有一个列表

代码语言:javascript
复制
(())

计数

代码语言:javascript
复制
 ()
(  )

移除并添加计数

代码语言:javascript
复制
(1)

然后我们把这个放回它的列表

代码语言:javascript
复制
(1,(1))

然后我们把这个放回它的列表

代码语言:javascript
复制
(3,(1,(1)))

完成

这是密码-高尔夫,所以更短更好

EN

回答 8

Code Golf用户

发布于 2017-06-26 00:35:43

皮斯,13字节

代码语言:javascript
复制
L+]/bYyM-b]Yy

测试套件

是如何工作的

代码语言:javascript
复制
L+]/bYyM-b]Yy
L               define a function y with argument b:
   /bY              list 1: count how many [] can be found in b
  ]                         wrap into singleton
        -b]Y        list 2: filter out [] from b
      yM                    apply y (this function) to each
 +                  concatenate the two lists above
            y   apply y to the input
票数 4
EN

Code Golf用户

发布于 2017-06-26 08:22:36

CommonLisp,49字节

代码语言:javascript
复制
(defun s(l)(cons(count()l)(mapcar's(remove()l))))

将输入作为列表列表。

在网上试试!

票数 3
EN

Code Golf用户

发布于 2017-06-26 00:56:42

布氏对数,21字节

代码语言:javascript
复制
;[[]]x{↰₀}ᵐA&{∋∅}ᶜg,A

在网上试试!

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/128325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档