#!/usr/bin/perl -w use strict; #program to generate a web page that reports on the various #distributions of tossing three die, one red, one green, one blue. my $num_toss; my $outtext; my ($i, $j, $k, $r, $b, $g, $t); my (@Red,@Blue,@Green); my (@RB,@RG,@BG); my (@RBpair, @RGpair, @BGpair); my (@RBGraw, @RBGsum, @RBGtheory); my $cr=''; my $cb=''; my $cg=''; my $cf=''; my @pt=(0,0,1,2,3,4,5,6,5,4,3,2,1); #initialize counters for ($i=1; $i<=6; $i++) { $Red[$i]=0; $Blue[$i]=0; $Green[$i]=0; } for ($i=1; $i<=12; $i++) { $RB[$i]=0; $RG[$i]=0; $BG[$i]=0; } for ($i=0; $i<=35; $i++) { $RBpair[$i]=0; $RGpair[$i]=0; $BGpair[$i]=0; } for ($i=0; $i<=215; $i++) {$RBGraw[$i]=0;} for ($i=0; $i<=18; $i++) {$RBGsum[$i]=0; $RBGtheory[$i]=0; } for ($i=1; $i<=6; $i++) { for ($j=1; $j<=6; $j++) { for ($k=1; $k<=6; $k++) {$t=$i+$j+$k; $RBGtheory[$t]++; } } } #just check the values if( 1>4 ) { $t=0; for ($i=3; $i<=18; $i++) {$t+=$RBGtheory[$i]; print "$i $RBGtheory[$i] $t\n"; } } print "Enter the number of tosses for the three die: "; $num_toss=; chomp $num_toss; #toss the die for ($i=1; $i<=$num_toss; $i++) { $r=int(rand()*6)+1; $g=int(rand()*6)+1; $b=int(rand()*6)+1; #update counts; $Red[$r]++; $Blue[$b]++; $Green[$g]++; #consider as pairs $t=$r+$b; $RB[$t]++; $t=$r+$g; $RG[$t]++; $t=$b+$g; $BG[$t]++; # consider as raw pairs ... change to base 6 for the index to the array $t=($r-1)*6+$b-1; $RBpair[$t]++; $t=($r-1)*6+$g-1; $RGpair[$t]++; $t=($b-1)*6+$g-1; $BGpair[$t]++; # consider as raw triple ... change to base 6 for the index to the array $t=($r-1)*36+($b-1)*6+$g-1; $RBGraw[$t]++; # consider as the sum of three $t=$r+$b+$g; $RBGsum[$t]++; } open(OUTFILE,">tossreport$num_toss.htm" )|| die("could not open the output file."); print OUTFILE "\n"; print OUTFILE ''; print OUTFILE "\n\nReport of $num_toss tosses of 3 dice\n"; print OUTFILE "

Report of $num_toss tosses of 3 dice

\n"; print OUTFILE "The following tables report the results of rolling three dice, one $cr Red $cf,"; print OUTFILE " one $cb Blue $cf, and one $cg Green $cf, $num_toss times. This page was produced "; print OUTFILE ' by a run of the Perl script toss_die.pl '; print OUTFILE '(an alternate version is provided in a text file, toss_die.txt, which, '; print OUTFILE " if downloaded, will then need to be renamed with the .pl extension). If you have "; print OUTFILE "Perl installed on your computer you can download the script and run it again to generate "; print OUTFILE "new tables for your desired number of tosses.

\n"; print OUTFILE "\n\n"; print OUTFILE "\n"; print OUTFILE ""; print OUTFILE ""; print OUTFILE ""; print OUTFILE ""; print OUTFILE ""; print OUTFILE "\n"; $outtext=""; $outtext.=""; $outtext.=""; $outtext.=""; $outtext.=""; $outtext.="\n"; print OUTFILE $outtext; for ($i=1; $i<=6; $i++) { $outtext=""; $t=$Red[$i]+$Blue[$i]+$Green[$i]; $outtext.=""; $outtext.=""; $outtext.=""; $outtext.=""; $outtext.=""; $outtext.=""; $outtext.="\n"; print OUTFILE $outtext; } print OUTFILE "
\n"; print OUTFILE "Considering single die
  $cr Red$cf$cb Blue$cf$cg Green$cfTotal Theory
 showing  $cr # $cf $cr % $cf $cb # $cf $cb % $cf $cg # $cf $cg % $cf # % %
