这将用于公平排名的团队选择(每个团队必须恰好拥有每个排名的一个元素)。 elegibe 玩家的一个例子是:
Rank 1:'Liam', 'Emma', 'Noah', 'Olivia', 'Ava'
Rank 2:'Ethan', 'Sophia', 'Isabella', 'Jackson', 'Mia'
Rank 3:'Aiden', 'Amelia', 'Lucas', 'Harper', 'Mason'
Rank 4:'Ella', 'Logan', 'Grace', 'James', 'Lily'
Rank 5:'Benjamin', 'Chloe', 'Jacob', 'Scarlett', 'Michael'
团队的众多示例之一是:
Team 1: 'Liam','Ethan','Aiden','Ella','Benjamin'
Team 2: 'Emma','Sophia','Amelia','Logan','Chloe'
Team 3: 'Noah','Isabella','Lucas','Grace','Jacob'
Team 4: 'Olivia','Jackson','Harper','James','Scarlett'
Team 5: 'Ava','Mia','Mason','Lily','Michael'
如何生成所有可能的团队组?
我尝试使用Python,但只能获得一组团队,而不是所有可能的组。
此代码生成所有 207,360,000 种不同的团队组合。 我们的想法是,我们将排名 1 的人固定为团队的“领导者”,然后对于每个其他排名,我们考虑该排名人员的所有排列,并根据排列将他们分配到团队。
import itertools
def teams(ranks):
choices = [[ranks[0]]]
for r in ranks[1:]:
choices.append(list(itertools.permutations(r)))
for p in itertools.product(*choices):
yield list(zip(*p))
ranks = [
['Liam', 'Emma', 'Noah', 'Olivia', 'Ava',],
['Ethan', 'Sophia', 'Isabella', 'Jackson', 'Mia',],
['Aiden', 'Amelia', 'Lucas', 'Harper', 'Mason'],
['Ella', 'Logan', 'Grace', 'James', 'Lily'],
['Benjamin', 'Chloe', 'Jacob', 'Scarlett', 'Michael'],
]
for ts in teams(ranks):
for i, t in enumerate(ts):
print('team %d: %s' % (i, ' '.join(['%-8s' % x for x in t])))
print()