Skip to content

Repository files navigation

IntelfestSortingHat

Портативный пульт и экран зала, который распределяет участников по командам. Задаёте размер команды и список людей — программа раскладывает их по командам и показывает результат на зале.

Чистый старт

В репозитории нет личных данных: ни названий команд, ни счетов, ни фонов, ни сохранённых турниров. Приложение стартует с пустого состояния, а всё, что вы вводите, живёт только в вашем браузере (localStorage) и в памяти локального сервера. В репозиторий эти данные не попадают.

Возможности

  • Список участников и размер команды; кнопка «Распределить» — раскладка.
  • «Всегда вместе» / «Связать» — связки участников, которые обязаны попасть в одну команду (например, капитан и его «ядро»). Связки учитываются при раскладке.
  • Корректная работа с остатком: если людей не хватает на полные команды, остаток либо образует отдельную неполную команду, либо (когда он не больше половины) раскидывается по уже собранным — баланс команд сохраняется.
  • «Распределить остаток», «Сбросить ряды», «+ 10» — быстрый добор участников.
  • «Команды — правка»: «Добавить команду», «Сбросить команды» — ручная доводка распределения.
  • Экран зала показывает раскладку без интерфейса оператора.

Алгоритм раскладки покрыт тестом:

python scripts/smoke.py

Тест проверяет правила распределения остатка и упаковку участников вместе со связками (union-find).

Экран зала

Зал открывается отдельным окном браузера на другом мониторе в режиме приложения (--app) со своим профилем. Esc закрывает окно зала.

Быстрый старт

Портативно (без установки Python). Скопировать папку целиком, включая runtime\python\, и запустить IntelfestSortingHat.bat. Откроется пульт оператора; консольное окно нужно держать открытым — его закрытие останавливает сервер.

Из исходников. Нужен Python 3.10+ (проверено на 3.12):

python serve.py

Порт по умолчанию — 3885, переопределяется переменной окружения PORT.

Браузер: Edge или Chrome (для зала используется режим приложения --app). Система: Windows 10/11 64-bit.

Портативный runtime

Приложение работает на embeddable CPython 3.12, который лежит в runtime\python\. Раньше папка копировалась вместе с проектом — в репозитории её нет: это 22 МБ бинарников, которые бессмысленно держать в git.

Восстановить runtime одной командой из корня проекта:

powershell -ExecutionPolicy Bypass -File scripts\get-runtime.ps1

Скрипт скачивает официальный python-3.12.10-embed-amd64.zip с python.org и распаковывает его в runtime\python. Ничего не ставится в систему, права администратора не нужны. Если runtime\python\python.exe уже есть — скрипт ничего не делает.

Никаких внешних зависимостей: serve.py использует только стандартную библиотеку Python.

Структура

IntelfestSortingHat/
  IntelfestSortingHat.bat  запуск (портативно)
  serve.py                 локальный HTTP-сервер, только stdlib
  index.html               пульт оператора
  display.html             экран зала
  css/app.css              оформление
  js/sort.js               алгоритм раскладки (зеркало scripts/smoke.py)
  js/operator.js           логика пульта
  js/display.js            отрисовка зала
  js/bus.js                шина между окнами
  scripts/smoke.py         тест правил раскладки и связок
  logo.svg, app.ico
  scripts/get-runtime.ps1   восстановление runtime\python

HTTP API

Локальный сервер слушает 127.0.0.1:3885 и отдаёт состояние залу через обычные JSON-эндпоинты (интеграции и автоматизация):

Метод Путь Назначение
GET /api/state текущее состояние
POST /api/state записать состояние
GET /api/status статус сервера, мониторы, браузер
GET /api/open-display открыть экран зала
GET /api/cycle-display переключить монитор зала
GET /api/reload-display перезагрузить окно зала

Лицензия

MIT — см. LICENSE.

About

Распределение участников по командам: связки «всегда вместе», контроль остатка, экран зала

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages