Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Составление календаря футбольного чемпионата на Python

#python #python_3x #алгоритм


Суть задачи такова:
Пусть у нас есть чётное число N команд. Требуется составить календарь игр, который
будет удовлетворять следующим условиям: 


Команды играют по круговой системе (каждая играет с каждой)
Календарь поделен на туры (которых, очевидно, будет N-1)
Каждая команда играет строго одну игру за тур


Пишу сюда впервые, изучаю Python совсем недавно. На первый взгляд задача очень простая,
но корректно накодить у меня не получается. Заранее спасибо за ответы!
    


Ответы

Ответ 1



Реализация на Питоне round-robin алгоритма из @MBo ответа: import collections teams = "ABCDEF" n = len(teams) tail = collections.deque(teams[1:n//2] + teams[n//2:][::-1]) for _ in range(len(tail)): print_round(teams[0], *tail) tail.rotate() где print_round() показывает текущий тур: def print_round(*teams, sep='\n'): n = len(teams) print(*teams[:n//2]) print(*teams[n//2:][::-1]) print(end=sep) Результат A B C D E F A D B E F C A E D F C B A F E C B D A C F B D E  

Ответ 2



Для организации такого календаря есть round-robin tournament алгоритм. Выстраиваем команды в две строки A B C D E F В каждом туре команда из верхней строки играет с соответствующей нижней. Для перехода к следующему туру циклически сдвигаем все команды, кроме первой (её положение всегда фиксировано) A B -> C ^ | / v D <- E <- F Получается A D B E F C Повторяем сдвиги N-1 раз Удачи в кодировании.

Комментариев нет:

Отправить комментарий