Просмотр источника
h1. Установка интерактивных задач NEERC
В этом году на NEERC начали cтавить интерактивные задачи с тестированием на Java. Эти задачи удалось поставить на DL; здесь задокументирован процесс установки. Jan 2014. Автоматически обнаруживаются и устанавливаются задачи данного типа при загрузке DL Master'ом. h2. Содержание [Описание системы|#NEERC] [Слой совместимости для DL|#DL] [Процесс установки|#setup] [#TODO] h2. {anchor:NEERC}Описание системы В папке с задачей есть следующие файлы: - {{problem.xml}} (файл конфигурации) - {{Interact.jar}} (программа-собеседник) + исходники - {{coact.exe}} (программа-тестер) - {{Check.jar}} (программа-чекер) + исходники В {{problem.xml}} (файл конфигурации) есть тег {{<interactor type="%simple">}}. В нём указан файл программы-собеседника ({{Interact.jar}}) и способ запуска ({{Java7}}). {{Interact.jar}} \- программа-собеседник (читает {{<taskname>.in}}, даёт вывод для решения, получает ввод для него же и выводит информацию о процессе тестирования в {{<taskname>.out}}). {{coact.exe}} запускается со следующими параметрами: {code} coact.exe <timelimit(seconds)> <memlimit(bytes)> <interactor> <solution> {code} Например: {code} coact.exe 2s 268435456 interact.exe sol.exe {code} При этом он умеет обрабатывать кавычки в параметрах: {code} coact.exe 2s 268435456 "java -jar Interact.jar" sol.exe {code} {{Check.jar}} \- реализация класса чекера для библиотеки {{testlib4j.jar}}. Он запускается следующей командой: {code} java -cp "<путь>testlib4j.jar;Check.jar" ru.ifmo.testlib.CheckerFramework Check <infile> <chkfile> <outfile> {code} Он читает {{<taskname>.out}}, генерирует комментарий и завершает работу; результат он возвращает кодом выполнения: * 0: OK * 1: Wrong Answer * 2: Presentation Error h2. {anchor:DL}Слой совместимости для DL Задача ставится как интерактивная, с чекером, все файлы забираются с собой: {code:title=task.cfg} CHECKER = 1 CHECKSUBJECT = FILE CHECKFILES = {*.*} TYPE = INTERACTIVE {code} Для запуска {{coact.exe}} был написан скрипт {{coact.bat}} с одним параметром (скомпилированный файл решения). В [{{StdSwp}}|http://dl.gsu.by/images/agulenko/stdswp.zip] был добавлен код, передающий управление этому скрипту при его наличии; также добавлен код, обнаруживающий файл {{solution.bat}} и передающий его первую непустую строку как команду запуска решения (файл генерируется при компиляции Java-решений). Поскольку ограничение по времени проверяет {{coact.exe}}, оно же для {{StdSwp}} повышено: {code:title=task.cfg} TIME_LIMIT = 5 {code} На данный момент TIME_LIMIT вычисляется как ограничение задачи + 3 секунды. Для обработки чекера был написан вспомогательный чекер [{{InteractChecker.jar}}|http://dl.gsu.by/images/agulenko/neerc/InteractChecker.jar] ([исходники|http://dl.gsu.by/images/agulenko/neerc/InteractChecker-src.rar]), запускаемый с помощью скрипта {{checker.bat}} (из-за особенностей Delta пришлось дописать [{{checker.exe}}|http://dl.gsu.by/images/agulenko/neerc/checker.pas], просто вызывающий этот скрипт). h2. {anchor:setup}Процесс установки * Убираем все посторонние файлы из корня задачи, в первую очередь авторские решения и скомпилированные из них экзешники. ** Для переноса в подпапку {{old/}} можно запускать команду вроде {code} move *.exe *.cpp *.pas *.py *.java old/ {code} ** В корне нужно оставить (или вернуть после переноса) следующие файлы: {code} coact.exe checker.exe {code} * Устанавливаем слой совместимости с DL ** Копируем файлы из [{{release.rar}}|http://dl.gsu.by/images/agulenko/neerc/release.rar] в папку с задачей ** Добавляем в начало {{task.cfg}} следующие строки: {code:title=task.cfg} CHECKER = 1 CHECKSUBJECT = FILE CHECKFILES = {*.*} TYPE = INTERACTIVE {code} ** Меняем {{TIME_LIMIT}} в {{task.cfg}}; ставим ограничения в {{coact.bat}} * Тестируем ** Пробуем отсылать авторские решения на {{Pascal}}/{{C+\+}}/{{Java}} *** При наличии непонятных проблем проверить папку установленной задачи на наличие посторонних файлов (в частности, {{*.exe}}) h2. {anchor:TODO}TODO * Интерфейс: ** Изменить отображаемое ограничение по времени (значение в {{task.cfg}} больше фактического) * Тестирование: ** прикрутить тестирование решений на Java (прежде всего авторских): *** добавил в скрипты компиляции Java генерацию {{solution.bat}}, в {{stdswp}} -- передачу его содержимого как команды запуска решения **** разнести изменения файлов {{compile_java?.cmd}} и {{stdswp.exe}} по машинам (нету на Nit5) ** установить Java 7 на сервер тестирования (нету на Nit и Nit3) *** или можно портировать {{Interact}} и {{Check}} под Java 6: **** копируем файлы из [{{prepare.rar}}|http://dl.gsu.by/images/agulenko/neerc/prepare.rar] в папку с задачей **** запускаем {{prepare.bat}} **** при наличии ошибок компиляции правим код в указанных местах и снова запускаем {{prepare.bat}} **** удаляем содержимое {{prepare.rar}} из папки с задачей |