Создание онлайн-судьи с нуля
Я участвовал в нескольких конкурсах онлайн-программирования и обнаружил, что онлайн-судьи использовали совершенно замечательную функциональность.
Подойдя к теме, мой колледж также собирается провести конкурс онлайн-программирования, и я отвечаю за это событие. Я оценивал свои варианты для внедрения онлайн-судьи. Конечно, я мог бы использовать некоторых уже доступных судей, таких как SPOJ, но мне показалось, что я и некоторые из моих друзей тоже могут попытаться построить его. Если мы потерпим неудачу, мы всегда можем от них отказаться.
Так может ли кто-нибудь, пожалуйста, дать мне несколько очерков или ресурсов относительно того, как мне это понять? Было бы также полезно, если я получу некоторое представление о том, как судьи достигают "песочницы". Мы получили пару месяцев в руке.
ОБНОВЛЕНИЕ. Это результат моих усилий за 2 недели после того, как задал еще пару вопросов о самой SO http://github.com/anomit/loki
Ответы
Ответ 1
Я действительно не знаю, о чем речь. Сложно написать дизайнерскую спецификацию для судьи с нуля.
Вы запускаете вещь с заданными входными данными и подаете выходные данные в тестовую программу, написанную автором вопроса (потому что не всегда есть уникальный ответ). Люди делают песочницу, запуская ее удаленно на чистой машине.
Добавить: и, пожалуйста, никакого анализа кода. У вас есть два варианта: либо вы делаете этот анализ кода доступным для конкурсантов во время конкурса, либо нет.
-
Если вы это сделаете: они проводят последние 5 минут своего времени, чтобы убедиться, что нет точек вниз. В этом процессе код становится намного хуже.
-
Если вы этого не сделаете: вы нарушаете "верховенство закона": люди знают механизм предоставления очков (также, почему вы всегда даете им первый тест в тексте проблемы).
Обновление: Извините, я сначала не заметил, что вы задаете некоторые конкретные вопросы. Песочница может быть менее важной, чем вы думаете - в хорошей конкуренции код становится общедоступным, поэтому "хакеры" будут действительно смущены. Тем не менее, я думаю, что я видел практику, когда вы не можете напрямую работать с i/o, файловой системой или любым другим взаимодействием с системой (они пишут main()
для вас, и это всегда одно и то же: вы только записываете часть алгоритма с заданным потоки ввода/вывода). Ваш судья должен запускать только то, что он сам скомпилировал из источника.
Ответ 2
Я не уверен, что такое онлайн-судья, но я полагаю, что это часть программного обеспечения для оценки программ для правильности.
Я бы использовал для этого библиотеки для сборки, тестирования и анализа. Примеры: Ant, JUnit, и Checkstyle.
Вы должны взять код, предоставленный участником, и опустить его в файл. Используйте инструмент построения для его компиляции.
- Ошибка сборки: 0 баллов
- Сборка завершается с предупреждениями 1 балл
- сборка завершается без предупреждений 2 балла.
Затем запустите несколько тестов, которые проверяют правильность решения.
- Для каждого пройденного теста: 1 балл
Наконец, запустите программу анализа кода, чтобы оценить качество кода.
- минус 1 балл за каждую жалобу утилиты
Конечно, вы можете перенести значения точки в ваши потребности.
Ответ 3
Один поисковый запрос может быть для autograder.
Например:
http://www.users.muohio.edu/helmicmt/autograder/index.php
http://prisms.cs.umass.edu/mcorner/autograder
http://74.125.95.132/search?q=cache:VSuCE566d1oJ:www.cs.odu.edu/~gpd/msprojects/cpasupul.0/AutoGrader.ppt+autograder&cd=5&hl=en&ct=clnk&gl=us&client=firefox-a
Ответ 4
Посмотрите wikipedia. В конце он имеет большие ресурсы.