Imaginons que nous ayons un ensemble fini d'entiers positifs. Cet ensemble peut être représenté comme une ligne de points où chaque entier présent dans l'ensemble est rempli comme un scantron ou une carte perforée . Par exemple, l'ensemble {1,3,4,6}
pourrait être représenté comme suit:
*.**.*
*
représente un membre de notre ensemble et .
représente un entier qui n'est pas membre de l'ensemble.
Ces ensembles ont des "facteurs". Lâchement x est un facteur de y si y peut être construit à partir de copies de x. Plus rigoureusement, notre définition du facteur est la suivante:
- x est un facteur de y si et seulement si y est l'union d'un certain nombre d' ensembles disjoints , qui sont tous x avec un décalage.
Nous appellerions *.*
un facteur de *.**.*
car il est très clairement constitué de deux exemplaires de *.*
bout en bout.
*.**.*
------
*.*...
...*.*
Les facteurs ne doivent pas être de bout en bout, nous dirions aussi que *.*
c'est un facteur de*.*.*.*
*.*.*.*
-------
*.*....
....*.*
Les facteurs peuvent également se chevaucher. Cela signifie *.*
également****
****
----
*.*.
.*.*
Cependant, un nombre ne peut pas être couvert par un facteur plus d'une fois. Par exemple, *.*
n'est pas un facteur de *.*.*
.
Voici un exemple plus compliqué:
*..*.**..***.*.*
Cela a *..*.*
un facteur. Vous pouvez le voir ci-dessous où j'ai aligné les trois instances de *..*.*
.
*..*.**..***.*.*
----------------
*..*.*..........
......*..*.*....
..........*..*.*
Tâche
Étant donné un ensemble par n'importe quelle représentation raisonnable, tous les ensembles qui sont des facteurs de l'entrée.
Vous pouvez indexer par n'importe quelle valeur (c'est-à-dire que vous pouvez sélectionner le plus petit nombre pouvant être présent dans l'entrée). Vous pouvez également supposer que l'ensemble d'entrée contiendra toujours cette plus petite valeur.
Il s'agit d'une question de code-golf , vous devez donc viser à le faire dans le moins d'octets possible.
Cas de test
Ces cas de test ont été faits à la main, il peut y avoir une erreur ou deux sur les plus grands
* -> *
*.*.* -> *, *.*.*
*.*.*.* -> *, *.*, *...*, *.*.*.*
****** -> *, **, *..*, ***, *.*.*, ******
*..*.**..***.*.* -> *, *..*.*, *.....*...*, *..*.**..***.*.*
*...*****.**.** -> *, *...**.**, *.....*, *...*****.**.**
*.*.*
= x+x^2+x^4
, alors 1+x+x^2
= ***
serait un diviseur, non? x+x^2+x^4 = (1-x+x^2)(1+x+x^2)
*
est répertorié comme un facteur qui représente le même sous-ensemble que *.
ou *..
.
[1,3,5,7]
pour*.*.*.*
) pouvons-nous supposer qu'il est trié?