Прикладное программирование

Регламент проведения номинации «Прикладное программирование»
IX Поволжской открытой олимпиады по информационным технологиям «Волга-ИТ’17»

1. Отборочный (заочный) этап

1.1. Отборочный (заочный) этап по номинации «Прикладное программирование» проводится в формате домашнего задания с 20 марта по 02 апреля 2017 года.

1.2. Участники олимпиады, регистрируясь на сайте Олимпиады (http://volga-it.org), после выбора номинации «Прикладное программирование» получают доступ к личному кабинету.

1.3. Через личный кабинет зарегистрированные участники смогут ознакомиться с конкурсным заданием. Доступ к конкурсному заданию закрывается в момент окончания регистрации, а именно 24 часа 00 минут 02 апреля 2017 г.

1.4. Выполненное задание заочного этапа размещается участником в его личном кабинете не позднее 23.59 02 апреля 2017 г. Выполненные задания заочного этапа, размещенные после указанного времени, рассматриваться не будут.

1.5. Оценка работ, полученных в рамках заочного этапа, будет проводиться судейской коллегией, состоящей из представителей рабочей группы номинации «Прикладное программирование».

1.6. Участники отборочного (заочного) этапа смогут ознакомиться с результатами оценки выполненных заданий на сайте Олимпиады (http://www.volga-it.org/участники) в срок до 05 апреля 2017 г.

В случае отсутствия у участника информации о количестве набранных баллов он может обратиться к представителям Оргкомитета (info@volga-it.org) за уточнением информации.

1.7. Формирование списка участников финального (очного) этапа Олимпиады происходит в соответствии с п.п. 3.3.2-3.3.3 Положения об организации и участии в IX Поволжской открытой олимпиады по информационным технологиям «Волга-ИТ’17».

2. Финальный (очный) этап

2.1. При проведении финального (очного) этапа кроме необходимого программного обеспечения организаторы предоставляют электронные справочники по языкам программирования.

2.2. Продолжительность очного этапа составляет 9 часов, из которых 1 час отводится на обеденный перерыв. По истечении времени проведения тура запрещено выполнять какие-либо действия на компьютере.

2.3. Во время этапа участники имеют возможность обратиться к членам жюри с уточняющими вопросами, касающимися условий задач и предполагающими ответ «Да» или «Нет». Жюри оставляет за собой право оставить вопрос без комментариев.

2.4. Запрещается использование любых электронных и бумажных средств хранения или передачи информации: калькуляторов, сотовых телефонов, портативных компьютеров, дискет, флэш-карт, аудиоустройств, бумажных записей, справочников, книг и др. (кроме предоставленных организаторами). Участникам запрещено общаться друг с другом. Участнику запрещен просмотр/редактирование чужих данных. За нарушение правил участия в олимпиаде участник может быть отстранён от участия с аннулированием достигнутых результатов.

3. Требование к работе участника

3.1. Используемые языки и технологии

Язык программирования

Среда разработки

C++ и Qt

MS Visual Studio Express и Qt Creator

C# и .NET

MS Visual Studio Express

Java и JavaFX

Eclipse


3.2. Приложение должно содержать алгоритмическую часть и иметь графический пользовательский интерфейс. Дополнительно в каждой работе должна присутствовать возможность чтения из входного файла начальных данных и записи результата в выходной файл.

4. Методика оценки работ участников

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

Результаты выполнения заданий оцениваются исходя из следующих критериев:

· функциональность,

· правильность (корректность),

· эффективность,

· структура кода,

· алгоритмы.

5. Пример задания на секцию «Прикладное программирование»

Уровень сложности 1 (базовый вариант – 400 баллов за полную реализацию) Карта игры представляет собой прямоугольное поле. В игре участвуют 2 активных объекта – танк компьютера (TC) и танк игрока (TU). Танк игрока управляется с клавиатуры пользователем. Танк компьютера управляется автоматически. Перемещение танков дискретно во времени. Один такт игры – 1 секунда. Размер игрового поля, начальное положение танков игрока и компьютера определяется в специальном файле (карта игры, формат прилагается).

За один такт танк может:

1. Остаться на месте

2. Повернуться на 90 градусов

3. Переместиться по направлению движения на 1 ячейку

4. Произвести выстрел.

Описание поведения снаряда:

1. Снаряд летит по направлению движения.

2. Дальность стрельбы – бесконечность.

3. Скорость перемещения снаряда – бесконечность v.

Все должно быть отрисовано в реальном масштабе времени – 1 кадр в секунду. Управление танком игрока производится с клавиатуры.

Стрелка влево – поворот танка налево на 90 градусов.

Стрелка вправо – поворот направо на 90 градусов.

Стрелка вверх – начало движения вперед.

Стрелка вниз – остановка танка.

Танк компьютера должен находить путь до танка игрока и двигаться к нему по кратчайшему расстоянию. В случае выхода на прямую видимость танка игрока танк компьютера должен производить по нему выстрел.

Примечание: Под кратчайшим расстоянием предполагается путь, который позволит максимально быстро произвести выстрел в танк. Т.е. минимальный путь определяется скоростью движения танка, снаряда и скоростью поворота танка. При расчете минимального пути считать, что игрок неподвижен.

Для представления игрового поля допускается использование минимальных примитивных геометрических объектов, позволяющих объективно оценить положение на экране (например, танк можно отобразить равнобедренным треугольником, вершина которого показывает направление движения танка. Для отображения объектов игры Вы можете использовать приложенные к заданию библиотеки картинок. Карта игры загружается из файла. Файл карты имеет текстовый формат.

Формат следующий:

NX NY

XXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXX

Где:

NX – количество столбцов в карте,

NY – количество строк в карте,

X – одна позиция на карте,

'S' – каменная стена, непреодолимая танком и не пробиваемая снарядом,

'W'-вода, непреодолимая танком, но снаряд может пролетать над ней,

' ' - незанятая ячейка,

'X' – танк игрока (ячейка под ним считается свободной),

'Y' — танк компьютера.

В архиве примера реализации игры в папке Resources находятся готовые изображения для использования:

Brick.bmp – Стена

Ground.bmp – Земля

Tank.bmp – Танк компьютера

Tank-mask.bmp – Маска для танка

Tank-mask2.bmp – Маска для танка

UserTank.bmp – Танк игрока

Water.bmp – Вода

Пример карты:

6 8

SSSSSS

S XS

S WW S

S WW S

S S

S S S

SYS S

SSSSSS

Усложнение 1. (дополнительные 250 баллов за полную реализацию) – выдаётся после выполнения первого задания любым из участников.

Реализовать плавное перемещение объектов: дискретность времени не более 0.2 с. Скорость движение танка 1 ячейка в секунду. Скорость перемещения снаряда – 5 полных ячеек за 1 секунду. Скорость поворота — 180 градусов в секунду. Требуется красивая отрисовка по кадрам – перемещения, поворота и т.д.

Добавить возможность уничтожения танков. Считать за 1 попадание снаряд отнимает единицу жизни. Начальная энергия танка компьютера 10, игрока 100 единиц. После победы одного из игроков вывести соответствующее сообщение.

Усложнение 2. (дополнительные 324 балла за полную реализацию)

Сделать произвольное количество танков компьютера (от 1 до 100). Они не могут одновременно занимать одну и ту же ячейку. Танки компьютера не должны преднамеренно стрелять друг в друга (то есть, если танк имеет возможность стрелять в игрока, но путь занят другим танком, то стрельба запрещена).

Критерии оценки тестового задания:

1) Визуальный контроль:

· Танк пользователя должен четко реагировать на команды пользователя.

· Танки противника должны находить путь к целей.

· Танки не должны наезжать на препятствие и друг на друга.

· Корректная отрисовка всех объектов.

· Скорость отрисовки должна соответствовать требуемой. Для базового задания танк сразу переходит между соседними клетками, повороты без задержек. При выполнении усложненного варианта необходимо обеспечить плавность движения (скорость отрисовки не менее определенной в задании).

· Отсутствие мерцаний при перерисовке

2) Контроль на тестовых картах

На тестовых картах траектория движения танков противника должна соответствовать расчетной. Пример карты

а)

