Установка нового проверяющего модуля для интерактивной задачи
Новая, более простая версия установки!Для установки нового проверяющего модуля для интерактивных задач требуется следующий формат task.cfg:
TYPE = USERS
CHECKER = 'cmd /c final.cmd $SOLUTION$ >D:\Temp\DelTA.$$$\TM1\log.txt'
CHECKFILES = {*.*}
CHECKSUBJECT = FILE
EXTTYPE = 'Пользовательская'
В этом случае при тестировании будет вызван final.cmd с переданным ему решением. Результат работы батника можно смотреть здесь: D:\Temp\DelTA.$$$\TM1\log.txt (путь к нему можно редактировать по-вкусу)
Пример интерактивной задачи можно найти здесь: "Финалы международных олимпиад по информатике"\IOI2003\День2\Угадайте корову ( ID = 12999 )
Пример проверяющего модуля для интерактивной задачиFinal.cmd:
@rem Compile start
if not %~x1 == .pas goto find_er1
copy %1 player1.pas
D:\DelTA\Lngs\freepas\bin\go32v2\COMP.EXE player1.pas .
@rem Compile *.pas end
goto ok1
:find_er1
if not %~x1 == .fre goto find_er2
copy %1 player1.fre
D:\DelTA\Lngs\freepas\bin\go32v2\COMP.EXE player1.fre .
@rem Compile *.fre end
goto ok1
:find_er2
if not %~x1 == .cpp goto find_er3
copy %1 player1.cpp
D:\DelTA\Lngs\BC\BIN\BCC.pif -ml player1.cpp
@rem Compile *.cpp end
goto ok1
:find_er3
echo ^0>$result$.txt
echo Incorrect Language!>>$result$.txt
exit 0
:ok1
@rem Find player1.exe
if exist player1.exe goto ok2
echo ^0>$result$.txt
echo Compiling error!>>$result$.txt
exit 0
:ok2
echo ^0 _0>res.res
@rem Запуск
программы по 20-ти тестам
for /L %%i in (1,1,20)
do call doing.cmd %%i
del guess.in
del logfile.log
del result.txt
del temp.hi
del ppas.bat
del res.res
del link.res
del player1.o
exit 0
Doing.cmd:
if exist
guess.in del guess.in
copy %1.in guess.in
writebad.exe %1
WINTIMER.EXE "stdswp.exe player1.exe reactgrader.exe"
2700 >temp.hi
pskill.exe reactgrader.exe
pskill.exe WINTIMER.EXE
pskill.exe stdswp.exe
pskill.exe player1.exe
pskill.exe ntvdm.exe
check.exe
pskill.exe ntvdm.exe
Вопросы, которые могут возникнуть:
[Q] Почему вместо привычного
чекера используется батник?
[A] Было несколько причин использовать батник вместо
привычного чекера. Во первых - это простота в отладке, во вторых -
надёжность, в третьих - наглядность.
[Q] В каком каталоге
запускается final.cmd и какие файлы ему
доступны?
[A] Delta копирует все файлы
относящиеся к той или иной задаче (в том
числе и final.cmd) в специальную папку. В этой
папке и запускается final.cmd.
[Q] Какие использованы ключи для
компиляции?
[A] Использованы
стандартные ключи, которые использует Delta.
Они сохраняются в файле Delta.cfg. Посмотреть их
можно запустив Delt'у под своим аккаунтом, и
выбрав соответствующий пункт в меню.
[Q] Почему здесь файлы *.pas
компилируются Free Pascal'ем?
[A] Потому, что программа stdswp.exe,
которая организует "диалог" двух
других программ работает только с 32-х
битными приложениями.
[Q] Где лежат и какую функцию
выполняют следующие файлы: stdswp.exe, wintimer.exe,
pskill.exe?
[A] Stdswp.exe организует "диалог"
двух программ, т.е. перенаправляет вывод одного приложения на
ввод другого, и наоборот. Результат работы этой программы
можно посмотреть в файле logfile.log. Архив с исходниками можно
взять здесь (автор: Алексей Толкачёв).
Wintimer.exe - он запускает процесс, указанный
ему первым параметром. По истечении времени (в миллисекундах),
которое указывается вторым параметром,
wintimer.exe снимает процесс.
Pskill.exe - убивает процесс. В
ходе работы батника может возникнуть такая ситуация, когда зависнет какое-то
количество приложений. Чтобы предотвратить сбой в работе батника мы и убиваем те
процессы, которые вы могли наблюдать выше.
Их можно найти здесь:
\\nit_server\delta\process
[Q] Для чего нужен вызов
writebad.exe на каждом тесте?
[A] Перед каждым вызовом stdswp.exe на
очередном тесте, вызывается writebad.exe, который
записывает в файл $result$.txt текущее количество
баллов и сообщение о том, что всё упало. На тот случай, если на каком-нибудь
тесте что-то упадёт.
[Q] Где можно взять help по командной строке?
[A]
Его можно взять здесь, или открыть файл C:\Windows\Help\ntcmds.chm на любом компьютере с ОС Windows 2000 и выше.
© Denis Prischepov, 2004
e-mail
Last update: 26.04.2004