Consente di prendere una serie di numeri interi maggiori di 1 e lo chiamano X . Definiremo S (i) come l'insieme di tutti i membri di X divisibili per i dove i> 1 . Vorrei scegliere tra questi sottogruppi un gruppo di insiemi tale che
La loro unione è l'insieme X
Nessun elemento di X è in due dei set.
Ad esempio possiamo raggruppare {3..11}
come
{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}
Alcuni set non possono essere espressi in questo modo. Ad esempio, se prendiamo {3..12}
, 12
è un multiplo di 3 e 4 che impedisce ai nostri set di escludersi a vicenda.
Alcuni insiemi possono essere espressi in più modi, ad esempio {4..8}
possono essere rappresentati come
{4,5,6,7,8}
S(4): {4, 8}
S(5): { 5, }
S(6): { 6, }
S(7): { 7, }
ma può anche essere rappresentato come
{4,5,6,7,8}
S(2): {4, 6, 8}
S(5): { 5, }
S(7): { 7, }
Compito
Il nostro obiettivo è scrivere un programma che prenderà un set come input e produca il minor numero di sottoinsiemi che lo coprono in questo modo. Se non ce ne sono, dovresti generare un valore diverso da un numero intero positivo (ad esempio 0
).
Questa è una domanda di code-golf, quindi le risposte verranno classificate in byte, con meno byte migliori.
test
{3..11} -> 5
{4..8} -> 3
{22,24,26,30} -> 1
{5} -> 1
[5..5]
? Possiamo ricevere cose come [8..4]
?
12
è un multiplo di entrambi 3
e 4
impedisce ai nostri set di escludersi a vicenda ": perché? Non vedo nient'altro nella dichiarazione del problema che richiede 12
di andare in entrambi i sottoinsiemi.
[22,24,26,30]
sono tutti multipli di 2
. Sei sicuro che non sarebbe meglio eliminare questo e sandbox?