假设我们有一组有限的正整数。这个集合可以表示为一点点线,其中集合中存在的每个整数都像扫描仪或打孔卡一样被填充。例如,该集合{1,3,4,6}
可以表示为:
*.**.*
*
代表我们集合的成员,并且.
代表一个不是集合成员的整数。
这些集合具有“因素”。如果可以从x的副本中构建y,则x是y的因子。更严格地,我们对因子的定义如下:
- 当且仅当y是许多不交集的并集时,x都是y的因子,所有不交集都是x且具有偏移量。
我们之所以称其*.*
为因子,是*.**.*
因为它很显然是由两个*.*
首尾相连的副本组成的。
*.**.*
------
*.*...
...*.*
因素不一定是端到端的,我们还要说这*.*
是*.*.*.*
*.*.*.*
-------
*.*....
....*.*
因素也可以重叠。这*.*
也意味着****
****
----
*.*.
.*.*
但是,一个数字不能多次覆盖一个因数。例如*.*
是不是一个因素*.*.*
。
这是一个更复杂的示例:
*..*.**..***.*.*
这*..*.*
是一个因素。您可以在下面看到我排列的三个实例的地方*..*.*
。
*..*.**..***.*.*
----------------
*..*.*..........
......*..*.*....
..........*..*.*
任务
给定一个由任何合理表示形式输出的集合,所有集合都是输入的因子。
您可以按任何值编制索引(即,可以选择输入中可以存在的最小数字)。您还可以假设输入集将始终包含该最小值。
这是一个代码问题,因此您应该以尽可能少的字节为目标。
测试用例
这些测试用例是手工完成的,较大的可能有一个或两个错误
* -> *
*.*.* -> *, *.*.*
*.*.*.* -> *, *.*, *...*, *.*.*.*
****** -> *, **, *..*, ***, *.*.*, ******
*..*.**..***.*.* -> *, *..*.*, *.....*...*, *..*.**..***.*.*
*...*****.**.** -> *, *...**.**, *.....*, *...*****.**.**
这是否等于找到系数限制为0和1的多项式的除数?
—
xnor
@ xnor我不确定。如果
—
mbomb007 '17
*.*.*
= x+x^2+x^4
,则1+x+x^2
= ***
将是除数,对吗?x+x^2+x^4 = (1-x+x^2)(1+x+x^2)
@JonathanAllan在您的示例中,它
—
Martin Ender
*
被列为代表与*.
或相同子集的因子*..
。
@JonathanAllan它说输出所有集合,而不是输出有效集合的所有ASCII表示。
—
Martin Ender
[1,3,5,7]
的*.*.*.*
),我们可以假设它的排序?