问题
让我们定义一个广义的Cantor集,方法是从单个连续间隔开始,从所有尚未删除的间隔的中间迭代删除一些有理长度段。
给定要删除或不删除的段的相对长度,以及要执行的迭代次数,问题在于编写程序或函数,该程序或函数输出n
迭代后已删除或未删除的段的相对长度。
示例:迭代删除第四个和第六个第八个
输入:
n
–迭代次数,从0或1开始索引
l
–分段长度的列表,以正整数gcd(l)=1
表示,带有奇数个长度和奇数个长度,表示从保持不变的分段开始的,保持不变或被删除的部分的相对长度。由于列表长度是奇数,因此永远不会删除第一个和最后一个段。例如,对于常规的Cantor集合,这将是[1,1,1],其中三分之一将保留,三分之一将被删除,三分之一将被删除。
输出:
整数列表o
,第一次迭代gcd(o)=1
中相对片段的长度,n
当上一迭代中没有删除的片段被列表的缩小副本所取代l
。第一次迭代是[1]
。您可以使用任何明确的输出方法,甚至是一元的。
例子
n=0, l=[3,1,1,1,2] → [1]
n=1, l=[3,1,1,1,2] → [3, 1, 1, 1, 2]
n=2, l=[3,1,1,1,2] → [9,3,3,3,6,8,3,1,1,1,2,8,6,2,2,2,4]
n=3, l=[5,2,3] → [125,50,75,100,75,30,45,200,75,30,45,60,45,18,27]
n=3, l=[1,1,1] → [1,1,1,3,1,1,1,9,1,1,1,3,1,1,1]
您可以假定输入有效。这是代码高尔夫球,因此以字节为单位的最短程序将获胜。
[0, 1, 2, 4, 6, 7]
代替[3, 1, 1, 1, 2]
?