Monty Hall problem

var n = 1000                                  # number of times to play
var switchWins = (var stayWins = 0)           # sum of each strategy's wins
 
n.times {                                     # play the game n times
   var prize = pick(^3)
   var chosen = pick(^3)
 
   var show;
   do {
        show = pick(^3)
   } while (show ~~ [chosen, prize])
 
   given(chosen) {
     when (prize)                 { stayWins   += 1 }
     when ([3 - show - prize])    { switchWins += 1 }
     default                      { die "~ error ~" }
   }
}
 
say ("Staying wins %.2f%% of the time."   % (100.0 * stayWins   / n))
say ("Switching wins %.2f%% of the time." % (100.0 * switchWins / n))

Output:

Staying wins 30.10% of the time.
Switching wins 69.90% of the time.

Last updated