Monty Hall meets Monte Carlo
In honor of CBS canceling The Guiding Light after 72 years, and replacing it with a new incantation of Let’s Make A Deal, I decided to apply a little brute force computing to The Monty Hall problem.
Here is the VB.NET code to run the simulations. I decided to only apply a few different Monty Hall behaviors and a few different player behaviors, but it should be enough to drive home the paradox.
Module Module1
Sub Main()
Dim i, j, ctr As Integer
Dim doorSwitch As String = "?"
Dim smartMonty As String = "?"
Dim prizeDoor(3) As Boolean
Dim rand As Random = New Random()
Dim doorMontyOpens As Integer
Dim doorYouOpen As Integer
Dim carsWon As Integer = 0
Console.WriteLine("The Monty Hall Problem")
Console.Write("How many times to run the simulation? ")
ctr = Val(Console.ReadLine())
If ctr < 1 Then End
Console.Write("Are you going to switch doors? [Y/N/M] ")
While Not "YNM".Contains(doorSwitch)
doorSwitch = Console.ReadKey.KeyChar.ToString.ToUpper
End While
Console.WriteLine()
Console.Write("Does Monty know where the car is? [Y/N/M] ")
While Not "YNM".Contains(smartMonty)
smartMonty = Console.ReadKey.KeyChar.ToString.ToUpper
End While
Console.WriteLine()
For i = 1 To ctr
' set up the prize doors
For j = 1 To 3
prizeDoor(j) = False
Next
prizeDoor(rand.Next(1, 4)) = True
Console.Write(i.ToString() + " (")
For j = 1 To 3
Console.Write(If(prizeDoor(j), "$", j.ToString))
Next
Console.Write(") -- ")
' Monty shows you a door
If smartMonty = "Y" Or (smartMonty = "M" And _
rand.NextDouble > 0.5) Then
doorMontyOpens = If(prizeDoor(2), 3, 2)
Else
doorMontyOpens = rand.Next(2, 4)
If prizeDoor(doorMontyOpens) Then
carsWon = carsWon + 1
Console.WriteLine("Monty revealed the car!!!!!")
Continue For
End If
End If
Console.Write("Monty reveals a goat behind door #" + _
doorMontyOpens.ToString + " -- ")
' pick a door to open
If doorSwitch = "Y" Or (doorSwitch = "M" And _
rand.NextDouble > 0.5) Then
doorYouOpen = If(doorMontyOpens = 2, 3, 2)
Console.Write("You switched to door #" + _
doorYouOpen.ToString + " -- ")
Else
doorYouOpen = 1
Console.Write("You stayed with door #1 -- ")
End If
' did we win?
If prizeDoor(doorYouOpen) Then
Console.WriteLine("You won the car!!!!!")
carsWon = carsWon + 1
Else
Console.WriteLine("You won the goat.")
End If
Next
Console.WriteLine(" ")
Console.WriteLine("You won the car " + carsWon.ToString + _
" times out of " + ctr.ToString)
Console.WriteLine("Winning percentage: " + (carsWon * _
100.0 / ctr).ToString("##0.0"))
Console.WriteLine(" ")
Console.WriteLine("Strike any key to end...")
Console.ReadKey()
End Sub
End Module
Now if CBS ever decides to cancel The Young And The Restless, we are going to have a real problem on our hands.