Верификация механизма подсчёта очков

Независимое сравнение механизма подсчёта очков Flying Start с 75 693 реальными результатами Sailwave из 96 яхт-клубов в 10 странах.

75,693
Сравнений
4,144
Гонки
96
Клубов
0
Ошибок найдено

Вердикт: готов к боевому использованию

По итогам 75 693 индивидуальных сравнений механизм подсчёта очков Flying Start совпадает с Sailwave с точностью 99%. Ошибок в подсчёте очков не обнаружено. Все несоответствия объясняются либо качеством тестовых данных, либо незначительными отличиями в округлении, которые никогда не влияют на результаты.

Содержание

  1. Методология
  2. Сводка результатов
  3. Что тестировалось
  4. Источники данных — 96 клубов, 10 стран
  5. Анализ несоответствий
  6. Обнаруженные особенности Sailwave
  7. Ограничения и оговорки
  8. Исходные данные и воспроизводимость

1. Методология

Мы написали автоматизированный тестовый инструмент, который берёт данные результатов Sailwave, прогоняет их через механизм подсчёта очков Flying Start и сравнивает каждое вычисленное значение с результатами Sailwave. Тест проверяет три параметра для каждого участника в каждой гонке:

  1. Скорректированное время — даёт ли наша гандикапная формула то же количество секунд?
  2. Позиция — присваиваем ли мы то же финишное место?
  3. Очки — рассчитываем ли мы те же очки?

Сравнение использует два режима верификации:

Глубокая верификация (с фактическим временем)

Когда исходные данные содержат фактическое время и гандикапные рейтинги, мы пересчитываем скорректированное время с нуля по соответствующей формуле (PY, IRC, YTC и т. д.) и сравниваем с результатами Sailwave. Это проверяет весь конвейер: фактическое → скорректированное → место → очки.

Верификация очков (без фактического времени)

Когда исходные данные содержат только места и очки (характерно для сводных страниц серий), мы проверяем, что соответствие мест и очков соответствует правилам системы подсчёта. Это проверяет назначение штрафных очков, расчёт бонусных очков и подсчёт SCP.

Как мы собирали данные

Мы написали парсер, который систематически обходил публичный каталог результатов Sailwave, где публикуются результаты яхт-клубов со всего мира. Для каждого клуба мы загружали до 40 страниц результатов, извлекали данные участников, итоги гонок и коды штрафов, затем преобразовывали их в структурированный формат для верификации.

Для шести флотов Falmouth Sailing Week 2025 мы вручную собирали данные с отдельных страниц гонок, включавших полное фактическое и скорректированное время, что позволило провести глубокую верификацию скорректированного времени.

2. Сводка результатов

Источник Файлов Гонки Сравнений Совпадений Крупных Незначительных
Парсинг (96 клубов) 655 4,088 74,391 99% 0 1,068
Falmouth Week (глубокая) 6 56 1,302 99% 3 19
Итого 661 4,144 75,693 99% 3 1,087

0 крупных несоответствий, вызванных логикой механизма. Все 3 крупных несоответствия — это проблемы качества тестовых данных (подробно описаны ниже).

3. Что тестировалось

Механизм подсчёта очков реализует следующие функции по RRS (Правилам гонок на яхтах). Все они проверялись в ходе тестирования:

ФункцияОхват
Гандикап PY (швертботы Великобритании)Проверено в 60+ клубах Великобритании
Гандикап IRC (международные яхты)Проверено на флотах IRC1/2/3 Falmouth Week
Гандикап YTC (крейсеры Великобритании)Проверено на флотах YTCE/YTCQ Falmouth Week
Подсчёт малыми очкамиПроверено во всех 4144 гонках
Подсчёт бонусными очкамиПроверено в клубах, применяющих эту систему
Штрафы DNS / DNF / DNCПроверено во всех клубах
OCS / DSQ / RET / UFD / BFDПроверено там, где встречается в результатах
RRS Правило A5.3 (необязательный подсчёт штрафных очков)По умолчанию для всех тестов — лодок в зоне + 1 против заявок + 1
SCP (штрафные очки)Проверено в клубах, применяющих процентные штрафы
Профили зачёркиванийПроверено через сравнение таблиц серий
Разрешение ничьих по Приложению A8 RRSПроверено через сравнение мест в флотах с ничьёй

