sub play_two_seeds { my $seed1 = shift; my $seed2 = shift; my $outcome = rand(); if ($seed1 > $seed2) { my $tempseed = $seed1; $seed1 = $seed2; $seed2 = $tempseed; } if ($odds{$seed1.$seed2} eq ""){ return $seed1; } if ($outcome < $odds{$seed1.$seed2}){ return $seed1; } else { return $seed2; } } sub fill_next_level { my $region = shift; my @matchups = @_; my @NextLevel; while (scalar(@matchups) > 1){ my $seed1 = shift(@matchups); my $seed2 = shift(@matchups); my $winner = play_two_seeds($seed1, $seed2); print $teams{$region + $winner}."\t"; push(@NextLevel, $winner); } print "\n"; return @NextLevel; } sub fill_bracket { my $region = shift; my @NextLevel = @RegionBracket; while (scalar(@NextLevel) > 1){ @NextLevel = fill_next_level($region, @NextLevel); } return $NextLevel[0]; } # 1xx = Midwest Seed $MIDWEST = 100; # 2xx = West Seed $WEST = 200; # 3xx = East Seed $EAST = 300; # 4xx = South Seed $SOUTH = 400; %odds = ( 116 => 1, 215 => 0.952, 314 => 0.833, 413 => 0.798, 512 => 0.679, 611 => 0.702, 710 => 0.607, 89 => 0.452, 18 => 0.763, 19 => 0.935, 45 => 0.556, 412 => 0.545, 513 => 0.833, 1213 => 0.8, 36 => 0.5, 311 => 0.682, 614 => 0.818, 1114 => 1, 27 => 0.680, 210 => 0.533, 715 => 1, 1015 => 1, 14 => 0.7, 15 => 0.815, 112 => 1, 113 => 1, 48 => 0.4, 49 => 1, 58 => 0, 59 => 0, 812 => 0, 813 => 1, 23 => 0.625, 26 => 0.762, 211 => 0.875, 37 => 0.6, 310 => 0.7, 67 => 0.5, 610 => 0.667, 711 => 0, 714 => 1, 1014 => 1, 12 => 0.536, 13 => 0.5, 16 => 0.75, 17 => 1, 110 => 1, 111 => 0.667, 24 => 0.5, 25 => 0, 28 => 0.667, 212 => 1, 34 => 0.667, 35 => 0.5, 38 => 1, 39 => 1, 46 => 0.667, 47 => 1, 410 => 1, 510 => 1, 68 => 0, 78 => 0 ); %oddFF = ( 11 => 0.5, 12 => 0.5, 21 => 0.5, 13 => 0.2, 31 => 0.8, 14 => 0.8, 41 => 0.2, 15 => 1, 51 => 0, 18 => 1, 81 => 0, 22 => 0.5, 23 => 0.6, 32 => 0.4, 25 => 0, 52 => 1, 26 => 0.5, 62 => 0.5, 28 => 0, 82 => 1, 211 => 1, 112 => 0, 34 => 1, 43 => 0, 45 => 1, 54 => 0, 46 => 0, 64 => 1, 58 => 1, 85 => 0 ); %oddsC = ( 11 => 0.5, 12 => 0.8, 21 => 0.2, 13 => 1, 31 => 0, 14 => 0.5, 41 => 0.5, 15 => 1, 51 => 0, 16 => 0.5, 61 => 0.5, 18 => 0, 81 => 1, 23 => 0.75, 32 => 0.25, 24 => 0.5, 42 => 0.5, 25 => 0, 52 => 1, 26 => 0.5, 62 => 0.5, 28 => 0, 82 => 1, 33 => 0.5, 34 => 1, 43 => 0, 35 => 0.5, 53 => 0.5, 36 => 0.5, 63 => 0.5, 38 => 1, 83 => 0, 45 => 1, 54 => 0, 46 => 0, 64 => 1, 48 => 0.4, 84 => 0.6, 56 => 0.545, 65 => 0.455, 58 => 0, 85 => 1, 68 => 0, 86 => 1 ); %teams = ( 101 => "Kansas", 102 => "Ohio St", 103 => "Georgetown", 104 => "Maryland", 105 => "Michigan St", 106 => "Tennessee", 107 => "Oklahoma St", 108 => "UNLV", 109 => "N. Iowa", 110 => "Georgia Tech", 111 => "San Diego St", 112 => "New Mexico St", 113 => "Houston", 114 => "Ohio", 115 => "UC Santa Barbara", 116 => "Lehigh", 201 => "Syracuse", 202 => "Kansas St", 203 => "Pittsburgh", 204 => "Vanderbilt", 205 => "Butler", 206 => "Xavier", 207 => "BYU", 208 => "Gonzaga", 209 => "Florida St", 210 => "Florida", 211 => "Minnesota", 212 => "UTEP", 213 => "Murray St", 214 => "Oakland", 215 => "North Texas", 216 => "Vermont", 301 => "Kentucky", 302 => "West Virginia", 303 => "New Mexico", 304 => "Wisconsin", 305 => "Temple", 306 => "Marquette", 307 => "Clemson", 308 => "Texas", 309 => "Wake Forest", 310 => "Missouri", 311 => "Washington", 312 => "Cornell", 313 => "Wofford", 314 => "Montana", 315 => "Morgan St", 316 => "East Tenn St", 401 => "Duke", 402 => "Villanova", 403 => "Baylor", 404 => "Purdue", 405 => "Texas A&M", 406 => "Notre Dame", 407 => "Richmond", 408 => "California", 409 => "Louisville", 410 => "St Marys", 411 => "Old Dominion", 412 => "Utah St", 413 => "Siena", 414 => "Sam Houston", 415 => "Robert Morris", 416 => "Open Road Winner" ); @RegionBracket = (1, 16, 8, 9, 5, 12, 4, 13, 6, 11, 3, 14, 7, 10, 2, 15); @final_four; print "Midwest region: \n"; $final_four[$MIDWEST/100] = fill_bracket($MIDWEST); print "\nWest region: \n"; $final_four[$WEST/100] = fill_bracket($WEST); print "\nEast region: \n"; $final_four[$EAST/100] = fill_bracket($EAST); print "\nSouth region: \n"; $final_four[$SOUTH/100] = fill_bracket($SOUTH); print "\n The final four is:\n"; print $teams{$MIDWEST + $final_four[$MIDWEST/100]}."\t".$teams{$WEST + $final_four[$WEST/100]}."\t".$teams{$EAST + $final_four[$EAST/100]}."\t".$teams{$SOUTH + $final_four[$SOUTH/100]}."\n\n"; #Funkiness has to happen because in the final four, two teams can have the same seed print "Midwest and West final goes to: "; $outcome = rand(); $probability = $oddsFF{$final_four[$MIDWEST/100].$final_four[$WEST/100]}; if ($probability eq ""){ if ($final_four[$MIDWEST/100] < $final_four[$WEST/100]){ $probability = $odds{$final_four[$MIDWEST/100].$final_four[$WEST/100]}; } elsif ($final_four[$MIDWEST/100] > $final_four[$WEST/100]){ $probability = 1 - $odds{$final_four[$WEST/100].$final_four[$MIDWEST/100]}; } else { $probability = 0.5; } } if ($outcome < $probability){ $finalrank1 = $final_four[$MIDWEST/100]; $finalregion1 = $MIDWEST; } else { $finalrank1 = $final_four[$WEST/100]; $finalregion1 = $WEST; } print $teams{$finalregion1 + $finalrank1}."\n"; print "East and South final goes to: "; $outcome = rand(); $probability = $oddsFF{$final_four[$EAST/100].$final_four[$SOUTH/100]}; if ($probability eq ""){ if ($final_four[$EAST/100] < $final_four[$SOUTH/100]){ $probability = $odds{$final_four[$EAST/100].$final_four[$SOUTH/100]}; } elsif ($final_four[$EAST/100] > $final_four[$SOUTH/100]){ $probability = 1 - $odds{$final_four[$SOUTH/100].$final_four[$EAST/100]}; } else { $probability = 0.5; } } if ($outcome < $probability){ $finalrank2 = $final_four[$EAST/100]; $finalregion2 = $EAST; } else { $finalrank2 = $final_four[$SOUTH/100]; $finalregion2 = $SOUTH; } print $teams{$finalregion2 + $finalrank2}."\n\n"; print "The overall winner is: "; $outcome = rand(); $probability = $oddsC{$finalrank1.$finalrank2}; if ($probability eq ""){ $probability = $oddsFF{$finalrank1.$finalrank2}; if ($probability eq ""){ if ($finalrank1 < $finalrank2){ $probability = $odds{$finalrank1.$finalrank2}; } elsif ($finalrank1 > $finalrank2){ $probability = 1 - $odds{$finalrank2.$finalrank1}; } else { $probability = 0.5; } } } if ($outcome < $oddsC{$finalrank1.$finalrank2}){ $winnerrank = $finalrank1; $winnerregion = $finalregion1; } else { $winnerrank = $finalrank2; $winnerregion = $finalregion2; } print $teams{$winnerregion + $winnerrank}."\n"; ;