ЗОРЯ

Головна/Завдання/Частина 3/Завдання штабу

Доповнення 1: задачі штабу, бюджети і замір кадру

Доповнення до документа оцінки, розділ 9.3. Номер 1, дата , підписав головний рефері. Діє з фінальної здачі. Основний текст оцінки не змінюється: тут розкрито те, що він назвав доповненням, - задачі, якорі, бюджети, еталонний запис і драйвер.

оновлено 06.10

Якорі й органи - 01-hq-contract.md, розділи 3 і 4. Запис і його формати - 03-record.md.

1Як рахується бал

1.1

У кожної можливості свій набір задач: Ш1 - п'ять, Ш2 - чотири, Ш3 - чотири, Ш4 - чотири, Ш5 - три. Усього двадцять.

1.2

Задачу розв'язано, якщо якір відповіді до кінця бюджету несе значення, рівне ключу. Ключ рахує рушій за тим самим записом.

1.3

Бал можливості - число розв'язаних задач, але верхній щабель (5, 4, 4, 4 і 3 відповідно) дається, тільки якщо розв'язано всі задачі можливості і кадр штабу не гірший за еталонний (розділ 4). Розв'язано всі задачі, а кадр гірший - бал на одиницю нижчий за верхній щабель.

1.4

Прогін один, за фінальною здачею (scoring.md, 6.4). Помилка в консолі або необроблений виняток за прогін - провал усього прогону (P3-11): рахується нуль за всіма п'ятьма можливостями. Тому спершу лагодять консоль, а потім задачі.

1.5

Штаб, який не зібрався або не відкрив запис, отримує нуль. Дод. бал за знахідку поза списком Ш1-Ш5 - окрема колонка (scoring.md, 11.2), до цих двадцяти не додається.

2Жереб задач

2.1

Задача - шаблон: що спитати, у якого якоря взяти відповідь, яким органом дістатися. Числа шаблона - такт, сота, номер партії, номер команди - беруться жеребом.

2.2

Жереб залікового прогону закритий до прогону і оголошується у звіті разом із відповідями. Ваш жереб вибирається прапорцем --seed: задачі ті самі, числа інші. Відповідь, вписана в код заздалегідь, не працює ні в кого.

2.3

Жереб бере тільки осмислені параметри: такт не раніший за 30-й і не пізніший за кінець партії, сота - голка долини з маніфесту, машина - з тих, з ким у фокуса був контакт до цього такту, номер команди - з тих, що в цьому такті були, партія - будь-яка з трьох. Якщо у фокуса в цьому такті немає жодної команди, жереб бере інший такт. Там, де задача дивиться назад (Ш2-2), такт береться не раніший за 330-й, щоб відлік назад лишався всередині партії.

Голки долини всюди, де їх рахують, - це голки з маніфесту партії. Світ заводить голки і поза цим списком; у рахунок Ш1-4 і Ш1-5 вони не йдуть.

2.4

Фокус - учасник, чий щоденник віри лежить у записі. В еталонному записі це одне місце з трьох; у вашому локальному - ваш бот.

3Задачі

Ш1. Правда проти віри (5 задач)

IDЩо питає драйверОрганиЯкір відповідіКлюч
Ш1-1Чия голка стоїть у соті q,r на такті T партії M за правдою світуgo-match, go-tick, go-mode=truth, go-cellcell-owner-truthвласник голки у світі рушія на такті T; голки немає - -
Ш1-2Що про ту саму соту думав бот фокусаgo-mode=belief, go-focuscell-owner-beliefзі щоденника віри на такті T: нік, - (за вірою голка нічия) або ? (не знає)
Ш1-3Де за вірою фокуса чужа машина U і скільки тактів цій пам'ятіgo-unitghost-cell і ghost-ageостанній контакт з U не пізніше такту T зі щоденника віри: його сота і T мінус такт контакту; обидві величини правильні - задачу розв'язано
Ш1-4Скільки голок у фокуса на такті T розходяться з правдоюgo-tick, go-focusdiff-countчисло голок долини, де власник за вірою не дорівнює власникові за правдою; голки, про які фокус не знає нічого, не рахуються
Ш1-5Скільки голок долини мовчить за вірою фокусаті саміdark-countчисло голок маніфесту, у яких у вірі фокуса на такті T стоїть мовчання (dark)

