Monty Hall problem: Difference between revisions
Content added Content deleted
m (→{{header|XPL0}}: Output statements together.) |
(Added Modula-2.) |
||
Line 3,136: | Line 3,136: | ||
<syntaxhighlight lang="maxscript">Stay strategy:33.77% |
<syntaxhighlight lang="maxscript">Stay strategy:33.77% |
||
Switch strategy:66.84%</syntaxhighlight> |
Switch strategy:66.84%</syntaxhighlight> |
||
=={{header|Modula-2}}== |
|||
{{trans|XPL0|<code>CARDINAL</code> (unsigned integer) used instead of integer.}} |
|||
{{works with|ADW Modula-2|any (Compile with the linker option ''Console Application'').}} |
|||
<syntaxhighlight lang="modula2"> |
|||
MODULE MontyHallProblem; |
|||
FROM STextIO IMPORT |
|||
WriteLn, WriteString; |
|||
FROM RandomNumbers IMPORT |
|||
Randomize, Rnd; |
|||
FROM SRealIO IMPORT |
|||
WriteFixed; |
|||
CONST |
|||
NGames = 10000; (* number of games simulated *) |
|||
VAR |
|||
NWins, Game: CARDINAL; |
|||
PROCEDURE IsGameWon(Sw: BOOLEAN): BOOLEAN; |
|||
(* Play one game. *) |
|||
VAR |
|||
Car, Player, Player0, Monty: CARDINAL; |
|||
BEGIN |
|||
Car := Rnd(3); (* Randomly place car behind a door. *) |
|||
Player0 := Rnd(3); (* Player randomly chooses a door. *) |
|||
REPEAT |
|||
Monty := Rnd(3); (* Monty opens door revealing a goat. *) |
|||
UNTIL (Monty <> Car) AND (Monty <> Player0); |
|||
IF Sw THEN |
|||
(* Player switches to remaining door. *) |
|||
REPEAT |
|||
Player := Rnd(3); |
|||
UNTIL (Player <> Player0) AND (Player <> Monty) |
|||
ELSE |
|||
Player := Player0 (* Player sticks with original door. *) |
|||
END; |
|||
RETURN (Player = Car); |
|||
END IsGameWon; |
|||
BEGIN |
|||
Randomize(0); |
|||
NWins := 0; |
|||
FOR Game := 0 TO NGames DO |
|||
IF IsGameWon(FALSE) THEN |
|||
NWins := NWins + 1 |
|||
END |
|||
END; |
|||
WriteString('NOT switching doors wins car in '); |
|||
WriteFixed(FLOAT(NWins) / FLOAT(NGames) * 100.0, 1, 4); |
|||
WriteString('% of games.'); |
|||
WriteLn; |
|||
NWins := 0; |
|||
FOR Game := 0 TO NGames DO |
|||
IF IsGameWon(TRUE) THEN |
|||
NWins := NWins + 1 |
|||
END |
|||
END; |
|||
WriteString('But switching doors wins car in '); |
|||
WriteFixed(FLOAT(NWins) / FLOAT(NGames) * 100.0, 1, 4); |
|||
WriteString('% of games.'); |
|||
WriteLn; |
|||
END MontyHallProblem. |
|||
</syntaxhighlight> |
|||
{{out}}(example) |
|||
<pre> |
|||
NOT switching doors wins car in 33.4% of games. |
|||
But switching doors wins car in 66.5% of games. |
|||
</pre> |
|||
=={{header|NetRexx}}== |
=={{header|NetRexx}}== |