The code for option 3 is quite confusing. It took me a while to figure out exactly what it was doing.
my @available = grep { $door[ $choice ] eq 'car' ? ( $_ != $choice ) : ( $doors[ $_ ] eq +'car' ) } 0 .. 2;
Hmm.. I guess that's not much clearer either.
Update: so I rewrote the code, and I think this is clearer:
for ( 1 .. 100_000 ) { my @door = 0 .. 2; my $car_door = int rand @door; my $my_pick = int rand @door; @door = grep { $_ != $my_pick } @door; ## Option 1: The host reveals a goat #my @available = grep { $_ != $car_door } @door; # Option 2: The host opens a random unopened door #my @available = @door; ## Option 3: The host tries to be malicious #my @available = @door; #@available = grep { $_ == $car_door } @door if $my_pick != $car_d +oor; my $opened = $available[ rand @available ]; if( $opened == $car_door ) { $my_pick == $car_door ? $skip_car++ : $skip_goat++; next; } ## Count my wins if I stick or switch $my_pick == $car_door ? $stick++ : $switch++; }
Makeshifts last the longest.
In reply to Re^8: Marilyn Vos Savant's Monty Hall problem
by Aristotle
in thread Marilyn Vos Savant's Monty Hall problem
by mutated
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |