Created
June 9, 2016 12:34
-
-
Save msouth/efdd87c34067ff8d0c4a9e27f4b19c50 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env perl | |
use strict; | |
use warnings; | |
my $flips = shift @ARGV // 1000; | |
print "I'm going to flip a coin [$flips] times...\n"; | |
my @thresholds = (5, 10); | |
my $max; | |
my @results; | |
push @results, rand for 1..$flips; | |
my $t_run; | |
my $h_run; | |
my %count; | |
my %runs; | |
my $first_flip = shift @results; | |
my $last_flip = $first_flip > .5 ? 'h' : 't'; | |
if ($last_flip eq 'h') { | |
$h_run = 1; | |
} | |
else { | |
$t_run = 1; | |
} | |
foreach my $flip (@results) { | |
my $th = 't'; | |
$th = 'h' if $flip > .5; | |
$count{$th}++; | |
if ($t_run and $th eq 't') { | |
$t_run++; | |
} | |
if ($h_run and $th eq 'h') { | |
$h_run++; | |
} | |
if ($last_flip ne $th) { | |
# a run has just ended | |
$runs{$h_run}++ if $h_run; | |
$runs{$t_run}++ if $t_run; | |
$h_run = $t_run = 0; | |
$h_run = 1 if $th eq 'h'; | |
$t_run = 1 if $th eq 't'; | |
} | |
$last_flip = $th; | |
} | |
$runs{$h_run}++ if $h_run; | |
$runs{$t_run}++ if $t_run; | |
#print Dumper(\%runs); use Data::Dumper; | |
my @runs_in_order = sort {$a <=> $b} keys %runs; | |
foreach my $run_length (@runs_in_order) { | |
print "Got a [$run_length] run [$runs{$run_length}] times\n"; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
[mjsouth@msouth-ns-air ~ ]$ ./flip.pl
I'm going to flip a coin [1000] times...
Got a [1] run [213] times
Got a [2] run [136] times
Got a [3] run [74] times
Got a [4] run [32] times
Got a [5] run [14] times
Got a [6] run [4] times
Got a [7] run [4] times
Got a [8] run [3] times
Got a [9] run [1] times
Got a [10] run [1] times
[mjsouth@msouth-ns-air ~ ]$ ./flip.pl 50
I'm going to flip a coin [50] times...
Got a [1] run [14] times
Got a [2] run [7] times
Got a [3] run [3] times
Got a [4] run [2] times
Got a [5] run [1] times