Можно ли сформировать расписание соревнований с нечетным количеством команд? - PullRequest
0 голосов
/ 02 мая 2020

Я создал код для генерации оптимального расписания соревнований, которое должно удовлетворять некоторым условиям. Это все работает, но для четного числа команд, а не для нечетного числа. Я хотел бы знать, может ли кто-нибудь помочь мне исправить код, чтобы он работал для команд с нечетным числом.

Условия:

  1. совпадения не могут встречаться дважды в расписании
  2. команда может играть только один раз за раунд
  3. каждая команда должна играть против любой другой команды ровно один раз
  4. Запрещено, чтобы 2 команды из одного города играли дома в одном и том же round

Код ниже (я скопировал все это, так что мне совершенно ясно, что я делаю):

def construct_schedule_greedy(players):
    #""" Create a schedule for the players in the list and return it"""
    dic = self.teams
    clubs = list(dic.keys())
    s = []
    if len(players) % 2 == 1: # I need to know what to put after the if statement(i guess), 
    # so it satisfy a optimal schedule for odd number teams

    # manipulate map (array of indexes for list) instead of list itself
    # this takes advantage of even/odd indexes to determine home vs. away
    n = len(clubs)
    map = list(range(n))
    mid = n // 2
    for i in range(n-1):
        l1 = map[:mid]
        l2 = map[mid:]
        l2.reverse()
        round = []
        for j in range(mid):
            t1 = players[l1[j]]
            t2 = players[l2[j]]
            if j == 0 and i % 2 == 1:
                # flip the first match only, every other round
                # (this is because the first match always involves the last player in the list)
                round.append((t2, t1))
            else:
                round.append((t1, t2))
        s.append(round)
        # rotate list by n/2, leaving last element at the end
        map = map[mid:-1] + map[:mid] + map[-1:]
    return s

Чтобы пояснить, я добавлю код self.teams:

4 команды, ключи: команда, значение: город

{'Ajax': 'Amsterdam', 'Feyenoord': 'Rotterdam', 'PSV': 'Eindhoven', 'Sparta': 'Rotterdam'}

5 команд, ключи: команда, значение: город

..{'Ajax': 'Amsterdam', 'AZ': 'Alkmaar', 'Feyenoord': 'Rotterdam', 'PSV': 'Eindhoven', 'Sparta': 'Rotterdam'}

Заранее спасибо

...