始める無料で始める

十三のゲーム

組合せ論で知られるフランスの数学者 Pierre Raymond De Montmart は、十三のゲーム(Game of Thirteen)というシンプルなゲームを提案しました。1〜13 の番号が書かれた 13 枚のカードの山札があります。この山札をシャッフルし、カードを 1 枚ずつ引いていきます。カードに書かれた数字と、そのカードを引いた順番が一致したとき、それを「一致(coincidence)」と呼びます。たとえば、5 枚目に引いたカードが 5 なら一致です。1 度も一致が起きないまま最後のカードまで引き切れたら勝ちとなります。ここではシミュレーションを用いて、このゲームに勝つ確率を求めてみましょう。

この演習を通して、抽象的な問題をシミュレーションの枠組みに落とし込み、確率を推定する力をさらに強化します。

この演習はコースの一部です

Pythonで学ぶ統計シミュレーション

コースを見る

演習の手順

  • 各試行では、deck のカードをすべて重複なし(without replacement)で引いて draw に代入します。
  • draw に一致(coincidence)があれば、coincidences カウンタを 1 増やします。
  • 一致が一度もないゲームの割合を勝率として計算し、prob_of_winning を使って結果を表示してください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Pre-set constant variables
deck, sims, coincidences = np.arange(1, 14), 10000, 0

for _ in range(sims):
    # Draw all the cards without replacement to simulate one game
    draw = np.random.choice(____, size=____, replace=____)
    # Check if there are any coincidences
    coincidence = (draw == list(np.arange(1, 14))).any()
    if coincidence == ____: 
        coincidences += 1

# Calculate probability of winning
prob_of_winning = ____
print("Probability of winning = {}".format(____))
コードを編集して実行