|
|
|
Тестирующая система
|
|||
|---|---|---|---|
|
#18+
Добрый день. Пишу небольшую системку для проверки решений задач учеников. Т.е. ученики посылают в систему файл на паскале/C++/Jav'e, система компилирует и выдает ответ - правильно или нет решена задача (напоминает правила олимпиад по программированию ACM). На данный момент стоят вопросы: 1. об определении есть ли в кодже ученика ассемблерная вставка. 2. как убивать выполняемое решение ученика по истечению определенного промежутка времени, т.е. если программа ученика написано не оптимально и долго работает, то завершать её автоматически и выдавать ответ что превышено время исполнения 3. Как ограничить программу по памяти, дав ей, к примеру, не более 64Мб. На этом моменте я застрял, помогите пожалуйста... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2009, 10:59:16 |
|
||
|
Тестирующая система
|
|||
|---|---|---|---|
|
#18+
Евпатий ЧередаНа данный момент стоят вопросы: 1. об определении есть ли в кодже ученика ассемблерная вставка. а какая разница ? всё равно нет прав что-либо сломать. Евпатий Череда2. как убивать выполняемое решение ученика по истечению определенного промежутка времени, т.е. если программа ученика написано не оптимально и долго работает, то завершать её автоматически и выдавать ответ что превышено время исполнения 3. Как ограничить программу по памяти, дав ей, к примеру, не более 64Мб.ulimit ? там можно задать количество процессорного времени и ограничения памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2009, 11:05:09 |
|
||
|
Тестирующая система
|
|||
|---|---|---|---|
|
#18+
Ёша какая разница ? всё равно нет прав что-либо сломать. Дело в том что нужно выдать ошибку - Ошибка компиляции и "надрать уши" юному хакеру. Ёш ulimit ? там можно задать количество процессорного времени и ограничения памяти. Для компиляции решений используются компиляторы языков C#, C++, Delphi - в связи с этим система будет работать под Windows. Но проблема в том что нужно выполнить решение ученика, и если превысило ограничения на данную задачу выдать ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2009, 11:48:20 |
|
||
|
Тестирующая система
|
|||
|---|---|---|---|
|
#18+
К сожалению данныя тестирующая не подходит. Требуется немного другой функционал. Я знаком с большинством нынешних тестирующий систем, к сожалению они далеки от идеала или же как МГУшная системы ejudje - очень сложна в настройках. Поэтому и решено было написать свою. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2009, 14:39:25 |
|
||
|
Тестирующая система
|
|||
|---|---|---|---|
|
#18+
По условию решение ученика читает данные из файла input.txt и пишет в файл output.txt Для каждой задачи есть набор тестов. Т.е. скомпилированному решению ученика даются по очереди тесты от 1 до N. Есть чекер - программа для проверки данных в выходном файле. Как запустить этот чекер для всех тестов ? Напрашивается решение для компиляции решения ученика и копирования в папку с этим решением по очереди файлов input.txt, затем выполнение скомпилированного решения и проверка с помощью чекера. Возможно ли обойтись без такого копирования ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 06:22:55 |
|
||
|
Тестирующая система
|
|||
|---|---|---|---|
|
#18+
Для того, чтобы проверить нет ли на C++ ассемблерных вставок надо 1. обработать препроцессором исходники 2. произвести лексический разбор выхлопа препроцессора. Я не помню C++ в деталях, но первое наверняка можно попросить сделать компилятор, а второе регулярным выражением или тулами типа Lex, JavaCC (или что там сейчас актуально) Я не понимаю в чем сложность ограничения по времени: запустил задачу, получил pid и проверяешь периодически не вылезло ли оно за ограничения. Если вылезло, то киляешь. Я думаю, даже на скриптах можно это сделать - какой-нибудь bash на юниксе и PowerShell на винде ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 08:26:59 |
|
||
|
Тестирующая система
|
|||
|---|---|---|---|
|
#18+
похоже как здесь: http://acmp.ru/article.asp?id_text=118 Напиши им, может поделятся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 09:27:57 |
|
||
|
Тестирующая система
|
|||
|---|---|---|---|
|
#18+
Евпатий ЧередаДобрый день. Пишу небольшую системку для проверки решений задач учеников. Т.е. ученики посылают в систему файл на паскале/C++/Jav'e, система компилирует и выдает ответ - правильно или нет решена задача (напоминает правила олимпиад по программированию ACM). На данный момент стоят вопросы: 1. об определении есть ли в кодже ученика ассемблерная вставка. Pablo_new Парсить сам текст перед компиляцией, хотя бы через теже регулярки 2. как убивать выполняемое решение ученика по истечению определенного промежутка времени, т.е. если программа ученика написано не оптимально и долго работает, то завершать её автоматически и выдавать ответ что превышено время исполнения Pablo_new Анализ когда pid процесса когда запущен и долго ли крутиться, если долго то килить его. 3. Как ограничить программу по памяти, дав ей, к примеру, не более 64Мб. Pablo_new Сходу решения не вижу. но если затыка сурьезная то можно подумать. На этом моменте я застрял, помогите пожалуйста... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 12:20:20 |
|
||
|
Тестирующая система
|
|||
|---|---|---|---|
|
#18+
ОК, а как тогда передать передать скомпилированному решению в виде Exe-шника данный поток ? Вот к примеру есть какое то решение на паскале автор var f1, f2: Text; begin Assign(f1, 'input.txt'); Assign(f2, 'output.txt'); Reset(f1); Rewrite(f2); ... Close(f1); Close(f2); end. Допустим что будет следующая струтура папок: ./checker.exe - чекер ./solves/solve.exe - решение ученика ./tests/ - тесты: ./tests/1/input.txt ./tests/2/input.txt ... Как мне породить из Чекера процесс solve.exe (решение ученика), чтобы это решение могло обратиться к файлам тестов ? Получается что я должен перенаправить поток из файла. Нужно использовать CreateProcess + TMemoryStream (для Delphi) , так ли это ? Сейчас задался вопросом - как перенаправить чтение из файла в чтение потока. т.е. перенаправить чтение данных файла в чтение данных с консоли. Есть примеры перенаправления "Creating a Child Process with Redirected Input and Output" из МСДНа, но только там перенаправляется выходной с консоли в файл. А мне нужно перенаправить чтение из файла в чтение потока, и вывод не в файл а на консоль. В силу того что ничего не смог сам сделать, прошу вашей помощи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2009, 05:57:51 |
|
||
|
Тестирующая система
|
|||
|---|---|---|---|
|
#18+
> А мне нужно перенаправить чтение из файла в чтение потока, и вывод не в файл а на консоль. Так... а зачем тогда вообще требовать чтобы в решении ученика открывались какие-то файлы? Зачем там assign, reset, rewrite, close? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2009, 14:35:04 |
|
||
|
Тестирующая система
|
|||
|---|---|---|---|
|
#18+
Решение ученика zzz.exe читает числа из stdin и выводит в stdout их квадраты: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Простейшая проверяющая система на Питоне: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. и всё это в цикле по всем тестовым файлам, с замером времен и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2009, 16:26:56 |
|
||
|
Тестирующая система
|
|||
|---|---|---|---|
|
#18+
а если проверяемый экзешник зависнет надолго? Значит, его ответ надо читать в другом потоке и если превышен тайм лимит убивать его в главном. Я убиваю его утилитой PsKill.exe; из самого Питона ну никак нельзя. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2009, 23:51:29 |
|
||
|
Тестирующая система
|
|||
|---|---|---|---|
|
#18+
RT183.1, Большое спасибо за исходники, но к сожалению требуется именно работа с файлами, т.к. тестирующаю проверяет не только навыки олимпиадного программирования, но и умение работать учеников с файлам, т.е. самый начальный уровень. Вот поэтому и стоит задача перенаправления потомка. Вообще изначально была идея реализовать как чтение данных из файла так и из потока, как, к примеру - интерактивные задачи на полуфинале ACM в этом и прошлом годах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2009, 22:53:54 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36286013&tid=1344105]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
199ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 495ms |

| 0 / 0 |
