store current week number in database.

doh!
increment week number when valid result is submitted
explicitly define table for foreign keys in schema
return correct participation data.

Join was overwriting the 'id' field.
Unfortunately this uses two database calls. I'm sure it is possible to reduce to one with some more thought.
provide interpretation of result for determining which contestant to eliminate
fetch scores for season from database and organize by week
skeleton for score computation
instantiate and invoke scorer upon valid result submission.

This can easily be extracted when more season types and scorers are needed.
find exact and off-by-one matches
bonus for correctly guessing the first and/or last team(s).

Essentially just duplicates a match for first and last place teams.
compute score for individual participation.

slightly convoluted, but makes sense when compared with the original algorithm description
fetch and iterate over predictions for result's week
eliminate last contestant.

only happens if result indicates that it was an elimination week.
fetch scores from database for comparison with known values
fix manually computed error in test data