Suppose you’re on a game show, and you’re given the choice of three doors: Behind one door is a car; behind the others, goats. You pick a door, say No. 1, and the host, who knows what’s behind the doors, opens another door, say No. 3, which has a goat. He then says to you, “Do you want to pick door No. 2?” Is it to your advantage to switch your choice? (Whitaker 1990)
http://en.wikipedia.org/wiki/Monty_Hall_problem
http://www.smartvideos.ru/probabilit-problem
#!/usr/bin/ruby
@cases = {
:without_change => {
:wins => 0,
:looses => 0,
:change? => lambda { false }
},
:with_change => {
:wins => 0,
:looses => 0,
:change? => lambda { true }
},
:random_change => {
:wins => 0,
:looses => 0,
:change? => lambda { rand(1) == 0 ? true : false }
},
}
class Game
def initialize
@doors = [false, false, false]
shuffle_gold
end
def shuffle_gold
@wining_door_index = rand(@doors.size)
@doors[@wining_door_index] = true
end
def player_make_choice
@players_door_index = rand(@doors.size)
end
def win?
@doors[@players_door_index]
end
def game_opens_loosing_door
loosing_door_index = 0
(1 .. @doors.size).each_with_index {|value, index| loosing_door_index = index if (index != @wining_door_index && index != @players_door_index) }
@doors.delete(loosing_door_index)
end
end
def play_games
@cases.keys.each do |case_key|
variant = @cases[case_key]
game = Game.new()
game.player_make_choice
if game.win?
variant[:wins] += 1
next
end
game.game_opens_loosing_door
if variant[:change?].call
game.player_make_choice
end
if game.win?
variant[:wins] += 1
else
variant[:looses] += 1
end
end
end
10000.times do
play_games()
end
@cases.each do |key, stat|
puts key
puts "-------------------------"
puts "wins: #{stat[:wins]}"
puts "looses: #{stat[:looses]}"
puts
end
J January, 2009 at 3:52 pm
do you want to win a goat or sinbad on floppy disks?