Questo è un argomento matematico piuttosto complesso ma molto interessante (noto come "problema di copertura" ),
E vorrei il tuo aiuto per la sua attuazione.
Immagina un gioco della lotteria, in cui ogni biglietto deve scegliere 5 numeri casuali in un set di 50 numeri (da 1 a 50).
È abbastanza facile conoscere la probabilità di un biglietto vincente o la probabilità di avere 1, 2, 3 o 4 buoni numeri.
È anche abbastanza facile "generare" tutti i biglietti che hanno 1, 2, 3, 4 buoni numeri.
La mia domanda (e la sfida del codice) è correlata a questo, ma leggermente diversa:
Voglio comprare alcuni biglietti della lotteria (il minor numero possibile), ad esempio almeno uno dei miei biglietti ha 3 buoni numeri.
Sfida
Il tuo obiettivo è implementare una soluzione generica (come un programma o solo una funzione), come questa, in qualsiasi lingua:
// Input: 3 prameters
min_lottery_tickets(total_numbers_to_choose_from, how_many_numbers_to_choose, how_many_good_numbers_i_want)
Per l'esempio sopra, si dovrebbe semplicemente chiamare:
min_lottery_tickets(50, 5, 3)
e il programma genererà il minor numero di biglietti da giocare per raggiungere questo obiettivo.
Esempio:
min_lottery_tickets(10, 5, 2)
produrrebbe 7 ticket, come quelli:
1 2 3 4 5
5 6 7 8 9
10 1 2 6 7
10 3 4 8 9
3 4 6 7 8
1 2 3 8 9
1 4 9 5 10
perché tali biglietti sono sufficienti per coprire qualsiasi coppia di numeri da 1 a 10.
Produzione
Testo, una riga per biglietto, tabulazioni o spazi tra i numeri
chi vince
Vince il programma più efficiente (ovvero il programma che genera il minor numero di ticket per i parametri sopra indicati):
min_lottery_tickets(50, 5, 3)
Grazie!