Monty Hall problem: Difference between revisions
Content added Content deleted
m (→{{header|JavaScript}}: minor correction) |
No edit summary |
||
Line 1,697: | Line 1,697: | ||
Strategy keep: 34.410% |
Strategy keep: 34.410% |
||
Strategy switch: 66.430% |
Strategy switch: 66.430% |
||
=={{header|EMal}}== |
|||
<syntaxhighlight lang="emal"> |
|||
type Prize |
|||
enum do int GOAT, CAR end |
|||
type Door |
|||
model |
|||
int id |
|||
Prize prize |
|||
new by int =id, Prize =prize do end |
|||
fun asText = text by block do return "(id:" + me.id + ", prize:" + me.prize.value + ")" end |
|||
end |
|||
type Player |
|||
model |
|||
Door choice |
|||
fun choose = void by List doors |
|||
me.choice = doors[random(3)] |
|||
end |
|||
end |
|||
type Monty |
|||
model |
|||
fun setPrize = void by List doors, Prize prize |
|||
doors[random(3)].prize = prize |
|||
end |
|||
end |
|||
type MontyHallProblem |
|||
int ITERATIONS = 1000000 |
|||
Map counter = text%int[ "keep" => 0, "switch" => 0 ] |
|||
writeLine("Simulating " + ITERATIONS + " games:") |
|||
for int i = 0; i < ITERATIONS; i++ |
|||
if i % 100000 == 0 do write(".") end |
|||
^|three numbered doors with no cars for now|^ |
|||
List doors = Door[Door(1, Prize.GOAT), Door(2, Prize.GOAT), Door(3, Prize.GOAT)] |
|||
Monty monty = Monty() # set up Monty |
|||
monty.setPrize(doors, Prize.CAR) # Monty randomly sets the car behind one door |
|||
Player player = Player() # set up the player |
|||
player.choose(doors) # the player makes a choice |
|||
^|here Monty opens a door with a goat; |
|||
|behind the ones that are still closed there is a car and a goat, |
|||
|so that the player *always* wins by keeping or switching. |
|||
|^ |
|||
counter[when(player.choice.prize == Prize.CAR, "keep", "switch")]++ |
|||
end |
|||
writeLine() |
|||
writeLine(counter) |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
Simulating 1000000 games: |
|||
.......... |
|||
[keep:332376,switch:667624] |
|||
</pre> |
|||
=={{header|Erlang}}== |
=={{header|Erlang}}== |