Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 05.12.2025
Сообщений: 4

Турнирная таблица

20.01.2026, 12:39. Показов 852. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Помогите создать код PYTHON турнирного расписания.
Основная проблема в количестве пересечений. Есть 36 игрока, за одним столом играют по 9 игроков, в день 4 стола, где все игроки соответственно задействованы. В идеале нужно сделать что бы каждый игрок встретился с другим за сезон равное количество раз, сделав математический расчет, могу ошибаться, но вроде бы выходит так что всего игровых дней 35, то есть каждый игрок сыграет 35 раз, при этом каждый с каждым встретится по 8 раз.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.01.2026, 12:39
Ответы с готовыми решениями:

Турнирная таблица
Чемпионат Берляндии по футболу был прерван в самый разгар сезона из-за введённого в стране...

Двумерные массивы, турнирная таблица
Доброго времени суток, прошу помочь с заданием: Таблица футбольного чемпионата задана в виде...

Турнирная таблица, работа со словарем
Даны финальные баллы спортсменов по результатам соревнований, которые хранятся в словаре...

6
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
21.01.2026, 17:07
Марина07,
Python
1
2
3
4
5
6
7
8
pls = list(range(1, 37))
for i in range(35):
    print(f'{i+1} день')
    for k in range(4):
        print(pls[k*9:k*9+9])
    print()
    pls = [pls[0]] + pls[2:] + [pls[1]]
    #pls.append(pls.pop(1))
0
0 / 0 / 0
Регистрация: 05.12.2025
Сообщений: 4
22.01.2026, 09:13  [ТС]
Доброе утро. Спасибо за ответ, к сожалению, это не то расписание, которое я ищу. Один из главных пунктов, количество пересечений максимально сбалансированно должно быть. В данном предложение круговая система со сдвигом +1, часть игроков встретятся больше 25 раз, часть 8 раз. Мне нужно подобное этому (в нем на 27 игроков, 13 дней и количество встреч равное для всех по 4)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from collections import defaultdict
from pprint import pprint
import itertools
 
def stat(schedule):
 pair_counts = defaultdict(lambda: 0)
 gamers = set()
 for day_schedule in schedule:
 for tab in day_schedule:
 for i in tab:
 gamers.add( i )
 for i, j in itertools.product(tab,tab):
 if i < j:
 pair_counts[(i,j)] += 1
 
 counts = defaultdict(lambda: 0)
 for i, j in itertools.product(gamers, gamers) :
 if i < j:
 counts[pair_counts[(i,j)]] += 1
 max_ = max(counts.keys())
 min_ = min(counts.keys())
 L0 = sum((v for n, v in counts.items()))
 L1 = sum((v*n for n, v in counts.items()))
 L2 = sum((v*n*n for n, v in counts.items()))
 return {"max-min":max_-min_, "sqr-deviation": (L2/L0 - (L1/L0)**2)**0.5, "counts": sorted(counts.items()) }
 
def day_schedule_by_miller_index(miller_index):
 i1, i2, i3 = miller_index
 ret = [[], [], []]
 for g in range(27):
 s = ( i1*((g//1)%3)
 + i2*((g//3)%3)
 + i3*((g//9)%3)
 )%3
 ret[s] += [g]
 return ret
 
def schedule_by_miller_index():
 """generate ideal 13-days schedule"""
 # return [ day_schedule_by_miller_index(miller)
 # for miller in [ (0,0,1), (0,1,0), (1,0,0),
 # (0,1,1), (1,1,0), (1,0,1),
 # (0,1,2), (1,2,0), (2,0,1),
 # (1,1,2), (1,2,1), (2,1,1),
 # (1,1,1) ] ]
 return [day_schedule_by_miller_index((i1,i2,i3))
 for i1, i2, i3 in itertools.product(range(3), range(3), range(3))
 if (i1, i2, i3) != (0, 0, 0) and (i1, i2, i3) < (i1 * 2 % 3, i2 * 2 % 3, i3 * 2 % 3) ]
 
def multidays_schedule_by_miller_index(days = 24):
 ret = []
 while len(ret) < days:
 ret += schedule_by_miller_index()
 return ret[0:days]
 
schedule=multidays_schedule_by_miller_index(24)
pprint(schedule)
pprint(stat(schedule))
0
Любознательный
 Аватар для YuS_2
7406 / 2259 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
23.01.2026, 11:46
Цитата Сообщение от Марина07 Посмотреть сообщение
Основная проблема в количестве пересечений. Есть 36 игрока, за одним столом играют по 9 игроков, в день 4 стола, где все игроки соответственно задействованы.
Основная проблема в описании условий задачи.
Что за игра, для которой необходимо составить турнирную таблицу?
Вернее, каким образом осуществляется игра:
1. Один игрок встречается с другим - это одна игра? Правда тут возникает дополнительный вопрос: каким образом встретятся каждый с каждым, если за одним столом играет нечетное количество игроков? Ведь в этом случае один из девяти будет нервно курить, пока остальные пары играют.
2. Или 9 человек играющих за одним столом - это одна некая игра? Но в этом случае, не получается каждый с каждым, ведь 9 человек играют в одну игру. То бишь, не совсем понятно, как или во что примерно они могут играть те самые 9 человек за одним столом...
В общем, условия задачи в части игры, пока выглядят не сильно прозрачно...
0
0 / 0 / 0
Регистрация: 05.12.2025
Сообщений: 4
23.01.2026, 12:25  [ТС]
Хотелось убрать лишние вводные, казалось что так будет проще понимать. Если конкретно, то, это сезон игр по покеру, то есть за одним столом 9 игроков встречаются, всего в день 4 стола, соответственно все задействованы. Количество дней в сезоне я могу подвинуть, для достижения максимально ровных пересечений. Чуть выше я скинула код, который был сделать для меньшего количества игроков. В текущем вопросе, математически мы имеем один игровой день, который вмещает в себя 144 разные пары. Всего у нас пар 630. соответственно 144*35 дней= 5040/630=8. Поэтому я и писала о 8 встречах, но я допускаю погрешности и возможно, пересечения в таблице будут выглядеть не по 8 раз, а например 7 8 9. То есть мне не просто расписание нужно, а еще с учетом количества встреч
0
115 / 100 / 15
Регистрация: 24.07.2019
Сообщений: 316
23.01.2026, 13:50
Марина07, что считается парой? м+ж, м+м, ж+ж? что в это время делает девятый?
0
0 / 0 / 0
Регистрация: 05.12.2025
Сообщений: 4
23.01.2026, 14:23  [ТС]
за стол присаживаются по 9 игроков, пары берутся из расчета, например 1 2 3 4 5 6 7 8 9 игроки за столом, для игрока под номером 1 за одним столом вот такие пары образуются 1-2,1-3,1-4,1-5,1-6,1-7,1-8,1-9 и так далее у игрока под номером 2 пары с 2-1, 2-3,2-4,2-5,2-6,2-7,2-8,2-9 и так далее
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.01.2026, 14:23
Помогаю со студенческими работами здесь

Турнирная таблица
Спортивный сезон В течение спортивного сезона проводится 5 соревнований, по результатам которых...

Сделать таблицу умножения, таблицу сложения, а также таблицу возведения в степень
Помогите написать код) Сделать таблицу умножения, таблицу сложения, а также таблицу возведения в...

Вывод данных из таблицы
Здравствуйте! Возникла проблема, есть код: import cgi import MySQLdb ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru