「はてな民に確率の問題を出してみよう」の問1を読んだとき,同様の問題を以前,数学の先生から出題されたことを思い出しました。以下は,理屈が分からなかったので,Rubyでシミュレーションを行ったものです。シミュレーションの結果を見て,なんか狐につままれたような感じになったのを今でも覚えています。
問2の地震が来るバージョンは,初めて見る問題でした。問1も地震ではなく,自信を持って理解できているとは言えない段階で,ましてや問2は…という感じなので,シミュレーションを行ってみました。
monty_hall2.rb
#!/usr/bin/ruby LOOP_TIMES = 1000000 t = Time.now srand(t.sec ^ t.usec ^ Process.pid) unchanged = 0 # 最後まで選択を変えない changed = 0 # 途中で選択を変更する invalid = 0 # ゲームが無効になった回数 LOOP_TIMES.times do hit = rand(3) # 当たりくじ first_ans = rand(3) # Playerの1回目の選択 earthquake = rand(3) # 地震によって開くドア if hit == earthquake || first_ans == earthquake invalid += 1 next end second_ans = nil # Playerの2回目の選択 loop do second_ans = rand(3) break if earthquake != second_ans && first_ans != second_ans end unchanged += 1 if first_ans == hit changed += 1 if second_ans == hit end puts "当たる確率…" puts "最後まで選択を変更しない場合 : #{unchanged.to_f/(LOOP_TIMES - invalid)}" puts "途中で選択を変更した場合 : #{changed.to_f/(LOOP_TIMES - invalid)}"
シミュレーション結果
当たる確率…
最後まで選択を変更しない場合 : 0.499274842545269
途中で選択を変更した場合 : 0.500725157454731
うぅ〜ん。確かに【回答編】はてな民に確率の問題を出してみようにあるように,1/2ですね。確率は難しい…。