Retrocomputing

# Monty Hall problem

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? The chance should be 50/50 no matter what you do, right?

You can now try both strategies by playing this game in Microsoft BASIC. Wikipedia has more information about the Monty Hall problem.

## The Monty Hall problem as a game

```10 PRINT "THIS IS A GUESSING GAME"
20 PRINT "THERE ARE 3 DOORS AND A PRIZE BEHIND ONE OF THEM."
30 PRINT "CHOOSE A DOOR. ONE OF THE OTHER DOORS WILL BE OPENED."
40 PRINT "YOU CAN THEN CHANGE YOUR GUESS"
100 W=0:R=0
105 DIM D(3,3)
110 GOSUB 1000
130 P = INT(RND(1)*3)+1
160 INPUT "YOUR GUESS";G
170 IF G < 4 AND G > 0 AND G=INT(G) THEN 200
180 PRINT "YOUR GUESS MUST BE 1, 2 OR 3."
190 GOTO 160
200 REM OPEN DOOR WITH NO PRIZE
210 O = D(G,P)
230 IF O <> 0 THEN 300
240 O = INT(RND(1)*2)+P+1
250 IF O > 3 THEN O=O-3
300 PRINT "OPENING DOOR";O
310 REM SWITCH
320 INPUT "DO YOU WANT TO SWITCH TO THE OTHER DOOR";A\$
330 IF LEFT\$(A\$,1) <> "Y" THEN 400
340 G=D(O,G)
350 PRINT "SWITCHING TO";G
400 PRINT "PRIZE WAS BEHIND DOOR";P;
420 IF G<>P THEN 500
430 W=W+1
440 PRINT "-- YOU WIN"
450 GOTO 510
500 PRINT "-- YOU LOOSE"
510 R=R+1
520 INPUT "TRY AGAIN";A\$
530 IF LEFT\$(A\$,1) = "Y" THEN 130
540 PRINT "YOU HAD";W;"WINS IN";R;"RUNS"
550 PRINT "THAT IS";W/R*100;"%"
999 END
1000 REM INITIALIZE MATRIX
1010 FOR J = 1 TO 3
1020 FOR I = 1 TO 3
1030 READ D(J,I)
1040 NEXT I
1050 NEXT J
1060 RETURN
1070 DATA 0,3,2, 3,0,1, 2,1,0```

## Simulation

If you are impatient, then you can run a simulation of 100 random guesses and see for yourself.

```10 PRINT "SIMULATES 100 GUESSES AND SUMS UP THE WINS"
20 INPUT "DO YOU WANT TO SWITCH DOOR";A\$
30 A\$=LEFT\$(A\$,1)
100 W=0
110 DIM D(3,3)
120 GOSUB 1000
130 FOR R = 1 TO 100
140   P = INT(RND(1)*3)+1
150   PRINT "PRIZE IS BEHIND DOOR";P;
160   G = INT(RND(1)*3)+1
170   PRINT "YOUR GUESS";G;
200   REM OPEN DOOR NO PRIZE
210   O = D(G,P)
230   IF O <> 0 THEN 300
240   O = INT(RND(1)*2)+P+1
250   IF O > 3 THEN O=O-3
300   PRINT "OPENING DOOR";O;
310   REM SWITCH
320   IF A\$ <> "Y" THEN 420
330   G=D(O,G)
340   PRINT "SWITCHING TO";G;
420   IF G<>P THEN 500
430   W=W+1
440   PRINT "WIN";
500   PRINT
520 NEXT R
530 PRINT "WINS:",W
999 END
1000 REM INITIALIZE DECISION MATRIX
1010 FOR J = 1 TO 3
1020 FOR I = 1 TO 3
1030 READ D(J,I)
1040 NEXT I
1050 NEXT J
1060 RETURN
1070 DATA 0,3,2, 3,0,1, 2,1,0
```