Швейцарская система устроена так, что вручную составить пары честно почти невозможно уже с двух десятков участников. Нужно одновременно соблюсти десятки требований: не сводить одну пару дважды, держать баланс цветов, сводить игроков с одинаковыми очками, а если это невозможно - выбирать наименьшее зло по строгому списку приоритетов. Движок жеребьёвки берёт эту работу на себя.
bbpPairings - как раз такой движок. Он принимает файл с полной историей турнира, вычисляет пары очередного тура и записывает их в файл. Никакого интерфейса, базы данных и сети: программа читает один текстовый файл и пишет другой. Всё остальное - регистрация участников, ввод результатов, таблица, вывод на экран - задача той программы, которая движок вызывает.
Такое разделение принято в отрасли: есть эталонный движок, есть менеджеры турниров, которые его используют. Самый известный аналог - JaVaFo Роберто Рикки, референсная реализация системы Dutch на Java. Интерфейс bbpPairings сознательно сделан похожим на JaVaFo 1.4 - с разрешения автора JaVaFo.
Важное свойство для организатора: движок ничего не отправляет наружу. Это локальный исполняемый файл, который работает с файлами на диске. Персональные данные участников никуда не уходят - весь расчёт происходит на той машине, где движок запущен.
Система Dutch (голландская) - основная. Это та самая швейцарка, которую ФИДЕ описывает в разделе C.04.3 своего регламента и которая используется на подавляющем большинстве открытых турниров мира. Версия 6.0.0 реализует редакцию правил 2025 года, вступившую в силу с 1 февраля 2026 года.
Система Burstein - вторая, дополнительная. Здесь автор честен: в README сказано, что это реализация предыдущей версии системы и что она содержит недочёты. Эндорсмента ФИДЕ у неё нет. На практике движок используют ради Dutch.
Круговые турниры (каждый с каждым) движку не нужны вовсе: там расписание туров считается по таблице Бергера арифметически, без всякого перебора вариантов.
Чтобы понимать, что именно делает движок, полезно знать словарь регламента ФИДЕ - те же термины встречаются в его исходниках и сообщениях об ошибках.
Половина сложности швейцарки - это цвета. Регламент делит предпочтение игрока на три степени:
Отсюда и берётся привычная организатору картина: цвета чередуются, длинных серий одним цветом не бывает, а если турнир нечётный по составу, кто-то получает пропуск тура - но не дважды.
Регламент ФИДЕ формулирует жеребьёвку как список требований строгого приоритета. Сначала идут абсолютные - их нарушать нельзя никогда:
Дальше идут критерии качества, тоже упорядоченные по важности: максимум пар в брекете, минимум проваливающихся вниз игроков, забота о том, чтобы следующий брекет тоже можно было развести, затем соблюдение цветовых предпочтений - сперва вообще, потом сильных, и лишь в конце - «косметика»: чтобы один и тот же игрок не проваливался вниз или не поднимался вверх несколько туров подряд.
Практический смысл прост: движок не ищет «красивую» жеребьёвку, он ищет допустимую по самому приоритетному правилу и уступает только там, где иначе тур составить математически нельзя. Поэтому спорить с его вариантом обычно бессмысленно - если пара выглядит странно, значит любая другая нарушала бы правило рангом выше.
Общение с движком идёт через TRF - формат обмена турнирными данными ФИДЕ (его же называют форматом Краузе). Это обычный текстовый файл со строго позиционной раскладкой: значение определяется не разделителем, а номером колонки.
Ключевая строка - 001, одна на участника: номер игрока, звание, имя, рейтинг, федерация, ID ФИДЕ, дата рождения, набранные очки, а дальше блоками по 10 символов - история туров. В каждом блоке номер соперника, цвет (w или b) и результат: 1 победа, 0 поражение, = ничья, U пропуск тура с очком, + и - - плюсовик и минусовик за неявку.
Версия 6.0.0 работает с TRF-2026 и поддерживает обратную совместимость со старым TRF(bx). Есть и собственные расширения для нестандартных начислений очков - коды вида BBW, BBD, BBL: они позволяют задать своё число очков за победу, ничью и поражение.
Тот же TRF нужен и после турнира: файл с результатами принимают судейские программы и федерации, поэтому «выгрузить TRF» и «сдать турнир на обсчёт» на практике почти синонимы.
У движка три режима работы.
bbpPairings --dutch tournament.trf -p pairings.txt - главный режим. На выходе файл, где первая строка содержит число пар, а дальше идут пары номерами игроков.bbpPairings --dutch tournament.trf -c - движок проверяет, соответствует ли уже сделанная жеребьёвка правилам. Полезно, если пары составлялись другой программой или руками.bbpPairings --dutch -g -o trf_file - создаёт случайный турнир для тестов. Так авторы и проверяют движок на тысячах сгенерированных сценариев.Результат работы возвращается кодом выхода: 0 - успех, 1 - допустимой жеребьёвки не существует, 2 - внутренняя ошибка, 3 - некорректный запрос или данные, 4 - турнир не влезает в ограничения по размеру, 5 - файл не прочитался.
Код 1 стоит отличать от настоящих ошибок. Это не сбой, а математика: в швейцарке нельзя сводить одну пару дважды, поэтому при N участниках после N-1 тура свободных соперников не остаётся. Правильная реакция программы - не повторять попытку, а сообщить, что турнир пора завершать.
README указывает теоретическую сложность: примерно O(n³) для системы Burstein и O(n³ × s² × log n) для Dutch, где n - число игроков, а s - количество занятых очковых групп. На практике это означает, что любительский турнир на десятки участников разводится мгновенно, а заметное время расчёт занимает лишь на очень больших опенах.
Ограничения по размеру турнира заданы при сборке: если данные их превышают, движок вернёт код 4. Отдельно стоит помнить, что движок оперирует только тем, что ему передали в файле - он не знает ни о рейтинге на сайте федерации, ни о том, что игрок опоздал на тур. Всё это должна учесть вызывающая программа.
Здесь легко ошибиться, поэтому по пунктам. ФИДЕ ведёт список одобренных (endorsed) программ - это сертификация, которую выдаёт комиссия SPP после проверки. В этом списке находятся менеджеры турниров вроде Swiss-Manager и Vega, а эталонной реализацией алгоритма Dutch считается JaVaFo.
bbpPairings в этом списке нет. Его README формулирует задачу осторожно: программа стремится реализовать правила, описанные в регламенте ФИДЕ. Реализация Burstein прямо помечена как неполноценная и неэндорсенная.
Что это значит на практике. Для клубного, школьного, корпоративного или любительского турнира bbpPairings подходит полностью: он считает пары по тем же правилам Dutch, что и сертифицированные программы. Если же турнир идёт на обсчёт рейтинга ФИДЕ, требования к используемой программе нужно уточнять у своей федерации и главного судьи заранее - именно из-за отсутствия сертификата, а не из-за качества алгоритма.
В Vibe Chess жеребьёвку швейцарских турниров считает именно bbpPairings - версия 6.0.0, собранная из исходников и запускаемая с флагом --dutch. Схема ровно та, что описана выше: приложение собирает файл TRF из истории турнира, отдаёт его движку, получает пары тура и раскладывает их по столам.
Несколько следствий, которые заметны организатору:
Оговорка та же, что и выше: соблюдение правил Dutch - это не сертификат ФИДЕ. Vibe Chess одобрение комиссии SPP не проходил, и для рейтинговых турниров это нужно учитывать. Для клубных, школьных, барных и корпоративных турниров ограничений нет - и всё это бесплатно: создать турнир по швейцарской системе, по круговой или свободную встречу может любой пользователь.
Готовые сборки лежат в разделе releases репозитория, но собрать из исходников несложно. Нужен компилятор C++ и make:
git clone https://github.com/BieremaBoyzProgramming/bbpPairings.gitmake - на выходе появится исполняемый файл bbpPairings.exe (имя такое и под Linux);./bbpPairings.exe --dutch -g -o test.trf./bbpPairings.exe --dutch test.trf -p out.txtЕсли вы просто хотите провести турнир, а не разбираться со сборкой, весь этот путь уже пройден за вас: в приложении движок уже встроен, а организатору остаётся создать событие и нажимать кнопки.
Открытый движок жеребьёвки для шахматных турниров по швейцарской системе, написанный на C++ разработчиком Bierema Boyz Programming. Он получает файл с историей турнира в формате TRF и выдаёт пары следующего тура по правилам ФИДЕ (система Dutch). Это не менеджер турнира: интерфейса, базы участников и таблицы у него нет.
Да. Исходный код открыт и распространяется под лицензией Apache 2.0: движок можно свободно использовать, изучать и встраивать в свои программы, в том числе коммерческие.
В официальном списке одобренных ФИДЕ программ его нет: сертификацию проходят менеджеры турниров, а эталонной реализацией алгоритма Dutch считается JaVaFo. bbpPairings реализует те же правила ФИДЕ, а для реализации системы Burstein сам автор указывает, что она неполная и эндорсмента не имеет. Для клубных и любительских турниров это не мешает, для турниров с обсчётом рейтинга ФИДЕ требования нужно уточнять у федерации.
Две швейцарские: Dutch (голландская, основная, по правилам ФИДЕ раздела C.04.3) и Burstein (дополнительная, реализация предыдущей редакции правил с известными недочётами). Круговые турниры движку не нужны - там расписание считается по таблице Бергера.
Формат обмена турнирными данными ФИДЕ, он же формат Краузе. Текстовый файл со строго позиционной раскладкой: в строке 001 записываются данные участника, его очки и история туров - соперник, цвет и результат каждой партии. Этот же файл принимают судейские программы и федерации при сдаче турнира.
Скорее всего вернулся код 1 - допустимой жеребьёвки не существует. В швейцарке нельзя сводить одну и ту же пару дважды, поэтому при N участниках после N-1 тура свободных соперников не остаётся. Это не ошибка программы, а сигнал, что туры закончились.
В швейцарских турнирах Lichess (форк с системой Fast Swiss), в менеджере турниров SwissSys, в приложении Vibe Chess и во множестве самописных сервисов - открытая лицензия и простой файловый интерфейс делают его удобным для встраивания.
6.0.0, вышедшая 1 февраля 2026 года - одновременно со вступлением в силу новой редакции правил системы Dutch. Предыдущие версии: 5.0.1 (2023), 5.0.0 (2022), 4.1.0 (2017).
bbpPairings версии 6.0.0 с флагом --dutch. Приложение собирает файл TRF из истории турнира, движок возвращает пары тура. Одобрения комиссии ФИДЕ SPP у сервиса нет, правила системы Dutch при этом соблюдаются.
Приложение подсказывает порядок шагов и не даст запутаться: оно само знает, когда объявлять следующий тур и кто с кем играет. Создание турнира бесплатное.
Бот постоянно дорабатывается под реальные турниры. Если вам нужна возможность, которой пока нет, - командой /support прямо в боте напишите разработчикам. Многие функции появились именно по просьбам организаторов, и полезные идеи внедряются быстро.
Как устроена сама швейцарка - шахматный турнир по швейцарской системе. Как выглядит жеребьёвка глазами организатора - жеребьёвка шахматного турнира онлайн. Откуда берутся числа в колонках - коэффициент Бухгольца и турнирная таблица. Чем движки отличаются от судейских программ - обзор программ для проведения турниров. Про сам сервис - о проекте Vibe Chess.