Vamos a echar un conjunto de números enteros mayores que 1 y lo llaman X . Definiremos S (i) como el conjunto de todos los miembros de X divisible por i donde i> 1 . Me gustaría elegir de estos subconjuntos un grupo de conjuntos de manera que
Su unión es el conjunto X
Ningún elemento de X está en dos de los conjuntos.
Por ejemplo, podemos reagruparnos {3..11}
como
{3,4,5,6,7,8,9,10,11}
S(3): {3, 6, 9, }
S(4): { 4, 8, }
S(5): { 5, 10, }
S(7): { 7, }
S(11):{ 11}
Algunos conjuntos no se pueden expresar de esta manera. Por ejemplo, si tomamos {3..12}
, 12
es un múltiplo de 3 y 4 que impide que nuestros conjuntos sean mutuamente excluyentes.
Algunos conjuntos se pueden expresar de múltiples maneras, por ejemplo, {4..8}
se pueden representar como
{4,5,6,7,8}
S(4): {4, 8}
S(5): { 5, }
S(6): { 6, }
S(7): { 7, }
pero también se puede representar como
{4,5,6,7,8}
S(2): {4, 6, 8}
S(5): { 5, }
S(7): { 7, }
Tarea
Nuestro objetivo es escribir un programa que tome un conjunto como entrada y salida con el menor número de subconjuntos que lo cubren de esta manera. Si no hay ninguno, debe generar algún valor que no sea un entero positivo (por ejemplo 0
).
Esta es una pregunta de código de golf , por lo que las respuestas se puntuarán en bytes, con menos bytes mejor.
Pruebas
{3..11} -> 5
{4..8} -> 3
{22,24,26,30} -> 1
{5} -> 1
[5..5]
? ¿Podemos recibir cosas como [8..4]
?
12
es un múltiplo de ambos 3
y 4
evita que nuestros sets sean mutuamente excluyentes ": ¿por qué? No veo nada más en la declaración del problema que requiera 12
entrar en ambos subconjuntos.
[22,24,26,30]
son todas múltiplos de 2
. ¿Estás seguro de que no sería mejor eliminar esto y ponerlo a prueba?