My March Madness Bracket 2015
I’m just okay at picking basketball brackets. I usually finish somewhere in the upper third of the pack, IIRC.
However, it’s interesting to enter a bracket and watch the results come in (I almost never watch the games), so I usually make a bracket.
This year, I decided to use Coder’s Bracket to create my bracket.
If you haven’t already seen Coder’s Bracket, you should take a look. Basically,
you algorithmically generate your bracket using JavaScript. However, setting
that up manually is a lot of work. Fortunately, Coder’s Bracket has already done
that for you. You provide a function taking three object parameters (game
,
team1
, team2
) that will call team1.winsGame()
or team2.winsGame()
depending on what you determine. You start with a simple seedrules algorithm
and work from there.
My algorithm runs basically like this:

If it’s round 1 and the seed is greater than 5, it wins.

If it’s round 2 and the seed is greater than 2, it wins.

Otherwise, compute my extremely not scientific score for each team and the higher score wins.
My scoring algorithm takes into account strength of schedule (RPI), Field Goal %, Free Throw %, 3’s %, and Missed 3’s. I weight the values to make my bracket interesting (probably at the cost of correctness…).
There are probably a million and a half (exactly) problems with this algorithm, but it was fun to create.
You can see my bracket on Coder’s Bracket’s website.
I’ve included my algorithm below.
function(game, team1, team2){
// Seeds 5 and better don't lose in the first round
if (game.round == 5) {
if (team1.seed >= 5  team2.seed >= 5) {
if (team1.seed > team2.seed) {
team2.winsGame();
} else {
team1.winsGame();
}
}
}
// Seeds 2 and better don't lose in the second round
if (game.round == 4) {
if (team1.seed >= 3  team2.seed >= 3) {
if (team1.seed > team2.seed) {
team2.winsGame();
} else {
team1.winsGame();
}
}
}
// Everyone else goes through my TOTALLY SCIENTIFIC scoring algorithm
if (calcScore(team1) > calcScore(team2)) {
team1.winsGame();
} else {
team2.winsGame();
}
// Scoring algorithm
// Mostly objective, but I tweaked the weights to make my bracket interesting
// I'm using the RPI, apparently a ranking of schedule difficulty to make win percentage be somewhat fair.
// It's divided by two to lessen it's impact
//
// The numbers on the far side are the weights for each item
function calcScore(team) {
var myScore = 0;
myScore += team.rpi/2 * team.win_pct * 10; // Winning percentage
myScore += team.rpi/2 * team.field_goal_pct * 7; // Field Goal percentage
myScore += team.rpi/2 * team.free_throw_pct * 4; // Free Throw percentage
myScore += team.rpi/2 * team.three_point_pct * 5; // 3's percentage
// Penalty for missing 3's. About 10 per game on average, so I divided by 20 to lessen the impact.
myScore = team.rpi/2 * (team.threes_attempted  team.threes_made)/20 * 3;
return myScore;
}
}