Quotekkorky :
То что Крам сделал - это не программа жеребьевки... 99,9% - просто берется реальная жеребьевка ЛЧ, туда подставляются наши команды, потом несколько меняется порядок и выдается как результат. В таком виде - вряд ли нам надо.
Конечно нет) Это реальная жеребьевка по заданным правилам. Ты просто очень сильно отстал от жизни и технологий))
Ну так дай алгоритм, если я отстал, а ты не отстал
Тебе в Z-нотации, B-Методе или в TLA+?
----------- Только познав черные будни, начинаешь ценить серые.
1. Проверяются исходные данные:
- ровно 36 клубов;
- четыре корзины по девять клубов;
- уникальные названия;
- в каждой корзине уникальные места 1–9;
- у каждого клуба указана страна.
2. Создаётся случайное число генерации — seed.
- Оно управляет всей случайностью.
- Одинаковые команды и одинаковый seed всегда дают одинаковый результат.
- Другое число обычно создаёт совершенно другую жеребьёвку.
3. Формируются соперники между разными корзинами.
Например, для корзин 1 и 2 алгоритм строит два непересекающихся набора пар:
- каждый клуб корзины 1 получает двух разных соперников из корзины 2;
- каждый клуб корзины 2 также встречается ровно с двумя клубами корзины 1;
- повторные пары запрещены;
- команды одной страны не соединяются;
- учитывается ограничение максимум в два соперника из одной страны.
Так обрабатываются все шесть сочетаний разных корзин.
4. Формируются соперники внутри каждой корзины.
Девять клубов случайным образом объединяются в замкнутую цепочку. Например:
1 → 5 → 8 → 3 → … → 1
Благодаря этому у каждого клуба получается ровно два соперника из собственной корзины — предыдущий и следующий в цепочке.
5. Определяется поле матча.
Сформированные цепочки ориентируются по направлению «хозяева → гости». За счёт этого против каждой корзины клуб получает:
- одного соперника дома;
- одного соперника в гостях.
Итого у каждой команды ровно четыре домашних и четыре выездных матча.
6. Все 144 матча распределяются по восьми турам.
Алгоритм делит календарь на четыре пары:
- туры 1–2;
- туры 3–4;
- туры 5–6;
- туры 7–8.
Внутри каждой пары туров матчи распределяются так, чтобы у каждого клуба был один матч дома и один в гостях. Поэтому одновременно выполняется и правило отсутствия трёх домашних или трёх выездных матчей подряд.
7. Готовая жеребьёвка полностью перепроверяется.
Проверяется:
- 144 уникальных матча;
- восемь матчей у каждого клуба;
- два соперника из каждой корзины;
- один домашний и один выездной матч против каждой корзины;
- отсутствие соперников из своей страны;
- не более двух соперников из любой другой страны;
- один матч команды в каждом туре;
- четыре домашних и четыре выездных матча;
- отсутствие трёх одинаковых полей подряд.
8. Если хотя бы одно условие нарушено, результат отбрасывается и генератор пробует новую комбинацию. Предусмотрено до 900 полных попыток.
----------- Только познав черные будни, начинаешь ценить серые.
Quotekkorky :
Крам, можешь запросить у GPT дополнительное условие - "не больше 4 общих соперников у двух команд"? Очень сомневаюсь, что GPT справится... Но любопытно...
Ответ GPT - Проверка прошла: 100 разных жеребьёвок подряд удовлетворили новому условию; генератору понадобилось максимум восемь попыток. Сайт успешно собран, теперь публикую обновление по прежнему адресу.
Ссылка на жеребьевку с новым условием про исключение более чем 4-х общих противников - Жеребьевка ЛЧ версия 2.0
----------- Только познав черные будни, начинаешь ценить серые.
Quotekkorky : KRAM, "6. Все 144 матча распределяются по восьми турам.
Алгоритм делит календарь на четыре пары:
- туры 1–2;
- туры 3–4;
- туры 5–6;
- туры 7–8."
Тут нужны подробности.
Распределение 144 матчей по восьми турам
После определения всех соперников и назначения хозяев и гостей алгоритм получает 144 готовых матча. Число 144 получается следующим образом: каждая из 36 команд проводит восемь матчей, но каждый матч учитывается у двух участников, поэтому 36 × 8 ÷ 2 = 144.
На этой стадии для каждой команды уже определены восемь разных соперников, четыре домашних и четыре выездных матча, а также один домашний и один выездной матч против представителей каждой корзины. Остаётся распределить все матчи по восьми турам.
Календарь формируется не по одному туру, а блоками по два тура:
туры 1–2;
туры 3–4;
туры 5–6;
туры 7–8.
В каждой паре туров каждая команда должна провести ровно два матча: один дома и один в гостях. Следовательно, один двухтуровый блок содержит 36 матчей: 18 матчей в первом туре и 18 матчей во втором.
Для формирования первого блока алгоритм рассматривает все 144 матча. Каждая команда временно представляется в двух ролях: как хозяин и как гость. Из общего списка необходимо выбрать 36 матчей таким образом, чтобы каждая команда ровно один раз выступала хозяином и ровно один раз — гостем.
Простой случайный выбор здесь невозможен, поскольку несколько команд могут претендовать на одного и того же гостя. Поэтому используется алгоритм поиска совершенного паросочетания с возможностью переназначения уже выбранных матчей.
Например, если подходящий гостевой клуб уже назначен другой команде, алгоритм пытается подобрать для этой другой команды нового соперника. Если это удаётся, прежнее назначение изменяется и нужный гостевой клуб освобождается. Так продолжается до тех пор, пока каждая команда не получит один домашний и один выездной матч в рассматриваемом двухтуровом блоке.
После выбора 36 матчей у каждой команды имеется одна исходящая связь, соответствующая домашнему матчу, и одна входящая связь, соответствующая выездному матчу. Поэтому выбранные матчи образуют один или несколько замкнутых циклов.
Например:
Команда А играет дома с командой Б.
Команда Б играет дома с командой В.
Команда В играет дома с командой Г.
Команда Г играет дома с командой А.
Получается цикл:
А → Б → В → Г → А.
Для распределения матчей между двумя турами каждый такой цикл должен иметь чётное количество команд. Матчи чётного цикла назначаются в два тура поочерёдно.
В приведённом примере распределение будет следующим:
Тур 1:
А — Б;
В — Г.
Тур 2:
Б — В;
Г — А.
В результате каждая команда проводит по одному матчу в каждом туре, причём один матч дома, а другой в гостях.
Нечётный цикл таким способом разделить невозможно. Например, в цикле А → Б → В → А при последовательном распределении матчей между двумя турами одна из команд должна была бы провести два матча в одном туре. Поэтому любой вариант, содержащий нечётный цикл, отклоняется, после чего алгоритм ищет другой набор из 36 матчей.
После успешного формирования туров 1–2 использованные 36 матчей удаляются из доступного списка. Остаётся 108 матчей.
Затем аналогичным образом формируется второй блок — туры 3–4. Из оставшихся матчей выбираются следующие 36 матчей, образующие только чётные циклы. После этого остаётся 72 матча.
Для туров 5–6 выбираются ещё 36 матчей. После их распределения остаются последние 36 матчей.
Оставшиеся матчи должны быть распределены между турами 7 и 8. Поскольку других матчей уже нет, алгоритм проверяет, образуют ли они только чётные циклы. Если среди оставшихся матчей присутствует нечётный цикл, вся попытка распределения календаря отклоняется. Алгоритм возвращается к исходным 144 матчам и заново формирует все четыре двухтуровых блока.
Для каждого из первых трёх блоков предусмотрено до 180 попыток поиска подходящего набора матчей. Для полного распределения календаря предусмотрено до 700 попыток.
Такой принцип автоматически обеспечивает отсутствие трёх домашних или трёх выездных матчей подряд. Внутри каждой пары туров у команды обязательно находится один домашний и один выездной матч. Возможны только два варианта:
дом — выезд;
или
выезд — дом.
На границе двух соседних блоков могут возникнуть два домашних или два выездных матча подряд, но серия из трёх одинаковых матчей невозможна.
После завершения распределения алгоритм дополнительно проверяет весь календарь. У каждой команды должно быть ровно восемь матчей, по одному матчу в каждом туре, четыре домашних и четыре выездных матча. В каждой паре туров должен присутствовать один домашний и один выездной матч. Также проверяется отсутствие трёх домашних или трёх выездных матчей подряд.
Ограничение, согласно которому у любых двух команд не может быть больше четырёх общих соперников, применяется раньше — при формировании самих 144 матчей. После выбора соперников распределение по турам уже не изменяет их состав.
----------- Только познав черные будни, начинаешь ценить серые.
Quotekkorky :
Кажется, тут легко добавить условие о минимизации игр команд в спаренных турах против команд одной корзины и на этом можно было бы закончить.
О минимизации или исключении? Или ты думаешь, что исключение невозможно?
----------- Только познав черные будни, начинаешь ценить серые.
Пожалуй, весь алгоритм существенно упрощен, всю сложность оставляя именно на этот шаг распределения по турам. Думаю, что исключение не возможно... Но я уже удивлялся сегодня...
Собственно, всё тоже самое я сегодня делал другим путем, делая корректный расклад по турам, но у меня получалось распределить 35 команд, 36-я никак не впихивалась. Быть может, упрости я задачу корректного распределения по турам, это бы получилось....
Условие добавлено и проверено. Теперь генератор:
- стремится полностью исключить одинаковые корзины в каждой паре туров;
- совместно рассчитывает туры 5–6 и 7–8;
- сравнивает несколько полных календарей;
- сохраняет вариант с наименьшим найденным числом совпадений;
- показывает итоговое количество таких случаев.
QuoteKRAM :
Если твои защитники будут делать по 4-5 автоголов за матч, это тоже соответствует правилам. Но это не значит, что это не баг и не нужно с ним бороться))
в текущей жеребьевке не то что бага, а даже проблемы никакой нет, кроме той что вы сами себе придумали
вот тут у МЮ 556 сумма рейтингов, а у Герты 689. Это ж тоже баг и неравные условия. Вы к каким-то группам доколупались, а я вот к этому хочу. Давайте будем пережеребьвку делать пока у всех не бует одинковое число.
QuoteKRAM :
Если твои защитники будут делать по 4-5 автоголов за матч, это тоже соответствует правилам. Но это не значит, что это не баг и не нужно с ним бороться))
в текущей жеребьевке не то что бага, а даже проблемы никакой нет, кроме той что вы сами себе придумали
Главное, что ты ничего не придумывал, все лучше всех понял и у тебя никаких проблем
Остальное детали )
----------- Только познав черные будни, начинаешь ценить серые.
2026-08-31 21:54 GMT - #16724587 From: United States
KRAM, хорошая работа . Но, скорее всего, уже на следующий сезон
Я бы на месте руководства пережеребил, было бы более честно... хотя меня мой жребий устраивает.