SSSSSSS

S S

S S S

S S XS

SYSSS S

S S

SSSSSSS

б)

SSSSSSSSSSS

S S

S S S

S S XS

SYSSSSSSS S

S S

SSSSSSSSSSS

Для карты а) оптимальная траектория танка Y является обход препятствия снизу, а для б) сверху, т.к. в последнем случае танк выходит на позицию стрельбы раньше, а скорость движения снарядов значительно выше, чем у танка. При решении спорных вопросов (равном результате) у участников, дополнительные баллы могут начисляется, за «качество» исходного кода. Т.е. наличие классов, использование принципов ООП, хороший стиль написания кода (адекватные названия переменных, классов, функций, исключение повторяющегося кода, отсутствие слишком длинных функций).

Примечание: В любом сложном программном продукте допускается наличие 'багов', что также не является исключением и для заданий олимпиады. При обнаружении багов в задании они оцениваются по значимости, повторяемости и могут понизить оценку от 0 до 20-30%. (При высокой повторяемости бага, значительном влиянии ее на результаты работы программы, задание может признано не выполненным полностью). Пример: «Танки не должны наезжать на препятствие и друг на друга». Если данное требование выполнено, но танки изредка (например, 1 раз на 10 столкновений) наезжают друг на друга, то это считается незначительным багом. Однако, если они наезжают друг на друга через раз, то указанное требование («наезжать друг на друга») считается не выполненным.