Задача:interactive

From EjudgeWiki
Revision as of 13:33, 18 February 2013 by Cher (talk | contribs)

Навигация: Главная страница/Система ejudge/Использование/Виды задач/Задача:interactive

В интерактивных задачах программа участника не читает входной файл и пишет в выходной файл, а взаимодействует со специальной программой, называемой программой-интерактором. Программа-интерактор может реализовывать различные стратегии поведения в зависимости от поведения тестируемой программы.

Для организации взаимодействия тестирующая система создает два неименованных канала (pipe), один в направлении от тестируемой программы к программе-интерактору, другой в направлении от программы-интерактора к тестируемой программе. Стандартный ввод тестируемой программы перенаправлен на чтение из второго канала, а стандартный вывод тестируемой программы перенаправлен на запись в первый канал. Для программы-интерактора стандартный поток ввода и стандартный поток вывода перенаправляются в обратном направлении.

Тестирующая система запускает параллельно тестируемую программу и программу-интерактор и ждет завершения обеих программ.

Дальнейшее поведение тестирующей системы определяется по совокупности статусов завершения тестирующей программы и программы-интерактора. Проверки перечислены в порядке их выполнения.

  • Программа-интерактор превысила ограничение на максимальное время выполнения и была снята с выполнения из-за этого. Фиксируется вердикт CF.
  • Программа-интерактор была снята с выполнения из-за получения фатального сигнала. Фиксируется вердикт CF.
  • Программа-интерактор завершилась с кодом завершения, отличным от 0, 1 (WA), 2 (PE), 4 (PE), 5 (WA). Фиксируется вердикт CF.
  • Тестируемая программа была снята с выполнения из-за превышения ограничения на максимальное астрономическое время работы. Фиксируется вердикт WT.
  • Тестируемая программа была снята с выполнения из-за превышения ограничения на процессорное время работы. Фиксируется вердикт TL.
  • Тестируемая программа была снята с выполнения из-за превышения ограничения на размер виртуального адресного пространства или на размер стека. Фиксируется вердикт ML.
  • Тестируемая программа была снята с выполнения из-за попытки выполнить запрещенную системную операцию. Фиксируется вердикт SV.
  • Тестируемая программа была снята с выполнения из-за получения фатального сигнала. Фиксируется вердикт RT.
  • Тестируемая программа завершилась с ненулевым кодом завершения. Фиксируется вердикт RT.
  • Программа-интерактор завершилась с кодом завершения 0, 1, 2, 4, 5. Фиксируется вердикт, соответствующий коду завершения.

Если ни одно из вышеперечисленных условий не выполнилось, тестируемая программа и программа-интерактор уложились в ограничения на время и память и завершились с кодом завершения 0. В этом случае выходной файл программы-интерактора передается на дальнейшую проверку проверяющей программы.

Описанный алгоритм проверки обладает следующими свойствами:

  • он не зависит от порядка, в котором завершались тестируемая программа и программа-интерактор;
  • он максимально приближен к порядку проверок, выполняемых для стандартных (не интерактивных) задач.