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: stergios@leland.Stanford.EDU (Stergios) Subject: Baseball Division Picker Program Message-ID: Sender: news@leland.Stanford.EDU (Mr News) Reply-To: stergios@kt22.Stanford.EDU 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 // stergios@kt22.Stanford.EDU #!/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 ### stergios@kt22.Stanford.EDU $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 stergios@kt22.Stanford.EDU