Python алгоритм генерации набора команд, в которых игроки находятся с другими игроками равное количество раз - PullRequest
0 голосов
/ 04 апреля 2020

Я ищу написать python программу, которая принимает в качестве входных данных n (количество игроков) и разбивает их на две команды одинакового размера на число w (недель), так что каждый игрок с любым другим заданным игрок равное количество времени.

например, 6 игроков за 4 недели генерируют 4 пары команд ((1,2,3) (4,5,6), (1,3,5), ( 2,4,6), (1,5,6), (2,3,4), (1,4,6), (2,3,5)), так что 1 соответствует 2 как можно более 1 с 5 или любой другой парой игроков.

Нет различий между первой и второй командой, и обе команды всегда имеют одинаковый размер.

1 Ответ

0 голосов
/ 04 апреля 2020

В основном я использовал библиотеку под названием itertools для вычисления всех перестановок команд и просто проверил, были ли они уже выбраны или нет. Если у вас есть какие-либо вопросы, просто задавайте.



list_of_players = ["Mark", "Willy", "Josh", "Rob"]
N = len(list_of_players)
good = []
all = []
for perm in list(permutations(list_of_players)):
    if sorted(perm[:N//2]) not in all and sorted(perm[N // 2:]) not in all:
        good.append(tuple([sorted(perm[:N // 2]), sorted(perm[N // 2:])]))
        all.append(sorted(perm[:N // 2]))
        all.append(sorted(perm[N // 2:]))

for i in range(len(good)):
    print("week:",i+1,good[i])

Вывод:

week: 1 (['Mark', 'Willy'], ['Josh', 'Rob'])
week: 2 (['Josh', 'Mark'], ['Rob', 'Willy'])
week: 3 (['Mark', 'Rob'], ['Josh', 'Willy'])
...