Monty Hall problem: Difference between revisions

Line 2,131:
 
=={{header|Perl 6}}==
{{works with|Rakudo|#22 "Thousand Oaks"}}
 
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>subenum removePrize (@a<Car is rw, Int $i) {Goat>;
my $temp = @a[$i];
@a = @a[0 ..^ $i], @a[$i ^..^ @a];
return $temp;
}
 
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 = Car, Goat xx $doors - 1;
 
# The player chooses a door.
my Prize $initial_pick = remove @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.
remove @doors, .splice($_,1)
for pick @doors.elems - 1, grep { @doors[$_] == Goat }, keys @doors;
 
# 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 = 1001000;
 
for 3, 10 -> $doors {
Line 2,173 ⟶ 2,169:
}
}</lang>
{{out}}
 
Sample output:
<pre>With 3 doors:
Staying wins 3431% of the time.
Switching wins 6468% of the time.
With 10 doors:
Staying wins 149% of the time.
Switching wins 9490% of the time.</pre>
 
A hundred trials generally isn't enough to get good numbers, but as of release #22, Rakudo is quite slow and may segfault while executing a long-running program.
 
=={{header|PHP}}==
Anonymous user