Создание онлайн-судьи с нуля

Я участвовал в нескольких конкурсах онлайн-программирования и обнаружил, что онлайн-судьи использовали совершенно замечательную функциональность.

Подойдя к теме, мой колледж также собирается провести конкурс онлайн-программирования, и я отвечаю за это событие. Я оценивал свои варианты для внедрения онлайн-судьи. Конечно, я мог бы использовать некоторых уже доступных судей, таких как SPOJ, но мне показалось, что я и некоторые из моих друзей тоже могут попытаться построить его. Если мы потерпим неудачу, мы всегда можем от них отказаться.

Так может ли кто-нибудь, пожалуйста, дать мне несколько очерков или ресурсов относительно того, как мне это понять? Было бы также полезно, если я получу некоторое представление о том, как судьи достигают "песочницы". Мы получили пару месяцев в руке.

ОБНОВЛЕНИЕ. Это результат моих усилий за 2 недели после того, как задал еще пару вопросов о самой SO http://github.com/anomit/loki

Ответы

Ответ 1

Я действительно не знаю, о чем речь. Сложно написать дизайнерскую спецификацию для судьи с нуля.

Вы запускаете вещь с заданными входными данными и подаете выходные данные в тестовую программу, написанную автором вопроса (потому что не всегда есть уникальный ответ). Люди делают песочницу, запуская ее удаленно на чистой машине.

Добавить: и, пожалуйста, никакого анализа кода. У вас есть два варианта: либо вы делаете этот анализ кода доступным для конкурсантов во время конкурса, либо нет.

  • Если вы это сделаете: они проводят последние 5 минут своего времени, чтобы убедиться, что нет точек вниз. В этом процессе код становится намного хуже.

  • Если вы этого не сделаете: вы нарушаете "верховенство закона": люди знают механизм предоставления очков (также, почему вы всегда даете им первый тест в тексте проблемы).

Обновление: Извините, я сначала не заметил, что вы задаете некоторые конкретные вопросы. Песочница может быть менее важной, чем вы думаете - в хорошей конкуренции код становится общедоступным, поэтому "хакеры" будут действительно смущены. Тем не менее, я думаю, что я видел практику, когда вы не можете напрямую работать с i/o, файловой системой или любым другим взаимодействием с системой (они пишут main() для вас, и это всегда одно и то же: вы только записываете часть алгоритма с заданным потоки ввода/вывода). Ваш судья должен запускать только то, что он сам скомпилировал из источника.

Ответ 2

Я не уверен, что такое онлайн-судья, но я полагаю, что это часть программного обеспечения для оценки программ для правильности.

Я бы использовал для этого библиотеки для сборки, тестирования и анализа. Примеры: Ant, JUnit, и Checkstyle.

Вы должны взять код, предоставленный участником, и опустить его в файл. Используйте инструмент построения для его компиляции.

  • Ошибка сборки: 0 баллов
  • Сборка завершается с предупреждениями 1 балл
  • сборка завершается без предупреждений 2 балла.

Затем запустите несколько тестов, которые проверяют правильность решения.

  • Для каждого пройденного теста: 1 балл

Наконец, запустите программу анализа кода, чтобы оценить качество кода.

  • минус 1 балл за каждую жалобу утилиты

Конечно, вы можете перенести значения точки в ваши потребности.

Ответ 4

Посмотрите wikipedia. В конце он имеет большие ресурсы.