- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力生成团队之间的比赛时间表。
条件是:
我已将我的日期替换为第 1-26 天作为关键字,并使用 ID 替换我的团队以进行更简单的说明。
结果示例:
[
{1: [((7, 8), (6, 9), (5, 10), (4, 11), (3, 12), (2, 13), (1, 14)])]},
{2: [((8, 1), (9, 7), (10, 6), (11, 5), (12, 4), (13, 3), (14, 2)])]},
{3: [((9, 8), (8, 9), (7, 10), (6, 11), (5, 12), (4, 13), (3, 14)])]},
...
]
我当前的代码如下所示:
from collections import deque, OrderedDict
teams_all = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
teams = teams_all[:int(len(teams_all)/2)]
matches = {}
for index, team in enumerate(teams):
# Remove self to not match against self.
opponents = list(teams_all)
opponents.pop(index)
# We reverse and rotate the opponents to give a
# different start opponent for each team.
opponents = deque(opponents)
opponents.reverse()
opponents.rotate(-index)
start_day = 1
end_day = 26
# We only loop 13 times instead of 26, because we schedule
# 2 matches at a time.
for i in range(0, 13):
opponent = opponents[i]
# Init lists
if matches.get(start_day, None) is None:
matches[start_day] = []
if matches.get(end_day, None) is None:
matches[end_day] = []
# We create both the home and away match at the same time
# but with different dates, opposite side of the schedule.
matches[start_day].insert(0, (team, opponent))
matches[end_day].insert(0, (opponent, team))
start_day += 2
end_day -= 2
# Print to console to check result.
od = OrderedDict(sorted(matches.items()))
for key, match in od.items():
print(key, match)
上面的代码生成的第一行是正确的,但接下来的行总是有 1 个重复(1 支球队在 1 天内打 2 场比赛)并且由于重复,一个球队完全缺失。
我很确定我的问题是我如何使用 opponents.rotate()
。但是我不确定我做错了什么。
最佳答案
这是一个简化的版本:
from pprint import pprint as pp
def make_day(num_teams, day):
# using circle algorithm, https://en.wikipedia.org/wiki/Round-robin_tournament#Scheduling_algorithm
assert not num_teams % 2, "Number of teams must be even!"
# generate list of teams
lst = list(range(1, num_teams + 1))
# rotate
day %= (num_teams - 1) # clip to 0 .. num_teams - 2
if day: # if day == 0, no rotation is needed (and using -0 as list index will cause problems)
lst = lst[:1] + lst[-day:] + lst[1:-day]
# pair off - zip the first half against the second half reversed
half = num_teams // 2
return list(zip(lst[:half], lst[half:][::-1]))
def make_schedule(num_teams):
"""
Produce a double round-robin schedule
"""
# number of teams must be even
if num_teams % 2:
num_teams += 1 # add a dummy team for padding
# build first round-robin
schedule = [make_day(num_teams, day) for day in range(num_teams - 1)]
# generate second round-robin by swapping home,away teams
swapped = [[(away, home) for home, away in day] for day in schedule]
return schedule + swapped
def main():
num_teams = int(input("How many teams? "))
schedule = make_schedule(num_teams)
pp(schedule)
if __name__ == "__main__":
main()
运行方式如下
How many teams? 14
[[(1, 14), (2, 13), (3, 12), (4, 11), (5, 10), (6, 9), (7, 8)],
[(1, 13), (14, 12), (2, 11), (3, 10), (4, 9), (5, 8), (6, 7)],
[(1, 12), (13, 11), (14, 10), (2, 9), (3, 8), (4, 7), (5, 6)],
[(1, 11), (12, 10), (13, 9), (14, 8), (2, 7), (3, 6), (4, 5)],
[(1, 10), (11, 9), (12, 8), (13, 7), (14, 6), (2, 5), (3, 4)],
[(1, 9), (10, 8), (11, 7), (12, 6), (13, 5), (14, 4), (2, 3)],
[(1, 8), (9, 7), (10, 6), (11, 5), (12, 4), (13, 3), (14, 2)],
[(1, 7), (8, 6), (9, 5), (10, 4), (11, 3), (12, 2), (13, 14)],
[(1, 6), (7, 5), (8, 4), (9, 3), (10, 2), (11, 14), (12, 13)],
[(1, 5), (6, 4), (7, 3), (8, 2), (9, 14), (10, 13), (11, 12)],
[(1, 4), (5, 3), (6, 2), (7, 14), (8, 13), (9, 12), (10, 11)],
[(1, 3), (4, 2), (5, 14), (6, 13), (7, 12), (8, 11), (9, 10)],
[(1, 2), (3, 14), (4, 13), (5, 12), (6, 11), (7, 10), (8, 9)],
[(14, 1), (13, 2), (12, 3), (11, 4), (10, 5), (9, 6), (8, 7)],
[(13, 1), (12, 14), (11, 2), (10, 3), (9, 4), (8, 5), (7, 6)],
[(12, 1), (11, 13), (10, 14), (9, 2), (8, 3), (7, 4), (6, 5)],
[(11, 1), (10, 12), (9, 13), (8, 14), (7, 2), (6, 3), (5, 4)],
[(10, 1), (9, 11), (8, 12), (7, 13), (6, 14), (5, 2), (4, 3)],
[(9, 1), (8, 10), (7, 11), (6, 12), (5, 13), (4, 14), (3, 2)],
[(8, 1), (7, 9), (6, 10), (5, 11), (4, 12), (3, 13), (2, 14)],
[(7, 1), (6, 8), (5, 9), (4, 10), (3, 11), (2, 12), (14, 13)],
[(6, 1), (5, 7), (4, 8), (3, 9), (2, 10), (14, 11), (13, 12)],
[(5, 1), (4, 6), (3, 7), (2, 8), (14, 9), (13, 10), (12, 11)],
[(4, 1), (3, 5), (2, 6), (14, 7), (13, 8), (12, 9), (11, 10)],
[(3, 1), (2, 4), (14, 5), (13, 6), (12, 7), (11, 8), (10, 9)],
[(2, 1), (14, 3), (13, 4), (12, 5), (11, 6), (10, 7), (9, 8)]]
关于python - 使用 Python 3 生成比赛时间表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44783767/
我有以下格式的一些数据: 薪水 代码及时 1690 09:03:00 1690 09:13:00 1690 09:07:00 1691 08:48:00 1691 08:52:00 1691 08:5
在基于 jsp 和 servelet 的 Web 应用程序中实现类似 cron 的调度程序的最佳方法是什么?使用“定时器服务”遇到了一个选项。任何其他替代方案或对计时器服务的任何评论? 提前致谢 沙米
好吧,我对 MySQL 和数据库总体来说还很陌生。我想在一段时间后对数据库进行更新。让我解释一下。 所以为了练习,我正在用 php 构建一个游戏,在这个游戏中你将能够升级东西。比如说一栋建筑,从1级升
我想为每个用户创建一个典型的学校时间表。 最终产品应如下所示: +----+---------+---------+-----------+----------+--------+ | h | Mo
我的表格: timetable +----+---------+-------+--------+---------+---------+------+ | id | user_id | s_day
我的网站涉及安排重复类(class)和事件。目前,我已经使用 php 和 javascript 构建了一个表,该表逐个时间段扫描我的 mysql 数据库,每天查看是否有安排的事件或时间段是否空闲。 它
我有一个关于日程安排的问题。我需要为约会制作一个时间表生成器。这是目前的情况。 P1 与 P2 有约会 A。 P3和P4有个约会B。 等等…… 预约 A 大约需要 15 分钟 B约需40分钟 (时长视
我有一个配置如下的 celery 时间表: CELERYBEAT_SCHEDULE = { "runs-every-30-seconds": { "task": "tasks.
我想在“每个月的最后一天 10:15”和“每个月的第一个星期日”运行 spring scheduler 作业 - 我在下面尝试过 - 但它在初始化 spring 上下文时出错: org.springf
如何在运行时检查 openmp 计划? 我使用并行循环和运行时计划编译我的代码 #pragma omp parallel for schedule(runtime) collapse(2) for(j
我已经制作了一个 Android 应用程序,并且它已成功编译,没有任何错误。但是当我在 Android 手机中运行应用程序时,它不会显示所需的输出。 这是我的 MainActivity.java: p
经过一天的痛苦,我终于将数据放入了日程安排事件中。 我现在尝试在单击事件时设置事件,它使用数据变量加载新页面。 这是 xhtml 还有 Java public void redirec
我正在使用 Primefaces Schedule 组件在我的网络应用程序中呈现事件。但我需要对他耍点小花招。对于每个呈现的事件,我需要显示一个包含事件详细信息的工具提示。使用 window.onlo
我想设置一个 crontab 表达式,每 20 分钟启动一次作业,并且它将按照时间表运行 周一至周五上午 7 点至 30 点至晚上 8 点,周六上午 7 点至 30 点至下午 4 点 到目前为止我有以
这是我根据用户输入创建表格的代码: const err = "the valid input is a number between 5 and 20, please refresh your pag
有没有办法在 HighCharts 中制作与此类似的时间线/时间表? https://developers.google.com/chart/interactive/docs/gallery/time
在关于 AES key 表的教程中,我看到 key 表的操作(旋转、rcon、s-box)应用于一个 4 字节的字。你能解释一下这个字从哪里来吗?我明白我从 128 位长的 key 中提取它。 key
SQL Server 作业/时间表 - 美国与英国夏令时调整 我们有一个基于英国的服务器,它需要在 16:30(美国中部时间 - 这可能看起来很奇怪,但这是因为一些数据的可用性)运行 SQL 代理作业
我有一个 quartz 作业,每天下午 3 点(服务器时间)运行。我想做的是让它在下午 3 点运行,但针对美国的每个时区。 quartz 作业会触发一封电子邮件给我的用户,我希望每个人都能在他们的时间
我想以一种非常简单的方式展示电视指南时间线,但我对此真的很陌生,所以我希望有人可以帮助我,我不想要太复杂的东西,而且我已经在网络上搜索并且我发现非常复杂的时间线,有很多我真的不需要的功能,我只想显示当
我是一名优秀的程序员,十分优秀!