use strict; use warnings; $|=1; # http://www.maa.org/devlin/devlin_04_10.html sub test { my ($md, $ms)= @_; my $v=0; my $bb=0; for my $d0 (1..$md) { for my $s0 (1..$ms) { for my $d1 (1..$md) { for my $s1 (1..$ms) { if ( ($s0==1 && $d0==1) || ($s1==1 && $d1==1)) { $v++; if ($s0==1 && $s1==1) { $bb++; } } } } } } return $bb/$v; } printf(" :"); for my $ms (1..15, 99) { printf(" %6d", $ms); } printf("\n"); my %x; for my $md (1 .. 7, 99, 999) { printf("%3d:", $md); for my $ms (1..15, 99) { $x{$md}{$ms}= test($md, $ms); printf(" %6.2f", $x{$md}{$ms}); } printf("\n"); } printf("---:"); for my $ms (1..15, 99) { printf(" %6.2f", $x{999}{$ms}/$x{1}{$ms}); } printf("\n");