Научно-методический журнал «ПРОф» № 001 - 2010 Автоматизация использования эталонных решений олимпиадных задач по программированию. Д.А. Слинкин Би бл ио те ка Ш ГП И В настоящее время стандартизованной формой представления решения олимпиадной задачи по программированию является программа, обрабатывающая текстовые исходные данные, поступающие на стандартный поток ввода и предоставляющая текстовый результат решения через стандартный поток вывода. Такая стандартизация позволяет упростить, ускорить и в идеале - автоматизировать проверку олимпиадной задачи с помощью прогона программы через набор эталонных тестов и анализа результатов. К сожалению, не всегда формулировка олимпиадной задачи подразумевает однозначность решения, а при автоматизированной проверке причиной такой неоднозначности может служить даже лишний «белый шум» на входе или выходе программы, не имеющий отношения к собственно правильности решения. Примером могут служить требования к виду и количеству разделителей, точности вещественных значений, кодировке и регистру символов, форме логических значений и т. д. Несоблюдение участником олимпиады любого из требований ведет к отверганию решения автоматизированной системой проверки, вне зависимости от фактической корректности решения. Система проверки не способна определить, в чем заключается ошибка, она просто констатирует несовпадение результата решения задачи с эталонным. Таким образом, участник олимпиады, решивший сложную задачу, но допустивший ошибки в оформлении (что повсеместно наблюдается среди малоопытных участников олимпиад), ставится в один ряд со студентами, вообще не решившими задачу или решившими ее неверно. К сожалению, невозможно найти выход из данной ситуации на уровне автоматизированной системы проверки решений олимпиадных задач, т. к. совершенно нереально заложить в систему все варианты ошибок оформления. Пожалуй, единственным решением указанной проблемы, на мой взгляд, является внедрение в практику проведения олимпиад эталонных решений. Эталонным решением олимпиадной задачи по программированию назовем программу, предоставленную участнику олимпиады в бинарном или другом, недоступном для изучения исходного кода виде, обеспечивающую корректное решение исходной задачи. Участник олимпиады самостоятельно формирует тестовые данные для такой программы и анализирует полученные результаты. Таким образом, любые ошибки в формировании исходных данных будут диагностироваться эталонным решением, а ошибки в результирующих данных участник олимпиады определит самостоятельно, обнаружив несовпадение результатов работы собственного и эталонного решений. В предлагаемом подходе, наряду с несомненными положительными моментами, имеется несколько сложностей. Во первых, каждая олимпиадная задача должна быть в обязательном порядке корректно решена и реализована на одном из языков программирования. Решение действительно должно быть эталонным, корректно обрабатывать граничные условия, функционировать на произвольном наборе данных, решать задачу за минимальное время с минимальным потреблением ресурсов. В таком решении недопустимы необработанные исключительные ситуации, семантические ошибки и другие несоответствия условию задачи. Опыт применения эталонных решений показывает, что расхождения между формулировкой задачи и эталонным решением вызывает крайне негативную реакцию участника олимпиады, так как ставит его в ситуацию неопределенности, что в условиях жестких временных рамок олимпиады является недопустимым. Как ни странно, столь жесткие требования к разработке эталонного решения приводят, при их выполнении, к некоторым положительным эффектам, а именно: к более четкой формулировке задачи и упрощению формата исходных и результирующих данных. Научно-методический журнал «ПРОф» № 001 - 2010 Би бл ио те ка Ш ГП И Во вторых, предоставление участнику олимпиады эталонного решения подразумевает невозможность исследования исходного кода решения, что, в свою очередь, ограничивает применение скриптовых языков. Решение данной проблемы видится в разработке клиентсерверной веб-ориентированной службы, которая позволяет удаленно запускать эталонные решения на исполнение, с передачей им тестовых данных, с последующим получением и анализом результатов. В 2007 году в в Шадринском государственном педагогическом институте для автоматизации использования эталонных решений олимпиадных задач по программированию была разработана веб-ориентированная система Solver. В течении трех лет данная система применяется в качестве вспомогательного средства проведения олимпиад, развивается и совершенствуется. Система обеспечивает получение исходных данных от клиента, обработку их с помощью авторского эталонного решения и возврат результата обработки клиенту. Эталонные решения могут быть реализованы на любом языке программирования, в бинарной или скриптовой форме в виде внешних файлов. Дополнительно, решение может быть непосредственно встроено в систему в виде php-класса с перекрытием нескольких свойств и методов. Базовым требованием к внешним эталонным решениям является использование исключительно стандартных потоков ввода-вывода для организации приема-передачи данных. Встроенные эталонные решения реализуются наследованием одного из классов системы Solver, перекрытием единственного метода и описанием информационной составляющей задачи в нескольких полях нового класса. В 2010 году мы планируем публикацию исходных текстов системы Solver в виде репозитария git с доступом через веб-портал ШГПИ shgpi.edu.ru. Дополнительно, мы готовим развертывание экземпляра системы Solver, включающего в себя подборку наиболее интересных задач с олимпиад ШГПИ 2007-2009 годов.