Ш2. Перемотування (4 задачі)

IDЩо питає драйверОрганиЯкір відповідіКлюч
Ш2-1Рахунок фокуса на такті T партії Mgo-match, go-tickscoreрахунок слота фокуса у світі рушія на такті T, один знак після крапки
Ш2-2Скільки голок, що горять, було у фокуса на 300 тактів ранішеgo-tick (назад)needlesголки фокуса, що горять, на такті T - 300
Ш2-3Чим скінчився пакетgo-match=3, go-tick у кінецьsharesчастки пакета з pack.json, у порядку залу
Ш2-4Рахунок фокуса після трьох переходів поспіль T1 -> T2 -> T3go-tick тричіscoreрахунок на такті T3; кожен перехід - у свій бюджет 5 с

Ш3. Профайлер каналу (4 задачі)

IDЩо питає драйверОрганиЯкір відповідіКлюч
Ш3-1Скільки байтів пішло в кадрі команд фокуса на такті Tgo-match, go-tickbytesдовжина кадру слота фокуса на такті T з журналу
Ш3-2Скільки команд подано і скільки відхилено на такті Tті саміorders і deniedчисло команд у кадрі і число відмов цього такту; обидві величини правильні - задачу розв'язано
Ш3-3За що відхилено команду номер i на такті Tgo-orderdeny-wordслово коду відмови з журналу (part2/04-protocol.md, 6.6); команду прийнято - -
Ш3-4На якому такті партії M у фокуса було найбільше відмовgo-matchdeny-top-tickтакт із найбільшим числом відмов; за рівності - менший такт

Ш4. Порівняння пресетів і переведення в бій (4 задачі)

Дано два записи одного жереба, зіграні різними пресетами нашого бота: preset-a і preset-b (03-record.md, розділ 5). Якорі ab-* порівнюють завжди цю пару, хоч би який запис був відкритий: go-pack і go-match тут вибирають, на чому стоїть показ, а не що з чим порівнювати. Статті беруться зі зведень пакетів - відкривати журнали для Ш4 немає навіщо.

IDЩо питає драйверОрганиЯкір відповідіКлюч
Ш4-1Який пресет дав більше хвилин мережі за пакетgo-pack=preset-aab-winnerid запису з більшим breakdown.network за пакет; порівну - preset-a
Ш4-2На скільки розійшовся рахунок у партії Mgo-pack, go-matchab-diffрізниця breakdown.total двох записів у партії M, за модулем, один знак після крапки
Ш4-3За якою статтею розбіжність найбільшаті саміab-topключ статті з найбільшою різницею за модулем: network, orders, stolen або pactTax
Ш4-4Перевести пресет P у бійgo-preset, do-promotepromote-statusкод відповіді господаря на заявку: 200 або 409; штаб показує те, що прийшло

Ш4-4 - про чесність показу. Господар відповідає за жеребом: іноді 200, іноді 409 (заморожено). Штаб, який малює успіх, не дочекавшись відповіді, задачі не розв'язує.

Ш5. Спостереження за поточною партією (3 задачі)

Драйвер подає партію ефіру по такту раз на 25 мс (--tempo, розділ 6): у двадцять разів швидше, ніж вузол на вечорі, де такт триває 500 мс (part2/01-rules.md, 6.1). Штаб мусить витримувати цей темп: якір tick не відстає від стелі більше ніж на 2 такти (Ш5-1).

IDЩо питає драйверОрганиЯкір відповідіКлюч
Ш5-1Наскільки показ відстає від стелі-live-lag і ticklive-lag не більший за 2, і tick не менший за cap - 2 на момент читання
Ш5-2Рахунок фокуса в ефірі на поточному такті-scoreрахунок на такті, який показує якір tick
Ш5-3Чим скінчилася партія ефіру-live-state і shareslive-state дорівнює end, shares дорівнюють часткам ЦІЄЇ партії - тим, що господар прислав у end

4Кадр

4.1

Сценарій заміру: відкрити еталонний запис, пустити показ поспіль на 200 тактів, зробити три переходи (вперед, назад, вперед), повернутися на початок. Драйвер рахує час кадрів браузера і друкує 95-й перцентиль і найгірший кадр.

