Интерактор — это специальная программа, которая взаимодействует с решением участника во время его выполнения. Вместо того чтобы просто передавать статические данные на вход программы, интерактор может "общаться" с решением, считывая его вывод и предоставляя дополнительные данные на основе ответов программы. Это позволяет создавать задачи, где динамическое взаимодействие является частью процесса решения.
Классическим примером задачи с использованием интерактора может быть игра "угадай число", где решение пытается угадать число, а интерактор предоставляет обратную связь (например, "слишком мало" или "слишком много") после каждой попытки.
Чтобы настроить интерактор для вашей задачи, выполните следующие шаги:
Откройте консоль и выберите пространство, где размещена задача.
Перейдите в раздел Задачи в левом меню.
Выберите задачу, которую хотите изменить.
Перейдите в раздел Тестирование в меню задачи.
Нажмите на Интерактор, чтобы настроить его.
Рис. 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 приводит к вердикту "Неправильный ответ" для теста. Любой другой код завершения сигнализирует об ошибке в работе интерактора и вызывает присвоение отправке статуса "Системная ошибка".