Anonymous user
Monty Hall problem: Difference between revisions
→{{header|Perl 6}}: modernize
(Added Elixir) |
(→{{header|Perl 6}}: modernize) |
||
Line 2,433:
=={{header|Perl 6}}==
{{works with|rakudo|2015-09-24}}
This implementation is parametric over the number of doors. [[wp:Monty_Hall_problem#Increasing_the_number_of_doors|Increasing the number of doors in play makes the superiority of the switch strategy even more obvious]].
<lang perl6>enum Prize <Car Goat>;
enum Strategy <Stay Switch>;
sub play (Strategy $strategy, Int :$doors = 3) returns Prize {
# Call the door with a car behind it door 0. Number the
# remaining doors starting from 1.
my Prize @doors = flat Car, Goat xx $doors - 1;
# The player chooses a door.
my Prize $initial_pick = @doors.splice(@doors.keys.pick,1)[0];
# Of the n doors remaining, the host chooses n - 1 that have
# goats behind them and opens them, removing them from play.
while @doors
@doors.splice($_,1)
when Goat
given @doors.keys.pick;
}
# If the player stays, they get their initial pick. Otherwise,
# they get whatever's behind the remaining door.
return $strategy === Stay ?? $initial_pick !! @doors[0];
}
constant TRIALS = 1000;
for 3, 10 -> $doors {
my %wins;
|