在此挑战中,您的任务是根据一系列指令构造一个无向图。每个非负整数都有一个指令,并且每个指令都会将给定的图转换为新的图。
- 指令
0
:添加一个新的断开连接的节点。 - 指令
1
:添加一个新节点,并将其连接到每个现有节点。 - 伪指令
m > 1
:删除度(邻居数)可被整除的所有节点m
。请注意,0
所有m
节点都可以将其整除,因此始终会删除断开连接的节点。
从空图开始,指令从左到右一一应用。例如,[0,1,0,1,0,1,3]
使用令人敬畏的ASCII技术对序列进行如下处理。我们从空图开始,并按照的指示添加一个顶点0
:
a
然后,按照的指示添加另一个顶点并将其连接到第一个顶点1
:
a--b
我们按照0
和的指示添加另一个断开连接的顶点,然后添加一个连接的顶点1
:
a--b c
\ \ /
`--d
我们重复这一次,作为导演0
和1
:
,--f--e
/ /|\
a--b | c
\ \|/
`--d
最后,按照以下指示删除3级顶点a
和:b
3
f--e
|\
| c
|/
d
这是由序列定义的图[0,1,0,1,0,1,3]
。
输入值
非负整数列表,代表指令序列。
输出量
序列定义的图中的节点数。
测试用例
[] -> 0
[5] -> 0
[0,0,0,11] -> 0
[0,1,0,1,0,1,3] -> 4
[0,0,0,1,1,1] -> 6
[0,0,1,1,0,0,1,1,2,5,7,0,1] -> 6
[0,0,1,1,1,1,5,1,4,3,1,0,0,0,1,2] -> 6
[0,0,1,1,0,0,1,1,5,2,3,0,0,1,1,0,0,1,1,3,4,0,0,1,1,2,1,1] -> 8
[0,0,1,1,0,0,1,1,2,5,7,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,8] -> 14
详细规则
您可以编写函数或完整程序。最短的字节数获胜。不允许出现标准漏洞。请在回答中说明您的算法。
已经过了一周,所以我接受了最短的答案。如果以后出现的更短,我将更新选择。值得一提的是Peter Taylor的答案,包括获奖者在内的其他人也基于此。