Monty Hall problem: Difference between revisions
Content added Content deleted
m (→{{header|ANSI BASIC}}: Level of header lowered.) |
m (→{{header|ANSI BASIC}}: Set line numbers.) |
||
Line 546: | Line 546: | ||
{{works with|Decimal BASIC}} |
{{works with|Decimal BASIC}} |
||
<syntaxhighlight lang="basic"> |
<syntaxhighlight lang="basic"> |
||
PROGRAM MontyHallProblem |
100 PROGRAM MontyHallProblem |
||
DEF NGames = 10000 |
110 DEF NGames = 10000 |
||
RANDOMIZE |
120 RANDOMIZE |
||
LET NWins = 0 |
130 LET NWins = 0 |
||
FOR Game = 0 TO NGames |
140 FOR Game = 0 TO NGames |
||
IF IsGameWon(0) <> 0 THEN LET NWins = NWins + 1 |
150 IF IsGameWon(0) <> 0 THEN LET NWins = NWins + 1 |
||
NEXT Game |
160 NEXT Game |
||
PRINT "NOT switching doors wins car in "; |
170 PRINT "NOT switching doors wins car in "; |
||
PRINT USING "##.#": NWins / NGames * 100; |
180 PRINT USING "##.#": NWins / NGames * 100; |
||
PRINT "% of games." |
190 PRINT "% of games." |
||
LET NWins = 0 |
200 LET NWins = 0 |
||
FOR Game = 0 TO NGames |
210 FOR Game = 0 TO NGames |
||
IF IsGameWon(1) <> 0 THEN LET NWins = NWins + 1 |
220 IF IsGameWon(1) <> 0 THEN LET NWins = NWins + 1 |
||
NEXT Game |
230 NEXT Game |
||
PRINT "But switching doors wins car in "; |
240 PRINT "But switching doors wins car in "; |
||
PRINT USING "##.#": NWins / NGames * 100; |
250 PRINT USING "##.#": NWins / NGames * 100; |
||
PRINT "% of games." |
260 PRINT "% of games." |
||
END |
270 END |
||
REM *** |
280 REM *** |
||
EXTERNAL FUNCTION IsGameWon(Sw) |
290 EXTERNAL FUNCTION IsGameWon(Sw) |
||
REM Play one game. |
300 REM Play one game. |
||
REM Switching if and only if Sw <> 0. |
310 REM Switching if and only if Sw <> 0. |
||
REM Returns 1 if the game is won, 0 otherwise. |
320 REM Returns 1 if the game is won, 0 otherwise. |
||
LET Car = INT(RND * 3) ! Randomly place car behind a door. |
330 LET Car = INT(RND * 3) ! Randomly place car behind a door. |
||
LET Player0 = INT(RND * 3) ! Player randomly chooses a door. |
340 LET Player0 = INT(RND * 3) ! Player randomly chooses a door. |
||
DO |
350 DO |
||
LET Monty = INT(RND * 3) ! Monty opens door revealing a goat. |
360 LET Monty = INT(RND * 3) ! Monty opens door revealing a goat. |
||
LOOP UNTIL (Monty <> Car) AND (Monty <> Player0) |
370 LOOP UNTIL (Monty <> Car) AND (Monty <> Player0) |
||
IF Sw <> 0 THEN ! Player switches TO remaining door. |
380 IF Sw <> 0 THEN ! Player switches TO remaining door. |
||
DO |
390 DO |
||
LET Player = INT(RND * 3) |
400 LET Player = INT(RND * 3) |
||
LOOP UNTIL (Player <> Player0) AND (Player <> Monty) |
410 LOOP UNTIL (Player <> Player0) AND (Player <> Monty) |
||
ELSE |
420 ELSE |
||
LET Player = Player0 ! Player sticks with original door. |
430 LET Player = Player0 ! Player sticks with original door. |
||
END IF |
440 END IF |
||
IF Player = Car THEN |
450 IF Player = Car THEN |
||
LET IsGameWon = 1 |
460 LET IsGameWon = 1 |
||
ELSE |
470 ELSE |
||
LET IsGameWon = 0 |
480 LET IsGameWon = 0 |
||
END IF |
490 END IF |
||
END FUNCTION |
500 END FUNCTION |
||
</syntaxhighlight> |
</syntaxhighlight> |
||
{{out}}(example) |
{{out}}(example) |