バックグラウンド
「平日靴下」のコレクションがあります。これは、曜日によってラベル付けされた7足の靴下です。私が靴下を洗うと、それらは山になってしまいます。クローゼットに入れる前に正しいペアに揃えなければなりません。私の戦略は、一度に山からランダムな靴下を1つずつ引き出し、引き出しに置くことです。引き出しに一致する靴下のペアがある場合は、つなぎ合わせてクローゼットに入れます。あなたの仕事は、このランダムなプロセスをシミュレートし、最初に一致するペアを見つけるのに必要なドローの数を返すことです。
入力
入力は整数N≥1です。これは「1週間の日数」を表します。パイルにはNペアの靴下があり、各ペアには個別のラベルがあります。必要に応じて、入力としてPRNGシードを使用することもできます。
出力
出力は、最初に一致するペアが見つかるまでに描画する必要がある靴下の数です。たとえば、最初の2つの靴下がすでに一致するペアを形成している場合、出力は2です。
もちろん、出力はランダムであり、描画順序に依存します。描画順序はすべて同じであると想定しているため、靴下を描画するたびに選択肢は均一であり、他のすべての選択肢から独立しています。
例
レッツN = 3私たちは、合計、ラベルに6つの靴下を持っているので、こと、AABBCC。「sock-drawing protocol」の実行の1つは次のとおりです。
| Pile | Drawer | Pairs
Begin | AABBCC | - | -
Draw B | AABCC | B | -
Draw C | AABC | BC | -
Draw B | AAC | C | BB
Draw A | AC | AC | BB
Draw A | C | C | AA BB
Draw C | - | - | AA BB CC
最初に一致するペアは、2番目のBを描画した後に検出されました。これは、描画される3番目の靴下でしたので、正しい出力は3です。
ルールとスコアリング
完全なプログラムまたは関数を作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。入力と出力は、単項(1sの文字列)を含む任意の妥当な形式にすることができます。
あなたの言語のビルトインRNGは完璧だと思うかもしれません。出力に正しい確率分布がある限り、実際に靴下描画プロトコルをシミュレートする必要はありません。
「テストケース」
入力N = 7の場合のすべての出力のおおよその確率は次のとおりです。
Output 2 3 4 5 6 7 8
Probability 0.077 0.154 0.210 0.224 0.186 0.112 0.037
ソリューションをテストするには、たとえば40 000回実行して、出力分布がこれにかなり近いかどうかを確認します。
Draw all socks. End up with an odd number.