さーて、ゴリ押しのバカコードで検証検証♪
def montyhole(chg,doors=3)
a = (1..doors).to_a
goal = a.sample(1)[0]
me = a.sample(1)[0]
b = a.clone
b.delete(goal)
b.delete(me)
you = b.sample(1)[0]
if chg
c = a.clone
c.delete(me)
c.delete(you)
# raise "ERROR" if c.length > (doors - 2)
me = c[0]
end
if me == goal
1
else
0
end
end
doornum = 3
10.times do
stay = 0
change = 0
10000.times do
stay += montyhole(false,doornum)
change += montyhole(true,doornum)
end
puts "stay: #{stay}, change: #{change}"
end
結果、変えない方は約3333/10000(1/3)、変えた方は約6666/10000(2/3)。
本当は、しっかり考えれば分かることなのかもしれないけど、元記事を読んでちょっと考えたぐらいじゃ「当たってたとしたら、変えたら外れるし、外れてたとしたら、変えたら当たるし...???」ってなるから、思い立ったら強引にプログラムで解決したくなっちゃう。
ちなみに、昔はこういう「ちょっとした問題を強引に解決する道具」として使う言語はHSP(Hot Soup Processor)だったんだけど、今はRuby。
一時期VB.NETだった頃もあるけど、いちいちVisual Studio立ち上げてプロジェクト作ってコンパイルして...は面倒すぎた。
使うだけならJavaScriptのほうが簡単だけど、いろいろとクセが強すぎていまいちなじめない。最近は仕事でJSに振り回されてるから、当分プライベートでは触りたくないっていうのもあるし。
コメント