Python pairing algorithm

mail@pastecode.io avatar
unknown
python
a year ago
1.2 kB
2
Indexable
Never
def pair_teams(teams, matches):
    # Получение списка команд, которые еще не были сопоставлены
    unpaired_teams = set(teams) - set(match.home_team for match in matches) - set(match.away_team for match in matches)
    
    # Получение списка команд, которые имеют ту же текущую статистику побед/поражений
    grouped_teams = {}
    for team in unpaired_teams:
        win_loss_record = (team.get_wins(matches), team.get_losses(matches))
        if win_loss_record not in grouped_teams:
            grouped_teams[win_loss_record] = []
        grouped_teams[win_loss_record].append(team)
    
    # Сопоставление команд из группы, если возможно
    pairings = []
    for teams in grouped_teams.values():
        while len(teams) >= 2:
            pairings.append((teams.pop(), teams.pop()))
    
    # Сопоставление оставшихся команд
    while len(unpaired_teams) >= 2:
        pairings.append((unpaired_teams.pop(), unpaired_teams.pop()))
    
    return pairings