Установка нового проверяющего модуля для интерактивной задачи

Новая, более простая версия установки!

Для установки нового проверяющего модуля для интерактивных задач требуется следующий формат 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