モンティ・ホール問題をゴリ押しする

終物語 ~ モンティ・ホール問題 - カモメのリズム

さーて、ゴリ押しのバカコードで検証検証♪

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に振り回されてるから、当分プライベートでは触りたくないっていうのもあるし。