Vamos imaginar que temos um conjunto finito de números inteiros positivos. Este conjunto pode ser representado como uma linha de pontos em que cada número inteiro presente no conjunto é preenchido como um scantron ou cartão perfurado . Por exemplo, o conjunto {1,3,4,6}
pode ser representado como:
*.**.*
*
representa um membro do nosso conjunto e .
representa um número inteiro que não é um membro do conjunto.
Esses conjuntos têm "fatores". Vagamente x é um fator de y se y puder ser construído a partir de cópias de x. Mais rigorosamente, nossa definição de fator é a seguinte:
- x é um fator de y se e somente se y é a união de um número de conjuntos disjuntos , todos os quais são x com um deslocamento.
Nós chamaríamos *.*
um fator de *.**.*
porque é claramente composto por duas cópias de *.*
pôr fim a fim.
*.**.*
------
*.*...
...*.*
Como os fatores não precisam ser completos, diríamos também que esse *.*
é um fator de*.*.*.*
*.*.*.*
-------
*.*....
....*.*
Os fatores também podem se sobrepor. Isso significa *.*
também é um fator de****
****
----
*.*.
.*.*
No entanto, um número não pode ser coberto por um fator mais de uma vez. Por exemplo, não*.*
é um fator de .*.*.*
Aqui está um exemplo mais complicado:
*..*.**..***.*.*
Isso tem *..*.*
como um fator. Você pode ver isso abaixo, onde eu alinhei as três instâncias de *..*.*
.
*..*.**..***.*.*
----------------
*..*.*..........
......*..*.*....
..........*..*.*
Tarefa
Dado um conjunto por qualquer representação razoável, todos os conjuntos são fatores da entrada.
Você pode indexar por qualquer valor (ou seja, você pode selecionar um número menor que possa estar presente na entrada). Você também pode assumir que o conjunto de entrada sempre conterá o menor valor.
Esta é uma questão de código-golfe, então você deve tentar fazer isso no menor número de bytes possível.
Casos de teste
Esses casos de teste foram feitos à mão, pode haver um ou dois erros nos maiores
* -> *
*.*.* -> *, *.*.*
*.*.*.* -> *, *.*, *...*, *.*.*.*
****** -> *, **, *..*, ***, *.*.*, ******
*..*.**..***.*.* -> *, *..*.*, *.....*...*, *..*.**..***.*.*
*...*****.**.** -> *, *...**.**, *.....*, *...*****.**.**
*.*.*
= x+x^2+x^4
, então 1+x+x^2
= ***
seria um divisor, certo?x+x^2+x^4 = (1-x+x^2)(1+x+x^2)
*
é listado como um fator que representa o mesmo subconjunto de*.
ou *..
.
[1,3,5,7]
para*.*.*.*
), podemos assumir que ele está classificado?