The Friday Fragment

It’s Friday, and time again for the Friday Fragment: our weekly programming-related puzzle.

This Week’s Fragment

Let’s continue our team ranking system based on win/loss records and strength of schedule (SOS):

Write code to calculate the RPI (Ratings Percentage Index) for a set of teams using the basic Wikipedia calculation.  Present the teams ordered by RPI.

To play along, post your code or URL as a comment, or send it via email.  If you’d like, you can build atop last week’s code and data.

Last Week’s Fragment – Solution

Last week’s puzzle introduced us to strength of schedule calculations for NCAA teams, or any team for that matter:

Write code to find the strength of schedule (SOS) for your favorite team using the basic Wikipedia calculation.  Start with a simple list of wins and losses, parse the results, and calculate the ratio.  For extra insight, compare it to other teams played.

I wrote a basic PHP Team class to parse the results, house the records and opponents, and calculate strength of schedule.  Here’s the gist of it:

   public function computeStrengthOfSchedule() {
      foreach ($this->getOpponents() as $opponent) {
          if (!is_null($team = self::getTeam($opponent))) {
              $opponentWins += $team->getWins();
              $opponentGames += $team->getWins() + $team->getLosses();
              foreach ($team->getOpponents() as $opponentOpponent) {
                  if (!is_null($team2 = self::getTeam($opponentOpponent))) {
                       $opponentOpponentWins += $team2->getWins();
                       $opponentOpponentGames += $team2->getWins() + $team2->getLosses();
                  }
              }
          }
      }
      if ($opponentGames > 0)
          $or = $opponentWins / $opponentGames;
      if ($opponentOpponentGames > 0)
          $oor = $opponentOpponentWins / $opponentOpponentGames;
      $this->setStrengthOfSchedule(((2*$or) + $oor)/3);
 }

You can run this at  http://derekwilliams.us/fragments/sos.html, which also includes links to the source code and 2010 NCAA Football data.

Share This:
  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • Google Buzz
  • RSS