Интерактор задачи

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

Классическим примером задачи с использованием интерактора может быть игра "угадай число", где решение пытается угадать число, а интерактор предоставляет обратную связь (например, "слишком мало" или "слишком много") после каждой попытки.

Как настроить интерактор

Чтобы настроить интерактор для вашей задачи, выполните следующие шаги:

  1. Откройте консоль и выберите пространство, где размещена задача.

  2. Перейдите в раздел Задачи в левом меню.

  3. Выберите задачу, которую хотите изменить.

  4. Перейдите в раздел Тестирование в меню задачи.

Нажмите на Интерактор, чтобы настроить его.

Рис. 1. Форма настройки интерактора

Настройка интерактора заключается в указании среды выполнения (языка программирования) и исходного кода для интерактора.

Как работает интерактор

Интерактор запускается для каждого теста перед решением участника и продолжает работу до завершения тестирования. Он настроен таким образом, чтобы считывать данные со стандартного вывода решения, а вывод интерактора направляется на стандартный ввод решения. Это создает двусторонний канал связи между интерактором и решением, где программы поочередно отправляют запросы и ожидают ответы. Это взаимодействие обычно следует четко описанному протоколу, который должен быть подробно изложен в условии задачи.

Кроме этого взаимодействия, интерактор может получить доступ к файлам input.txt, output.txt (ответ участника) и answer.txt (правильный ответ). Файл input.txt обычно используется для настройки поведения интерактора, тогда как output.txt и answer.txt применяются чекером для проверки решения. Имена файлов для входных данных, вывода и ответа передаются интерактору в качестве аргументов, и мы настоятельно рекомендуем использовать аргументы вместо того, чтобы жестко прописывать имена файлов в коде. Интерактор выполняется следующим образом:

interactor input.txt output.txt answer.txt < /solution-output > /solution-input

Код завершения интерактора указывает на успешность взаимодействия. Код 0 означает, что взаимодействие завершилось успешно и система может перейти к стадии проверки. Код 1 приводит к вердикту "Неправильный ответ" для теста. Любой другой код завершения сигнализирует об ошибке в работе интерактора и вызывает присвоение отправке статуса "Системная ошибка".