总览
你们中有些人可能知道Kolakoski序列(A000002),这是一个众所周知的具有以下属性的自指代序列:
它是一个仅包含1和2的序列,对于每组1和2,如果将游程的长度相加,则它等于自身,仅为长度的一半。换句话说,Kolakoski序列描述了序列本身的游程长度。这是唯一执行此操作的序列,只是删除了开头的1的序列相同。(仅当您将自己限制为由1和2组成的序列时才如此-Martin Ender)
挑战
面临的挑战是,给定一个整数列表:
- 输出
-1
如果列表不是Kolakoski序列的工作前缀。 - 在序列变为之前输出迭代次数
[2]
。
解决的例子
以提供的图像为例:
[1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1] # Iteration 0 (the input).
[1,2,2,1,1,2,1,2,2,1,2] # Iteration 1.
[1,2,2,1,1,2,1,1] # Iteration 2.
[1,2,2,1,2] # Iteration 3.
[1,2,1,1] # Iteration 4.
[1,1,2] # Iteration 5.
[2,1] # Iteration 6.
[1,1] # Iteration 7.
[2] # Iteration 8.
因此,所得数字8
用于的输入[1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1]
。
9
如果您要1索引,也可以。
测试套件(您也可以使用子迭代进行测试)
------------------------------------------+---------
Truthy Scenarios | Output
------------------------------------------+---------
[1,1] | 1 or 2
[1,2,2,1,1,2,1,2,2,1] | 6 or 7
[1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1] | 8 or 9
[1,2] | 2 or 3
------------------------------------------+---------
Falsy Scenarios | Output
------------------------------------------+---------
[4,2,-2,1,0,3928,102904] | -1 or a unique falsy output.
[1,1,1] | -1
[2,2,1,1,2,1,2] (Results in [2,3] @ i3) | -1 (Trickiest example)
[] | -1
[1] | -1
如果您感到困惑:
真理:最终将达到两个,而没有任何中间步骤,除了1
和之外,没有其他元素2
。–Einkorn Enchanter 20 hours ago
虚假:最终值不是[2]
。中间术语包含集合以外的东西[1,2]
。还有两件事,请参见示例。
这是代码高尔夫球,最低的字节数将是胜利者。
[2]
直到我看到[2,2,1,1,2,1,2]
测试用例后,列表才最终到达。
1
和以外,没有任何其他元素2
。
[1]
为测试用例可能是一个好主意。
-1
吗?