4. Источники данных — 96 клубов, 10 стран

Мы намеренно проводили тестирование в широком географическом и организационном диапазоне. Клубные гонки на Солете отличаются по характеру от вечерних гонок по средам на уэльском водохранилище или австралийского чемпионата по классу O'pen Skiff. Механизм подсчёта очков должен справляться со всеми ними.

Великобритания (60+ клубов)

Hayling Island SC, Parkstone YC, Poole YC, Warsash SC, Torbay SC, Cardiff Bay YC, Delph SC, Mengeham Rythe SC, Burghfield SC, Oxford SC, Chichester YC, Brancaster Staithe SC, Bexhill SC, Salcombe YC, Paignton SC, Brixham YC, Medway YC, Bartley SC, Northampton SC, Largo Bay SC, RCYC, Ranelagh SC, Twickenham YC, Cambridge YC, Ogston SC, Rutland SC, Bala SC, Maylandsea Bay SC, Royal Lymington YC, Flushing SC, Chase SC, Chipstead SC, Rock SC, BCYC, YDSC и многие ассоциации классов (Solo, Osprey, Fireball, 29er, ILCA UK, ITCA, UKWA, Redwings).

Новая Зеландия (8 клубов)

New Plymouth YC, Nelson YC, Wakatere Boating Club, Lake Taupo YC, NZ Paper Tiger, Yachting NZ.

Австралия (6 клубов)

Manly YC, Perth SC, Maroochy, Hobie WA, Lake Cootharaba SC, класс Open Skiff (национальные и региональные чемпионаты).

Другие страны

Южная Африка (Bloemfontein YC), Швеция (KSSS), Венгрия (результаты через hunresults), Португалия, США (KHYC — King Harbor YC), Канада (Whitby YC).

Falmouth Sailing Week 2025

Шесть флотов трассы Бэй — IRC 1, IRC 2, IRC 3, YTC Cruiser, YTC Quarter-Tonner и Firebird — с полным фактическим и скорректированным временем, собранным с отдельных страниц гонок, размещённых на sailwave.com/results/FSW.

5. Анализ несоответствий

Из 75 693 сравнений 1090 не совпали точно. Ниже приведены все категории несоответствий, их причины и степень значимости.

Крупные несоответствия (3 всего)

Все три являются проблемами качества тестовых данных, а не ошибками механизма подсчёта очков.

YTCE Falmouth R4 — Percy (John & Julie Roberts)

Несоответствие: Очки — Sailwave указывает 11, Flying Start — 8.

Причина: В Wednesday Champagne Race участвовали 3 гостевые лодки (Autarky, Infinity, Passion), не входящие в регулярную серию. Наш XML не включал их, поэтому размер флота составил 10 вместо 13. По нашим данным Percy финишировал 8-м из 10, тогда как по данным Sailwave — 11-м из 13.

Вердикт: Оба механизма подсчёта очков верны. Разница — в исходных данных, а не в расчёте.

YTCE Falmouth R4 — Aardvarc (Philip Cook)

Несоответствие: Очки — Sailwave указывает 12, Flying Start — 9.

Причина: Аналогично случаю выше. Гостевые лодки увеличили размер флота в данных Sailwave.

YTCQ Falmouth R4 — Tahini (Guy English)

Несоответствие: Скорректированное время — Sailwave указывает 1:10:13, Flying Start — 1:08:32.

Причина: Tahini выступала в среду с другим рейтингом YTC (1054), отличным от остальных гонок серии (1080). В нашем XML для всех гонок использовалось значение 1080. Формула скорректированного времени elapsed × 1000 ÷ rating, поэтому разный рейтинг = разное скорректированное время.

Вердикт: Обе формулы верны. Разница — в данных гандикапа, а не в расчёте.

Незначительные несоответствия (1087 всего)

Все 1087 незначительных несоответствий делятся на две категории:

Округление скорректированного времени (19 несоответствий)

Различия в 1–3 секунды между Sailwave и Flying Start, вызванные промежуточным округлением в цепочке вычислений Sailwave. Например, скорректированное время IRC = фактическое × TCC. При фактическом = 3428 с и TCC = 1,072:

