Dies ist ein ziemlich komplexes, aber sehr interessantes Mathematikfach (bekannt als "Deckungsproblem" ).
Und ich hätte gerne Ihre Hilfe bei der Implementierung.
Stellen Sie sich ein Lotteriespiel vor, bei dem jedes Ticket 5 Zufallszahlen in einem Satz von 50 Zahlen (von 1 bis 50) auswählen muss.
Es ist ziemlich einfach, die Wahrscheinlichkeit eines Gewinnscheins oder die Wahrscheinlichkeit von 1, 2, 3 oder 4 guten Zahlen zu kennen.
Es ist auch ziemlich einfach, alle Tickets mit 1, 2, 3, 4 guten Zahlen zu "generieren".
Meine Frage (und Code-Herausforderung) hängt damit zusammen, ist aber etwas anders:
Ich möchte einige Lottoscheine kaufen (die wenigsten), zum Beispiel, dass mindestens einer meiner Tickets 3 gute Nummern hat.
Herausforderung
Ihr Ziel ist es, eine generische Lösung (als Programm oder nur als Funktion) wie diese in einer beliebigen Sprache zu implementieren:
// Input: 3 prameters
min_lottery_tickets(total_numbers_to_choose_from, how_many_numbers_to_choose, how_many_good_numbers_i_want)
Für das obige Beispiel müsste man nur anrufen:
min_lottery_tickets(50, 5, 3)
und das Programm generiert den kleinsten Satz von Tickets, um dieses Ziel zu erreichen.
Beispiel:
min_lottery_tickets(10, 5, 2)
würde 7 Tickets ausgeben, wie diese:
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
weil solche Tickets ausreichen, um jedes Zahlenpaar von 1 bis 10 abzudecken.
Ausgabe
Text, eine Zeile pro Ticket, Tabellen oder Leerzeichen zwischen Zahlen
Wer gewinnt
Das effizienteste Programm gewinnt (dh das Programm, das die wenigsten Tickets für die oben genannten Parameter generiert):
min_lottery_tickets(50, 5, 3)
Vielen Dank!
Antworten:
Ich weiß, dass es nicht optimal ist , aber hier ist der Code in node.js:
Einige Beispielergebnisse:
andere:
andere:
quelle
min_lottery_tickets(10, 5, 2)
generieren viel mehr Lösungen als OPs.