正の整数の有限セットがあると想像してみましょう。このセットは、セット内に存在する各整数がスキャントロンまたはパンチカードのように塗りつぶされた点の線として表すことができます。たとえば、セット{1,3,4,6}
は次のように表すことができます。
*.**.*
*
はセットのメンバーを表し、セットのメンバーで.
はない整数を表します。
これらのセットには「要因」があります。yがxのコピーから構築できる場合、ゆるくxはyの因子です。より厳密には、因子の定義は次のとおりです。
- xがyの因数であるのは、yが互いに素な集合の集合であり、そのすべてがオフセット付きのxである場合のみです。
ファクターを呼び出すの*.*
は、2つのコピーのエンドツーエンドのコピーで非常に明確に構成されているためです。*.**.*
*.*
*.**.*
------
*.*...
...*.*
要因はエンドツーエンドである必要はありませんが、それ*.*
は要因でもあります*.*.*.*
*.*.*.*
-------
*.*....
....*.*
要因は重複することもあります。これは*.*
、次の要因でもあります****
****
----
*.*.
.*.*
ただし、1つの数値で1つの数値を複数回カバーすることはできません。たとえば、の要因で*.*
はありません*.*.*
。
より複雑な例を次に示します。
*..*.**..***.*.*
これには*..*.*
要因があります。以下のように、3つのインスタンスを並べたことがわかります*..*.*
。
*..*.**..***.*.*
----------------
*..*.*..........
......*..*.*....
..........*..*.*
仕事
合理的な表現によるセットが与えられると、入力の要因であるすべてのセットが出力されます。
任意の値でインデックスを作成できます(つまり、入力に存在できる最小の数値を選択できます)。また、入力セットには常にその最小値が含まれると想定することもできます。
これはコードゴルフの質問ですので、できるだけ少ないバイトでこれを行うようにしてください。
テストケース
これらのテストケースは手作業で行われましたが、大きなテストケースでは1つまたは2つの間違いがある可能性があります
* -> *
*.*.* -> *, *.*.*
*.*.*.* -> *, *.*, *...*, *.*.*.*
****** -> *, **, *..*, ***, *.*.*, ******
*..*.**..***.*.* -> *, *..*.*, *.....*...*, *..*.**..***.*.*
*...*****.**.** -> *, *...**.**, *.....*, *...*****.**.**
*.*.*
= x+x^2+x^4
、そして1+x+x^2
= ***
右、除数でしょうか?x+x^2+x^4 = (1-x+x^2)(1+x+x^2)
*
として、*.
またはと同じサブセットを表す因子としてリストされてい*..
ます。
[1,3,5,7]
のために*.*.*.*
)私たちは、それがソートだと仮定することができますか?