my @available = grep { $door[ $choice ] eq 'car' ? ( $_ != $choice ) : ( $doors[ $_ ] eq 'car' ) } 0 .. 2; #### 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_door; 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++; }