$i$cr $Red[$i] $cf$cr".sprintf("%.3f",(100*$Red[$i]/$num_toss))."$cf$cb $Blue[$i] $cf$cb".sprintf("%.3f",(100*$Blue[$i]/$num_toss))."$cf$cg $Green[$i] $cf$cg".sprintf("%.3f",(100*$Green[$i]/$num_toss))."$cf$t".sprintf("%.3f",(100*$t/($num_toss*3)))."".sprintf("%.3f",100/6)."

\n"; print OUTFILE "\n\n"; print OUTFILE "\n"; print OUTFILE ""; print OUTFILE ""; print OUTFILE ""; print OUTFILE ""; print OUTFILE ""; print OUTFILE "\n"; $outtext=""; $outtext.=""; $outtext.=""; $outtext.=""; $outtext.=""; $outtext.="\n"; print OUTFILE $outtext; for ($i=0; $i<=35; $i++) { $outtext=""; $outtext.="\n"; #need to convert back from base 6 $j=$i%6+1; $k=int($i/6)+1; $outtext.=""; $outtext.="\n"; $outtext.="\n"; $outtext.="\n"; $t=$RBpair[$i]+$RGpair[$i]+$BGpair[$i]; $outtext.="\n"; $outtext.=""; $outtext.="\n"; print OUTFILE $outtext; } print OUTFILE "
\n"; print OUTFILE "Consider as raw pairs
  $cr Red$cf $cb Blue $cf$cr Red $cf $cg Green $cf$cb Blue $cf $cg Green$cfTotal Theory
 values  # % # % # % # % %
$k $j$RBpair[$i]".sprintf("%.3f",(100*$RBpair[$i]/$num_toss))."$RGpair[$i]".sprintf("%.3f",(100*$RGpair[$i]/$num_toss))."$BGpair[$i]".sprintf("%.3f",(100*$BGpair[$i]/$num_toss))."$t".sprintf("%.3f",(100*$t/(3*$num_toss)))."".sprintf("%.3f",100/36)."

\n"; print OUTFILE "\n\n"; print OUTFILE "\n"; print OUTFILE ""; print OUTFILE ""; print OUTFILE ""; print OUTFILE ""; print OUTFILE ""; print OUTFILE "\n"; $outtext=""; $outtext.=""; $outtext.=""; $outtext.=""; $outtext.=""; $outtext.="\n"; print OUTFILE $outtext; for ($i=2; $i<=12; $i++) { $outtext=""; $outtext.="\n"; $outtext.=""; $outtext.="\n"; $outtext.="\n"; $outtext.="\n"; $t=$RB[$i]+$RG[$i]+$BG[$i]; $outtext.="\n"; $outtext.=""; $outtext.="\n"; print OUTFILE $outtext; } print OUTFILE "
\n"; print OUTFILE "Consider as sum of pairs
  $cr Red$cf $cb Blue $cf$cr Red $cf $cg Green $cf$cb Blue $cf $cg Green$cfTotal Theory
 total  # % # % # % # % %
$i$RB[$i]".sprintf("%.3f",(100*$RB[$i]/$num_toss))."$RG[$i]".sprintf("%.3f",(100*$RG[$i]/$num_toss))."$BG[$i]".sprintf("%.3f",(100*$BG[$i]/$num_toss))."$t".sprintf("%.3f",(100*$t/(3*$num_toss)))."".sprintf("%.3f",100*$pt[$i]/36)."

\n"; $outtext="

\n"; $outtext.=""; $r=1; $b=1; $g=0; for ($i=0; $i<=215; $i++) { $g++; if ($g == 7) { $g=1; $b++; if ($b == 7) { $b=1; $r++ } } $outtext.=""; $outtext.="\n"; } $outtext.="
Consider as raw triplet
values # % Theory %
$cr $r $cf $cb $b $cf $cg $g $cf $RBGraw[$i] "; $outtext.=sprintf("%.4f",100*$RBGraw[$i]/$num_toss)."".sprintf("%.4f",100/216)."

\n"; print OUTFILE $outtext; $outtext="

\n"; $outtext.=""; for ($i=3; $i<=18; $i++) {$outtext.=""; $outtext.="\n"; } $outtext.="
Consider as the sum of all three
sum # % Theory %
$i $RBGsum[$i] "; $outtext.=sprintf("%.4f",100*$RBGsum[$i]/$num_toss)."".sprintf("%.4f",100*$RBGtheory[$i]/216)."

\n"; print OUTFILE $outtext; print OUTFILE "\n"; close OUTFILE;