#!/usr/bin/perl use strict; use warnings; ###################################################USER VARIABLES #define number of people, number of prizes, number of draws (> 5) my $people = 10; my $prizes = 8; my $draws = 22*2; #define total set of BINGO numbers #range of numbers my $range = 75; ####################################################INTERNAL/DEVELOPMENT VARIABLES my $bin = int $range/5; my @bins = ($bin, 2*$bin, 3*$bin, 4*$bin); #my @seq = @fudgedDrawSeq; my (@callseq, @noncallseq); #auxillary lists to build my @winstring; ####################################################MAIN EXECUTION 1 ###########-this part used to define metadata; cards outputed from metadata ###########-this metadata needed so Matt can have the draw sequence now. #my %ball; #hash containing $range BINGO balls THIS SHOULDN'T BE HERE #my @drawSeq; #for &defDrawSeq, draw sequence #&defDrawSeq; #define @drawSwq #my @seq = @drawSeq; #for modularity to &mkWinstring #print "DEBUG: @seq\n"; #print "CALL SEQUENCE:"; #for (0..($draws-1)){push( @callseq, $seq[$_] ); print "$seq[$_], ";} #print "\nNONCALL SEQUENCE:"; #for ($draws..($range-1)){push( @noncallseq, $seq[$_] ); print "$seq[$_], ";} #&mkWinstring;############################################################### #unless (&chkWinstring){die "\nplease rerun, internal randomization error"} #&mkCards; ####################################################FUNCTIONS 1 sub defDrawSeq (){ #define draw sequences (string of $draw numbers, randomized with hashtable lookup) { for (1..$range){ if ( $_ <= $bins[0] ){$ball{$_}="B-$_"} elsif ( $_ <= $bins[1] ){$ball{$_}="I-$_"} elsif ( $_ <= $bins[2] ){$ball{$_}="N-$_"} elsif ( $_ <= $bins[3] ){$ball{$_}="G-$_"} else{$ball{$_}="O-$_"}; } } for (keys %ball){ push (@drawSeq, $ball{$_}); #print "\'$ball{$_}\', "; }; } sub chkWinstring () { for (@winstring){ my @temp = split; my ($sum,$err); for (@temp){$sum++;} if ($sum != 5){return 1}else{return 0} } } sub mkWinstring (){ my (@b, @i, @n, @g, @o); for (0..($draws-1)){ local $_ = $seq[$_]; # print "DEBUG $_\n"; if (m,B,){push(@b,$_);next;} elsif(m,I,){push(@i,$_);next;} elsif(m,N,){push(@n,$_);next;} elsif(m,G,){push(@g,$_);next;} elsif(m,O,){push(@o,$_);next;} } print "\nSUBLISTS FOR CARD MAKING:\n"; print "***\n B: @b \nI: @i\nN: @n\nG: @g\nO: @o\n***\n"; for my $j (0..($prizes-1)) { my $winstring = $b[$j].' '.$i[$j].' '.$n[$j].' '.$g[$j].' '.$o[$j]."\n"; my @temp = split(/\s+/,$winstring); my $temp; for (@temp){$temp++;} #print "DEBUG $m\n";} if ($temp == 5){ push (@winstring, $winstring); }else{ print "ERROR $winstring"; } } print "WINSTRINGS:\n***\n@winstring***\n"; } sub mkCards{#needs global @winstring my( @wincard, @losecard); #print winning cards; print "WINNING CARDS:\n"; for my $k (1..$prizes) { my $l = "$winstring[$k-1]"; print "LINESTRING 0: $l"; for my $line (1..4) { my $linestring; my $pos = &getPos(); my $temp = &getDrawBall; print "$temp "; # if( $pos == 1 ){ $linestring = ";} # elsif( $pos == 2 ){ $linestring = "$b[$j] $i[$j] $n[$j] $g[$j] $o[$j]\n";} # elsif( $pos == 3 ){ $linestring = "$b[$j] $i[$j] $n[$j] $g[$j] $o[$j]\n";} # elsif( $pos == 4 ){ $linestring = "$b[$j] $i[$j] $n[$j] $g[$j] $o[$j]\n";} # print "\nLINESTRING $line: $linestring\n"; } } } sub getRand(){ while (1){ my $temp = int(1111*rand()/11); unless ($temp = 0) {return $temp; exit} } } sub getPos(){ while (1){ my $temp = int((1111*rand()/111)%5)+1; unless ($temp > 5) {return $temp; exit} } }