これはかなり複雑ですが、非常に興味深い数学の主題(「問題をカバーする」として知られています)、
そして、それを実装するためにあなたの助けが欲しい。
宝くじゲームを想像してください。各宝くじは、50個の数字(1〜50)から5つの乱数を選択する必要があります。
チケットが当選する確率、または1、2、3、または4個の良い数字を獲得する確率を知るのは非常に簡単です。
また、1、2、3、4個の適切な番号を持つすべてのチケットを「生成」するのは非常に簡単です。
私の質問(およびコードチャレンジ)はこれに関連していますが、少し異なります。
少なくとも 1つのチケットに3つの良い番号が含まれているなど、いくつかの宝くじ(可能な限り少ない数)を購入したい。
チャレンジ
目標は、次のような汎用ソリューションを(プログラムまたは単なる関数として)任意の言語で実装することです。
// Input: 3 prameters
min_lottery_tickets(total_numbers_to_choose_from, how_many_numbers_to_choose, how_many_good_numbers_i_want)
上記の例では、以下を呼び出すだけです:
min_lottery_tickets(50, 5, 3)
プログラムはこの目標を達成するためにプレイするチケットの最小セットを生成します。
例:
min_lottery_tickets(10, 5, 2)
次のような7つのチケットを出力します。
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
そのようなチケットは1から10までの数字のペアをカバーするのに十分だからです。
出力
テキスト、チケットごとに1行、数字の間の表またはスペース
誰が勝ちますか
最も効率的なプログラムが勝ちます(つまり、上記のパラメーターに対して最も少ないチケットを生成するプログラム):
min_lottery_tickets(50, 5, 3)
ありがとう!
関連。
—
ピーターテイラー
この質問にはさまざまな説明が必要です。あなたはプログラム、機能、またはそのどちらを望んでいますか?出力形式は重要ですか?番号は1からインデックス付けする必要がありますか、それとも0からインデックス付けできますか?そして、客観的な勝利条件は何ですか?
—
ピーターテイラー
@xemこれは、Math SEにほぼ属します。彼らはおそらく数字はあなたの好意(いくつかのジャックポット数STが存在しないにもかかわらず、それが購入のチケットの価値がある)ではないことをあなたに証明するところ
—
たけた
良い数字は何ですか?
—
DavidC
このようなプログラムで出力されたチケットを実際に買いに行くと、多額のお金を失うことになることは確かです。
—
マイケルハンプトン