Что такое кастомный скоринг?
Раньше баллы за задачу считались одним способом: пропорционально количеству пройденных тестов. Если в задаче 10 тестов и ученик прошёл 7 — получал 70% от максимального балла.
Теперь вы можете задать собственные правила подсчёта баллов. Например, для задачи ЕГЭ №27 часто нужна такая схема:
Все тесты верны
→
2 балла
Неверны 2+ тестов
→
0 баллов
Пропорциональный подсчёт не может дать такой результат. Кастомный скоринг — может.
Модель 1: Пороговая (threshold)
Самая популярная модель. Вы задаёте правила — список порогов. Система считает количество проваленных тестов и проверяет правила сверху вниз. Первое подходящее правило определяет балл. Если ни одно не подошло — выставляется default_score.
Пример 1
Классическая схема ЕГЭ: 2 / 1 / 0 баллов
Все верно — 2 балла, одна ошибка — 1 балл, больше — 0.
{ "scoring_type": "threshold", "rules": [ { "max_failures": 0, "score": 2 }, { "max_failures": 1, "score": 1 } ], "default_score": 0 }
| Результат ученика |
Провалов |
Балл |
| Все 10 тестов пройдены |
0 |
2 |
| 9 из 10 пройдены |
1 |
1 |
| 8 из 10 пройдены |
2 |
0 |
| 5 из 10 пройдены |
5 |
0 |
Пример 2
Всё или ничего (бинарное)
Балл начисляется только если все тесты пройдены. Подходит для ЕГЭ/ОГЭ.
{ "scoring_type": "threshold", "rules": [ { "max_failures": 0, "score": 1 } ], "default_score": 0 }
Пример 3
Задача ЕГЭ №27: 4 / 3 / 2 / 0 баллов
Четырёхступенчатая шкала.
{ "scoring_type": "threshold", "rules": [ { "max_failures": 0, "score": 4 }, { "max_failures": 1, "score": 3 }, { "max_failures": 2, "score": 2 } ], "default_score": 0 }
Модель 2: Пропорциональная (proportional)
Простейшая модель: балл равен доле пройденных тестов от максимума, с округлением вниз. Отличается от стандартной логики тем, что вы можете задать любой максимальный балл, не привязываясь к полю «Количество баллов» в задаче.
Пример 4
100-балльная шкала
Если 7 из 10 тестов пройдены → 70 баллов.
{ "scoring_type": "proportional", "max_score": 100 }
Модель 3: Группы тестов (groups)
Тесты объединяются в именованные группы. За каждую группу начисляется балл только если все тесты в ней пройдены (принцип «всё или ничего»). Группы могут зависеть друг от друга — если зависимость не пройдена, зависимая группа не засчитывается.
Номера тестов
Номера тестов в конфиге — это порядковые номера в таблице тестов задачи (1, 2, 3...), сверху вниз, как они отображаются в редакторе.
Пример 5
Две группы с зависимостью
Базовые тесты (1–3) дают 30 баллов. Продвинутые (4–7) дают 70 баллов, но только если базовые полностью пройдены.
{ "scoring_type": "groups", "groups": [ { "name": "basic", "tests": [1, 2, 3], "score": 30, "depends": [] }, { "name": "advanced", "tests": [4, 5, 6, 7], "score": 70, "depends": ["basic"] } ] }
| Результат |
basic (30) |
advanced (70) |
Итого |
| Все 7 тестов верны |
✅ 30 |
✅ 70 |
100 |
| Тесты 1–3 верны, 4-й нет |
✅ 30 |
❌ 0 |
30 |
| Тест 2 неверен, 4–7 верны |
❌ 0 |
❌ 0 (зависимость) |
0 |
Пример 6
Три независимые группы
Каждая группа считается отдельно, без зависимостей. Ученик может набрать баллы за любую комбинацию.
{ "scoring_type": "groups", "groups": [ { "name": "easy", "tests": [1, 2], "score": 20, "depends": [] }, { "name": "medium", "tests": [3, 4, 5], "score": 30, "depends": [] }, { "name": "hard", "tests": [6, 7, 8], "score": 50, "depends": [] } ] }
Частые вопросы
Что будет, если я включу скоринг, но не заполню JSON?
Система автоматически откатится на стандартный пропорциональный подсчёт.
Что будет, если я допущу ошибку в JSON?
При проверке решения система попытается распарсить конфиг. Если не получится — откатится на стандартную логику и запишет предупреждение в лог. Задача ученика не пострадает.
Влияет ли скоринг на поле «Количество баллов» в задаче?
Нет. Поле «Количество баллов» используется только в стандартной логике. Когда включён скоринг, итоговый балл определяется полностью из JSON-конфига (поля score в правилах или max_score).
Можно ли использовать дробные баллы?
Да. Указывайте в JSON дробные значения: "score": 1.5. Итоговый балл округляется до двух знаков после запятой.
Как быстро скопировать скоринг из одной задачи в другую?
Скопируйте текст из поля «JSON-конфиг скоринга» одной задачи и вставьте в другую. Также можно использовать готовые примеры из выпадающего списка.
Совет
Начните с готовых примеров из выпадающего списка — их можно адаптировать под свои нужды, изменив числа в полях
max_failures,
score и
default_score. Это проще, чем писать JSON с нуля.