Давайте представим, что у нас есть конечный набор натуральных чисел. Этот набор может быть представлен как линия точек, где каждое целое число, присутствующее в наборе, заполняется как скантрон или перфокарта . Например, набор {1,3,4,6}
может быть представлен как:
*.**.*
*
представляет член нашего набора и .
представляет целое число, которое не является членом множества.
Эти наборы имеют «факторы». Свободно х является фактором у, если у можно построить из копий х. Более строгое наше определение фактора заключается в следующем:
- x является фактором y тогда и только тогда, когда y является объединением нескольких непересекающихся множеств, все из которых являются x со смещением.
Мы могли бы назвать *.*
в фактор из , *.**.*
потому что это совершенно ясно из двух экземпляров *.*
пут конца в конец.
*.**.*
------
*.*...
...*.*
Факторы не должны быть сквозными, мы также сказали бы, что *.*
это фактор*.*.*.*
*.*.*.*
-------
*.*....
....*.*
Факторы также могут пересекаться. Это означает *.*
также фактор****
****
----
*.*.
.*.*
Однако число не может быть охвачено фактором более одного раза. Например *.*
, не является фактором *.*.*
.
Вот более сложный пример:
*..*.**..***.*.*
Это имеет *..*.*
как фактор. Вы можете увидеть это ниже, где я выстроил три экземпляра *..*.*
.
*..*.**..***.*.*
----------------
*..*.*..........
......*..*.*....
..........*..*.*
задача
Учитывая набор любым разумным представлением, выведите все наборы, которые являются факторами ввода.
Вы можете индексировать по любому значению (то есть вы можете выбрать наименьшее число, которое может присутствовать во входных данных). Вы также можете предположить, что входной набор всегда будет содержать это наименьшее значение.
Это вопрос кода-гольфа, поэтому вы должны стремиться сделать это как можно меньше байтов.
Тестовые случаи
Эти тесты были сделаны вручную, может быть ошибка или два на более крупных
* -> *
*.*.* -> *, *.*.*
*.*.*.* -> *, *.*, *...*, *.*.*.*
****** -> *, **, *..*, ***, *.*.*, ******
*..*.**..***.*.* -> *, *..*.*, *.....*...*, *..*.**..***.*.*
*...*****.**.** -> *, *...**.**, *.....*, *...*****.**.**
*.*.*
= 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]
для*.*.*.*
), можем ли мы предположить, что он отсортирован?