4.2

У тому самому прогоні на тій самій машині драйвер міряє наш еталон (records/hq-ref.html). Порівнюються обидві пари чисел: ваш 95-й перцентиль з еталонним і ваш найгірший кадр з еталонним. Допуск - 15 %: кадр вважається не гіршим за еталонний, якщо ваш 95-й перцентиль не більший за еталонний плюс 15 % і одна мілісекунда, а найгірший кадр - за еталонний плюс 15 % і дві мілісекунди. Суперечка про десяту частку мілісекунди - суперечка про шум, а не про швидкість.

4.3

Числа еталона на нашій машині приймання: 95-й перцентиль 12.4 мс, найгірший кадр 23.1 мс, вікно 1600x1000, масштаб 1, стеля кадрів у браузері знята. Вони опубліковані для орієнтира; залік рахує пару, зняту в одному прогоні з вашим штабом.

4.4

Кадри міряють тільки на сценарії 4.1. Завантаження, розбір запису і перше малювання в замір не входять - у них свій бюджет 15 секунд (01-hq-contract.md, 4.4).

5Звіт драйвера

5.1

Прогін закінчується файлом hq-report.json:

JSON
{
  "hq": "ім'я штабу з hello",
  "at": "2026-10-17T04:12:33Z",
  "engine": "264a77c2a5405955f5aba04be240325d65cfe5d25269ae2f7c6a9fc7f4ff0e26",
  "record": "1079e82de6ac6ef0c02f3aaf45c33d196c25999605a38e3809c22a82d5e00052",
  "seed": 918273,
  "tasks": [
    { "id": "Ш1-1", "ok": true,  "want": "kuznya", "got": "kuznya", "ms": 412 },
    { "id": "Ш1-3", "ok": false, "want": "52",     "got": "-",      "ms": 3001 }
  ],
  "frames": { "p95": 11.2, "worst": 24.8, "ref": { "p95": 9.4, "worst": 21.0 } },
  "console": [],
  "score": { "Ш1": 4, "Ш2": 4, "Ш3": 3, "Ш4": 2, "Ш5": 3, "total": 16 },
  "clean": true,
  "frameOk": true
}

clean - чи була консоль чиста за прогін (P3-11); frameOk - чи вклався кадр у планку еталона (розділ 4). Обидва поля виведені з решти і стоять у звіті для того, щоб аркуш оцінки не рахував їх наново. record - sha256 зведення еталонного запису.

5.2

Той самий файл ви отримуєте в себе. У кабінет він приходить разом з аркушем оцінки (scoring.md, 2.6); апеляція сперечається з рядком звіту - задачею, відповіддю і ключем (scoring.md, 14).

6Прогін у себе

shell
npx zaria-kit init hq                 # заготовка показу, якщо її ще немає
npx zaria-kit records                 # еталонний запис і пара пресетів
npm run build --workspace hq          # або ваша команда збірки штабу
npx zaria-kit hq-check --seed 4242    # той самий драйвер, свій жереб
ПрапорецьЗа замовчуваннямЩо змінює
--hq КАТАЛОГzaria.hq з package.json штабущо відкривати
--record КАТАЛОГrecords/referenceна якому записі ганяти задачі
--seed Nвипадковийжереб параметрів задач
--broadcastвимк.прогнати тільки сценарій показу: ефір, сторож, пісочниця
--json ФАЙЛhq-report.jsonкуди писати звіт
--ref ФАЙЛrecords/hq-ref.htmlбандл еталона для планки кадру
--tempo МС25темп ефіру в прогоні Ш5
--lang uk\|enzaria.langмова виводу

Драйверові потрібен Chrome або Chromium на машині; він відкриває штаб у пісочниці з тими самими заголовками, що й у нас.

7Що закрито

Відкрито все, чим міряють: шаблони задач, якорі, бюджети, ключі, сценарій заміру, сам драйвер і еталонний запис. Закритий тільки жереб залікового прогону - до звіту (2.2). Підігнати штаб під мірку можна єдиним способом: показувати правильні числа швидко. Межу відкритого проведено за тим самим законом Гудгарта, що й для коду (scoring.md, 8.8).