Перейти к основному содержимому

Варианты заданий

Зачем нужно

Варианты заданий нужны, чтобы управлять параметризованными или set-specific формами одной задачи без потери связи с исходным каноном. Документ не использует variant как общий термин для всех похожих задач.

Editorial relations описаны отдельно в relations.md.

Кто использует

  • автор задачи;
  • методист;
  • администратор олимпиады;
  • преподаватель;
  • инженер интеграции.

Сценарии

  • создать новую версию условия;
  • подготовить вариант для другой группы;
  • задать параметры генерации;
  • локализовать задачу;
  • связать вариант с исходной задачей;
  • определить, когда задача считается той же самой.
  • подготовить A/B или reserve item внутри набора, activity или тура.

Данные

  • problem;
  • problem variant;
  • problem version;
  • generation parameters;
  • locale;
  • equivalence rule;
  • source problem reference;
  • context ref для set_variant, если вариант живёт внутри набора или тура.

Что не является variant

ТерминГде описываетсяСмысл
duplicateproblem_relationдубль записи или та же задача
analogproblem_relationта же задача с косметическими изменениями
similarproblem_relationпохожая задача для recommendation
prerequisiteproblem_relationнаправленная методическая зависимость
same_methodproblem_relationзадача на тот же метод

Правила

  • Вариант сохраняет связь с исходной задачей.
  • Версия фиксирует изменение условия или ответа во времени.
  • Параметризованная генерация должна быть воспроизводимой.
  • Если меняется проверяемый навык или критерий, это может быть новая задача, а не вариант.
  • Если связь нужна для recommendations, prerequisites или dedupe, использовать problem_relation, а не problem_variant.
  • Set variant должен быть привязан к контексту набора, activity или тура.

API

Канонические операции описаны в ../api-map.md: GET/POST /problems/{problemId}/variants, GET/PATCH /problem-variants/{variantId}, POST /problem-variants/{variantId}/generate, POST /problem-variants/{variantId}/equivalence и публикация связанной версии через POST /problem-versions/{versionId}/publish.

Серверная часть

Серверная часть хранит связи между исходной задачей, версиями, вариантами, параметрами генерации и локалями.

Интерфейс

  • список вариантов задачи;
  • сравнение версий;
  • редактор параметров;
  • предпросмотр сгенерированного варианта;
  • указание локали;
  • статус пригодности варианта.

Интеграции

  • competitions — варианты туров и групп;
  • LMS — адаптация под урок или группу;
  • answers-checking — ответы для каждого варианта;
  • solutions — решения для версии или варианта.

Безопасность

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

Нестандартные случаи

  • вариант меняет правильный ответ;
  • генератор не воспроизводит прежний вариант;
  • локализация меняет смысл условия;
  • вариант используется в активном туре;
  • исходная задача архивирована.

Готовность

  • у задачи можно хранить версии и варианты;
  • связь с исходной задачей не теряется;
  • варианты воспроизводимы;
  • правила эквивалентности понятны разработчикам и методистам.