You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

75 lines
1.5 KiB

use strict;
my $iterations = 3000; # How many games to play
my $verbosity = 0;
while (@ARGV) {
my $param = shift @ARGV;
$verbosity = 1 if $param eq '-v';
$iterations = int (shift @ARGV) if $param eq '-i';
}
sub verbose {
print $_[0]."\\n" if $verbosity;
}
my $stickers;
my $switchers;
print "Playing $iterations games...\\n\\n";
for(1..$iterations) {
my @items = qw(goat goat prize); # two goats, one prize
my @door;
while (@items) { # this puts the @items into the @door array in random order
push (@door, splice (@items, int rand @items, 1));
}
verbose ("Door 0: $door[0]; Door 1: $door[1]; Door 2: $door[2]");
my $contestant = int rand 3;
verbose ("Contestant chooses door $contestant.");
my $monty;
# If the contestant picked the prize, Monty picks another door by random.
if ($door[$contestant] eq 'prize') {
$monty = ($contestant + (int rand 2) + 1) % 3;
}
# Otherwise, he picks the other goat.
else {
$monty = $door [ ($contestant+1) % 3 ] eq 'goat' ? ($contestant+1) % 3 : ($contestant+2) % 3;
}
verbose ("Monty opens door $monty.");
# Now only two doors are open. If the sticker wins, the switcher loses and vice versa.
if ($door[$contestant] eq 'prize') {
verbose ("Sticker wins. Switcher loses.");
$stickers++;
} else {
verbose ("Sticker loses. Switcher wins.");
$switchers++;
}
}
print "Grand totals:
Sticker has won $stickers times
Switcher has won $switchers times
";