読者です 読者をやめる 読者になる 読者になる

モンティホール

モンティホール問題自分でも書いてみた。
ドアを変えない場合の当たりの数を出す。当然はずれは変えてれば当たっていた数。確かに変えた方が2倍当たる。

# -*- coding: utf-8 -*-
def setup
  @doors = Array.new(3) { :goat }
  @doors[rand(3)] = :car
end

def select
  @selected_index = rand(3)
end

def monty_select
  @doors.each_with_index do |door, index|
    next if (index == @selected_index) || (door == :car)
    @monty_selected_index = index
  end
end

def monty_hall?
  setup
  select
  monty_select

  return false if @doors[@selected_index] == :goat
  true
end

count = 1000000
result = { :fix => 0, :change => 0}
(1..count).each { monty_hall? ? result[:fix] += 1 : result[:change] += 1 }

puts "ドアを変えない(実施回数: #{count})"
puts "当たり: #{result[:fix]}"
puts "はずれ: #{result[:change]}"

結果

ドアを変えない(実施回数: 1000000)
当たり: 332916
はずれ: 667084