def parse_game_score(game_score):
    """Parse a list of scores from a game into sets.

    We have two cases:

        - A team scores at least one point. Then we can simply look for when
          the next score is lower than the previous score.

        - A team scores no points. Then we have to look for a string of zeros
          that is as long as it takes to win a set. (In OU's case, this is
          _usually_ 25, but in the case of a 5th set, it is 15. In other
          competitions, it is higher or lower. We ignore this case and hope
          that OU isn't too garbage.)

    :game_score: List of scores in a game.
    :returns: A list of lists [set_1, set_2, ...], where each inner list is the
              sequence of scores for each set of the game. For example, set_2[3]
              is the Oglethorpe score after the fourth point-scoring play.

    """
    set_scores = []
    start_index = 0
    for k in range(1, len(game_score)):
        if game_score[k - 1] > game_score[k]:
            # The score has been reset, meaning that the set ended on the
            # previous score.
            set_scores.append(game_score[start_index:k])
            start_index = k

    # There is no final reset to signal the end of the game, so append the last
    # set.
    set_scores.append(game_score[start_index:])

    return set_scores