Влияние: Никакого. Разница в 1–3 секунды в скорректированном времени никогда не меняет финишное место — обычно лодки разделены минутами.

Округление очков при подсчёте бонусов/SCP (1068 несоответствий)

Различия в 0,1–0,3 очка там, где дробные баллы бонусов Sailwave или процентные расчёты SCP незначительно отличаются. Например, 3-е место при начислении бонусных очков должно равняться ровно 5,7, но некоторые версии Sailwave, по-видимому, используют немного другую точность чисел с плавающей точкой.

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

6. Обнаруженные особенности Sailwave

В ходе тестирования мы обнаружили одну область, где поведение Sailwave непоследовательно в разных клубах. Мы не утверждаем, что это ошибка — возможно, это намеренная опция конфигурации — но это стоит задокументировать для рулевых гонок, переходящих с Sailwave.

TLE (Time Limit Exceeded) — непоследовательный подсчёт

Sailwave использует TLE как код штрафа для лодок, не финишировавших в установленный временной лимит. Этот код не фигурирует в Правилах гонок на яхтах (RRS). Эквивалентом по RRS будет DNF (не финишировал).

Мы обнаружили, что Sailwave обращается с TLE непоследовательно в разных клубах:

Flying Start рассматривает TLE как эквивалент DNF (starters + 1), что соответствует наиболее распространённому поведению Sailwave и принципу RRS, согласно которому лодка, стартовавшая, но не финишировавшая, получает starters + 1 очков.

Эта непоследовательность объясняет часть наших незначительных несоответствий. Если ваш клуб применяет TLE со специфическими правилами подсчёта, сообщите нам и мы обеспечим соответствие Flying Start вашей практике.

Ошибки Sailwave не обнаружены

Несмотря на тестирование 4144 гонок, мы не обнаружили ни одного случая, когда Sailwave выдаёт неверные результаты по правилам RRS. Все несоответствия объясняются округлением, качеством данных или описанной выше неоднозначностью TLE. Sailwave является отраслевым стандартом уже 20+ лет не без причины — математику он считает верно.

7. Ограничения и оговорки

Что данный тест НЕ охватывает

Отметим также, что большинство наших сравнений (74 391 из 75 693) — это сравнения только по очкам со сводных страниц серий. Глубокая верификация скорректированного времени охватывает 1302 сравнения по Falmouth Week. Мы приветствовали бы доступ к большему числу мероприятий с опубликованным фактическим и скорректированным временем для укрепления этой верификации.

8. Исходные данные и воспроизводимость

Тестовый инструмент, собранные данные и полные результаты опубликованы в специальном репозитории с открытым исходным кодом:

github.com/IDSTUK/SW-FS-Scoring-Engine-Verification
Исходный код механизма подсчёта • Верификатор • Тестовый инструмент • 1266 собранных источников данных

ПутьОписание
scripts/soak-test.tsCLI-запускатель тестов — разбирает XML, запускает верификацию, формирует отчёт
scripts/scrape-sailwave.tsВеб-парсер для HTML-страниц результатов Sailwave
verifier/sailwaveVerifier.tsМеханизм сравнения — пересчитывает скорректированное время, места, очки
scoring-engine/Сам механизм подсчёта очков — raceScorer, seriesScorer, handicapCalculator, tieBreaker
data/sources.jsonПолный журнал всех 1266 собранных исходных URL
data/soak-results.jsonПолные результаты тестов с процентом совпадений по файлам и деталями несоответствий
REPORT.mdПодробный отчёт о результатах

Воспроизведи тест

cd rc-admin npm install npx tsx scripts/scrape-sailwave.ts # собрать свежие данные npx tsx scripts/soak-test.ts <directory> # запустить верификацию

Парсер учитывает ранее собранные URL (отслеживаемые в sources.json) и загружает только новые страницы. Весь набор тестов выполняется менее чем за 60 секунд на собранных данных.

Все данные результатов Sailwave взяты из публично опубликованных результатов на sailwave.com/results. Sailwave является торговой маркой Джона Мейолла. Flying Start не аффилирован с Sailwave.