頭で考えたら、別に選び直さないでいいし、むしろ正解率が上がったような気になってしまって釈然としないので、コードで確認。
def f(resample)
doors = Array.new(3, &:itself) # 3つのドアがある
1000000.times.count do
car = doors.sample # 一つが当たり
select = doors.sample # プレーヤーが1つ選択
if select == car
next true # いきなり正解
end
goat = (doors - [select, car]).sample # 残りのドアのハズレの1つを開示
if resample
select = (doors - [goat]).sample # 選び直す(同じのを再選択する場合もある)
end
select == car
end
end
# 選び直さない場合と、選び直した場合の当たり数
f(false) # => 333480
f(true) # => 665914
やっぱり選び直した方が正解率が上がるのか。なんでだろ。
参考
モンティ・ホール問題 - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%BB%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C
math - モンティ・ホール問題を解く - Qiita
http://qiita.com/ynakayama/items/1e1693503e27ce33e0a0