Article 2389 of comp.lang.perl:
Xref: feenix.metronet.com rec.sport.baseball:5975 comp.lang.perl:2389
Newsgroups: su.sports,rec.sport.baseball,comp.lang.perl
Path: feenix.metronet.com!news.utdallas.edu!wupost!howland.reston.ans.net!agate!headwall.Stanford.EDU!nntp.Stanford.EDU!nntp!stergios
From:
[email protected] (Stergios)
Subject: Baseball Division Picker Program
Message-ID: <
[email protected]>
Sender:
[email protected] (Mr News)
Reply-To:
[email protected]
Organization: DSO, Stanford University
Date: 24 Apr 93 11:41:30
Lines: 144
Here's a perl program to pick the division standings for Major League
Baseball.
// sm
// Stergios Marinopoulos Sat Apr 24 11:38:57 1993
//
[email protected]
#!/usr/local/bin/perl
### a perl program to pick the division standings for Major League Baseball
### this program rips right through the al east and al west, but really
### slows down in the national league due to the expansion team odds
### being so high. You could always reduce the odds to something like
### 1000 to 1, instead of 10,000 to 1. The real odds were 100M to 1!
### The data used in the following program was Danny Sheirdan's odds
### against winning the AL & NL pennants and World Series as they appeared
### in USA today on Monday April 5 1993. The odds were listed by league
### and not by division. I simply broke the list into divisons without
### changing the odds, and almost certainly introducing errors. The
### expansion team odds where actually 100M to 1. I reduced them to 10000
### to 1 in the interest of speed. Reducing them to 1000 to 1 would
### probably be good enough.
### sm
### Stergios Marinopoulos Sat Apr 24 11:10:50 1993
###
[email protected]
$nl = "\n" ;
### define the associative arrays for each division, where the key
### is the team name, and the value is the that team's odds to win the
### pennant in their league.
%alw = ('Chicago', '4',
'Minnesota', '5',
'Oakland', '10',
'Kansas City', '12',
'Texas', '15',
'Seattle', '50',
'California', '100'
) ;
%ale = ('Toronto', '3',
'Baltimore', '5',
'New York', '7',
'Milwaukee', '15',
'Cleveland', '20',
'Boston', '25',
'Detroit', '75'
) ;
%nlw = ('Atlanta', '2',
'Cincinnati', '4',
'Houston', '15',
'San Francisco','20',
'San Diego', '25',
'Los Angeles', '25',
'Colorado', '10000'
) ;
%nle = ('Montreal', '6',
'New York', '7',
'Philadelphia', '8',
'St. Louis', '10',
'Chicago', '30',
'Pittsburgh', '30',
'Florida', '10000'
) ;
srand(time|$$) ;
## define a list with the names of the divisions
@divNames = ("AL EAST", "AL WEST", "NL EAST", "NL WEST") ;
## define a list with pointers to the division associative arrays
@divPointers = (*ale, *alw, *nle, *nlw) ;
### pick the divison standings
foreach $div (@divNames) {
local(*division) = shift(@divPointers) ;
print $nl, $div, $nl ;
foreach $t (0..6) {
## it was easier to fill up the hat each time, rather
## than sift out a team that was just picked.
&fillUpHat ;
$pick = &pickATeam ;
printf "%-3d $pick\n", 7 - $t ;
## since this team has been picked,remove it division
undef $division{$pick} ;
}
}
### that's it. we're out of here.
exit 0 ;
sub fillUpHat {
# fill up a list ("HAT") with the names of the teams
# remaining in the division. Each team's name is entered
# their "odds" number of times.
@list = () ;
foreach $team (keys %division) {
grep(push(@list, $team), 0..$division{$team}) ;
}
}
sub pickATeam {
@wlist = @list ; # The work list
@rlist = () ; # The random list
## first randomize the list, i.e. get the air blowing
## in the ping pong ball container.
while (1) {
$i = int(rand($#wlist)) ;
push(@rlist, $wlist[$i]) ;
splice(@wlist, $i, 1) ;
if($#wlist == 0) {
push(@rlist, @wlist) ;
last ;
}
}
## now pick the team
$rlist[int(rand($#rlist))] ;
}
--
--------------------------
Stergios Marinopoulos
[email protected]