Рыцарский турнир XX века
АрхивЛюди соревнуются с незапамятных времен. Если верна теория Дарвина, то вся история жизни на земле - это одно сплошное состязание в силе, выносливости, уме и хитрости. Что нового могут внести в эту копилку наши современники? Ясно, что почти ничего.
Поэтому я горжусь знакомством с человеком, которому удалось поставить на ноги новый вид спорта. То, что сделать это не просто, надеюсь, понятно всем: нужно разработать правила игры, найти желающих участвовать, провести состязания. Ему приходилось быть и Верховным судьей, и Генеральным прокурором... Спорт, о котором я рассказываю, - это командный турнир школьников по программированию. А человек, воплотивший его в жизнь, - Яков Зайдельман, сотрудник академического Института программных систем из города Переславля-Залесского.
На майские праздники в старинном Переславле прошел очный финал этого турнира. Получился он очень представительным и, теперь это можно уже смело сказать, удался: на финал приехало семь лучших российских команд и две белорусских. Автору этой статьи также удалось попасть на финал, причем, сразу в двух ипостасях - ехал я в качестве корреспондента "Компьютерры", а приехал, и оказался... членом жюри.
Надо сказать, что регламент самого соревнования был предельно жестким: день на акклиматизацию, два дня на работу над программами, а затем - турнир внутри турнира. Но давайте обо всем по порядку.
Что это за штука такая - командный турнир? Скорее всего, все читатели "Компьютерры" слышали о школьных олимпиадах (не только по программированию и информатике, но и по другим предметам). Наверняка кому-то довелось в них участвовать. Поэтому мне будет легче описывать турнир по программированию, объясняя его основные отличия от обычных предметных олимпиад.
Отличие первое и главное: коллективность. В турнире участвуют не программисты-индивидуалы, а команды из 3-5 человек. Не секрет, что далеко не всякие пять квалифицированных взрослых программистов, объединившись вместе, составят сильную команду. Вдвойне это относится к школьникам, чей опыт в коллективном умственном труде весьма невелик. Ведь вся школа, фактически, учит работать только индивидуально. А жизнь потом переучивает.
Отличие второе: технология. Для участия в олимпиаде всегда нужно куда-то прийти или приехать, а затем в строго отведенное время сделать предложенные задачи. Турнир - точнее, его заочный этап - пришел к участникам сам: материалы турнира рассылались участникам электронной почтой. При этом задание заочного тура было выдано на неделю, а сами задачи были специально сформулированы достаточно расплывчато, оставляя командам простор для собственной фантазии - "свободного плавания". Мне кажется, что преимущества такой технологии перед традиционным олимпиадным стилем неоспоримы: каждый участник команды работает в привычных условиях, в удобное для себя время, при необходимости заглядывая в любые справочники и учебники. Таким образом, работа в турнире становится естественным продолжением учебы.
Отличие третье: открытость. Если вы участвовали в олимпиадах, вам почти наверняка хотелось посмотреть свою работу после того, как все работы проверены, а олимпиада завершилась. Ручаюсь, что в подавляющем большинстве олимпиад такой возможности вам никто не даст. А уж чтобы посмотреть чужие работы - это точно исключается. Здесь командный турнир оказался вне конкуренции: все работы команд (под шифрами, естественно) были выложены на всеобщее обозрение на FTP-сервер. Читайте, запускайте программы своих соперников, сравнивайте со своими - пожалуйста! А самое главное, турнир-то еще продолжается! Мнение каждого, если оно хорошо аргументировано, может существенно повлиять на определение победителей. Если рассказывать более подробно, то на турнире было предусмотрено "перекрестное рецензирование": каждая команда была обязана не просто просмотреть, а полностью отрецензировать некоторое количество работ других команд. Именно из этих "оценочных" рецензий и складывалось решение жюри: считать победителями заочного этапа команды такие-то и такие-то.
Я не случайно упомянул в заголовке эпитет "рыцарский". В турнире действительно ощущалась какая-то особенная атмосфера, преобладали взаимное уважение и корректность. Вот совершенно типичный пример: программа (не своя - конкурентов!) не желает компилироваться и запускаться. А если и запускается, то сразу же "виснет". Казалось бы - чего тут думать? Можно писать разгромную рецензию и отправлять ее в Оргкомитет турнира: одним конкурентом станет меньше. Однако сплошь и рядом было как раз обратное: рецензенты перечисляли, сколько нетривиальных действий им пришлось проделать, чтобы скомпилировать и нормально запустить эту программу. А после этого ставили программе высшие оценки - четверки и пятерки.
Всего в заочном туре участвовало 119 команд, разбросанных от Мурманска до Хабаровска. Никто - ни организаторы, ни сами участники - не обращал внимания на государственные границы. Участники из Одессы, Лиепаи, Бреста и Семипалатинска писали все задания и рецензировали чужие работы наравне с российскими школьниками. После первого рецензирования было оставлено 30 лучших работ, из которых затем отбирались победители - команды, получившие право участвовать в финале.
Итак, финал... Задание финала, выданное участникам, еле уместилось на пяти страницах печатного текста. Хотя суть задания можно описать одним предложением: командам предлагалось написать программу для игры "Эрудит". (Для справки: "Эрудит" - это отечественный вариант очень популярной в Америке настольной словесной игры Scrabble.) А самая главная изюминка задания: в конце концов программы участников должны были сыграть между собою свой турнир - по игре "Эрудит".
Забегая немного вперед, скажу, что проигравших не оказалось: все программы играли, причем, некоторые очень неплохо. Одна из программ выиграла у меня партию с громадным отрывом в очках (конечно, ей далеко до Deep Blue, как мне - до Каспарова, но...). Однако хорошо известно такое шутливое правило: работа занимает все отведенное для нее время. Поэтому к исходу второго дня, когда школьникам полагалось закончить работу, почти во всех программах еще оставались разные мелкие недоделки. Жюри приняло решение еще на полдня продлить время, отведенное на разработку программ, - и только после этого провести турнир по "Эрудиту" между компьютерами. Выиграла этот мини-турнир, а с ним и главный турнир, программа, написанная командой 19-й школы из уральского города Миасса.
Второе место в финале турнира жюри присудило двум творческим коллективам: команде школы #41 города Ижевска и сборной Гомеля. Алгоритм, разработанный ижевчанами, вообще оказался самым сильным из всех написанных школьниками. Но из-за не замеченной ими вовремя ошибки их программа иногда делала ходы не по правилам, а это немедленно наказывалось - в партии засчитывалось поражение. (Позже, когда командам еще раз отвели дополнительное время, ижевчане быстро устранили эту свою ошибку.)
Третьи места поделили еще три команды - школа #18 Миасса, лицей при УрГУ (Екатеринбург) и гимназия #1 Бреста.
А еще в эти четыре майских дня как-то уместились и посещение школьниками и учителями-руководителями команд университета города Переславля, и экскурсия по городу, и увлекательная игра "Что? Где? Когда?". За все это большое спасибо Оргкомитету турнира - Я. Н. Зайдельману, В. Н. Юмагужиной, В. В. Тарасовой. Отдельное спасибо нужно сказать и спонсорам турнира - Министерству общего и профессионального образования РФ, Институту программных систем РАН, АО "ДиалогНаука", а также всем тем, кто помогал отдельным командам - участницам финала.
Стоит рассказать и о "побочных результатах" проведенного турнира. Возможно, как раз они и являются его главными итогами.
Очень многие из руководителей команд, принявших участие в заочном туре, - обыкновенные школьные учителя информатики. Опыт работы с электронными коммуникациями они имели, мягко говоря, небольшой. А тут грянул турнир, а с ним пришла необходимость делать многое, до чего раньше руки не доходили: русифицировать компьютер, принимать и отправлять по e-mail двоичные файлы, активно работать с FTP-серверами. Короче, для рядового учителя ситуация патовая: "видит око, да зуб неймет". И вот за очень короткое время, пока шла подготовка к турниру, эти самые учителя прошли всю дистанцию обучения новым премудростям. Сначала слезно просили организаторов "прислать в виде исключения все напрямую", затем (после отказов делать какие-либо поблажки) внимательно изучали пакет разосланных инструкций и пробовали работать по инструкциям. Если это не получалось сразу, задавали вопросы, получали на них ответы, снова пробовали, и, наконец, - благодарили за то, что их заставили научиться всем возможностям электронной почты. Многие руководители команд написали, что только после турнира осознали необходимость иметь e-mail прямо в школе. Очень возможно, что подобные соревнования будут еще и толчком для включения школ в Интернет - ведь брать с FTP напрямую - гораздо удобнее, чем пользоваться шлюзом.
Немного истории. Турнир, о котором я рассказал, далеко не первое соревнование в "спортивном программировании". Командные соревнования по программированию среди студентов проводятся уже довольно давно. Командные турниры для школьников тоже проводились ранее - в Красноярске, Миассе, Воронеже. Да и Переславль стал "турнирной столицей" уже во второй раз (впервые это произошло два года назад: в 1994-95 учебном году). Но в этом году турнир впервые прошел именно так, как это было рассказано выше, - и, несомненно, запомнится всем, принимавшим в нем участие. А это означает, что родилось действительно новое соревнование. Хочется верить, что его ждет долгое и безоблачное будущее.