ẆQSḢ
在线尝试!
将输入作为0
s和1
s的列表。
在线尝试使用数字!
说明:
ẆQSḢ Argument: B = list of bits, e.g. [1, 1, 0, 1]
Ẇ Get B's non-empty sublists (i.e. [[1], [1], [0], [1], [1, 1], [1, 0], [0, 1], [1, 1, 0], [1, 0, 1], [1, 1, 0, 1]])
Q Keep first occurrences (i.e. [[1], [0], [1, 1], [1, 0], [0, 1], [1, 1, 0], [1, 0, 1], [1, 1, 0, 1]])
S Reduce by vectorized addition (i.e. [6, 4, 1, 1])
Ḣ Pop first element (i.e. 6)
证明有效:
这个程序获取的输入数,Ñ。当然,此乘积的第一件事是采用N 2的子字符串(N以2为底)。这包括以0或1开头的重复子字符串。
之后,我们仅通过将每个值的第一次出现保留在子字符串列表中,就可以获取唯一的子字符串。
然后,此程序将列表的第一个元素加在一起,然后将第二个元素加在一起,然后将第三个,第四个元素加起来,如果列表中的一个不包含这样的元素,0
则假定为该元素。挑战是如何有效地询问这个数字以二进制形式有多少个以1开头的唯一子字符串?。由于每个要计数的第一个元素都是1
,所以我们可以简单地求和而不是对适当的子字符串进行过滤。
现在,上述求和结果列表的第一个元素包含子字符串的第一位的计数,因此我们简单地弹出并最终将其返回。