I found this on the internet and modified it so you can just change the commented out options to run it under the different scenarios.
car = wins = 0
many = 100000
actual = 0
many.times do
choice1 = rand(3)
car = rand(3)
#host_opts = [0, 1, 2] - [choice1, car] # host knows what is behind
host_opts = [0, 1, 2] - [choice1] # host doesn't know what is behind
#choice2 = [choice1] # don't switch
choice2 = [0, 1, 2] - [choice1, host_opts.first] # switch
if host_opts.first == car then
# Discard? Automatic win? It doesn't actually matter!
# It only changes the denominator.
else
# According to the puzzle, it is decision time!
wins += 1 if choice2.first == car
actual += 1
end
end
puts "#{(wins * 100) / actual}%"