Анализ на първи кръг и крайни резултати от задача #1 от конкурса на PC Magazine Bulgaria и Telerik

 

Най-после сме готови с резултатите от първия кръг на състезанието. За първи път в България се провежда състезание, в което се изисква реализация и на алгоритмична, и на приложна част. И както всяко първо нещо, то създаде някои трудности – както за състезателите, така и за проверяващите. Тук ще се опитаме да обобщим представянето на участниците, ще направим няколко забележки и няколко похвали. Също ще дадем спецификацията на системата, върху която бе проведено това тестване и върху която ще бъдат проведени всички следващи. И, разбира се, ще дадем и самите резултати (надолу за тези които са нетърпеливи)!

За оценяването и резултатите от алгоритмичната част

Алгоритмичната част не беше много трудна – това си личи и от резултатите. Различните игрални полета определено са повлияли на точките, което показва, че има състезатели, които са писали алгоритми по-подходящи за съответно по-малки и по-големи игрални дъски. Сблъсъците между написаните алгоритми бяха сравнително стабилни – служебните победи бяха рядкост. Естествено сблъсъците между отделните алгоритми бяха автоматизирани и проведени няколкократно, за да се осигури коректност на тестването. Дори никой не успя да събори тестващата машина, което си е постижение.

Проведено беше и тестване за това как алгоритмите се справят с некоректен вход. Резултатите отново бяха добри – повечето състезатели се справят с над 80% от примерите с некоректни входни данни.

Това което направи лошо впечатление, е че някои състезатели не бяха спазили изискванията за вход и изход. Тъй като това е първи кръг, решихме да сме благосклонни и да не пишем 0 точки на алгоритми с тези проблеми (в други състезания един излишен празен ред се счита за грешка, защото пречи на автоматизираното тестване). Така че този път коригирахме тривиалните грешки при интерпретацията на входа и изхода. На следващия кръг такива компромиси няма да бъдат допускани.

Уважаеми състезатели, спазвайте абсолютно точно изискванията за вход, изход, памет и време за работа на програмите си, когато има такива изисквания.

Естествено компромисите не бяха „безплатни“ и на некоректно работещите алгоритми бе отнета точката за валидност на входа и изхода. Корекциите не повлияха значително на крайното класиране, но разбира се имаха известен ефект.

Ето и някои от по-сериозните проблеми:

  • Програмата играе повече от ЕДИН ход – изискваше се отпечатване резултата от точно един ход, а не чакане на нов вход докато свърши играта.
  • Печатане на излишни низове – трябваше да се отпечата само и единствено състоянието на дъската. Други низове като “Input the board”, “This is the board”, “B” и т.н. се считат за грешка, тъй като пречат на автоматизираното тестване.
  • Чакане за допълнителен нов ред или end of stream– програмите трябваше да приемат точно толкова информация, колкото е нужна за описване на дъската и текущия играч, все едно тя е въведена от конзолата. Това означава, че няма как да има и end of stream.
  • Размяна на M и N– някои алгоритми обръщаха редове и колони.

За оценяването и резултатите от приложната част

Измежду програмите, които се състезаваха в приложната част имаше от всичко по малко (само вируси нямаше, или поне не сме ги открили още). Затова оценяването стана по общите критерии, дадени в условието на задачата, като беше проведено на няколко стъпки. 

Първо беше тествана коректността на работата на приложенията – възможност за зареждане на изпълними (exe) файлове с алгоритми, провеждане на сблъсъци, показване на резултати, функциониране на интерфейса по време на сблъсък и след това. Тук състезатели се справиха добре, с малки изключения.

След това дойде ред на тестовете за справяне с грешки. Сблъсък без играчи, зареждане на невалидни изпълними файлове, невалидни измерения на полето бяха все тестове за стабилността на приложението към невалидно потребителско поведение. Заедно с тях имаше и проверка за справяне с невалидно поведение на заредените алгоритми – алгоритми играещи нечестно, печатащи грешен изход, работещи повече от секунда, дори алгоритми, които увисваха (т.е. познатият проблем unhandled exception). Всички тези грешни алгоритми бяха наше дело, за да сме убедени, че наистина функционират възможно най-некоректно и да проверим доколко приложението продължава да функционира нормално. В тази част по-малко приложения се справиха, но е похвално, че имаше такива, които се справиха с всичките тестове.

Тези първи два етапа обективно оцениха доколко приложенията функционират правилно и стабилно. За следващите етапи бе определено жури от трима души, което даде комплексна оценка за всеки един от проектите, като бяха отсъдени поотделно точки за използваемост, дизайн и оригинални елементи в решенията. Ето някои от добрите и лошите впечатления:

Функционалност, счетена за добра

  • Изписване на имената на заредени алгоритми(чрез път или само име на файла)
  • Възможност за „ръчна“ и „автоматична“ игра
  • Подходяща визуализация на полето (оцветени кутии, анимации, 3D)
  • Възможност за връщане на ходове напред и назад
  • Възможност за многократно зареждане, визуализиране и т.н.
  • Възможности за коректно оразмеряване

Функционалност, счетена за лоша

  • Невъзможност за директно показване на резултатите (без да се чака визуализацията)
  • Възможност за промяна стойности в клетките на полето от потребителя по време на визуализация на два алгоритъма
  • Липса на стилизация на интерфейса
  • Бутони с неясен текст (напр. “Button3” вместо “Browse”, “Customize” вместо “Load”)
  • Объркващ или претрупан интерфейс (напр. липса на текст върху повечето на бутони)
  • Неудобен интерфейс – променящи мястото си бутони, съобщения излизащи извън рамките на главния прозорец, диалогови прозорци появяващи се на различни места

 

Промяна в класирането в първи кръг

Без да увъртаме – открихме, че сме допуснали  грешка в оценяването на алгоритмичната част от състезанието. Коригирахме  проблема и проведохме наново сблъсъците между алгоритмите. В допълнение към това за по-добро разграничаване на резултатите увеличихме броя на тестовете за валидност на входа и изхода. Отборът на първо място в старото класиране запази позицията си. Второто и третото място обаче заеха други два отбора. По-подробно описание може да прегледате по-долу.

Извиняваме се на участниците и обещаваме, че ще направим всичко възможно да не се случват такива грешки в бъдеще. Освен това благодарим на Георги Ангелов и Станислав Гатев за подадената контестация, която всъщност ни насочи към проблема.

За  оценяването в първи кръг

Сблъсъците  между алгоритмите породиха появата  на доста близки резултати и направихме леки промени в оценяването. Вече закръгляме точно до първа цифра  след десетичната запетая резултатите  от игрите на различните игрални полета (6x4, 12x8, 20x20).

В допълнение към това, добавихме повече тестове за валидност на входа и изхода. Там оценяването е на следния принцип:

  • под 50% успеваемост – 0 точки
  • между 50% и 80% успеваемост – 0.5 точки
  • над 80% успеваемост – 1 точка

Последната  корекция е свързана с решенията, които бяха поправяни. Отново, няма да пишем 0 точки на тези, при които алгоритъма има изцяло некоректно поведение при вход и изход, но отнехме по 0.5 точки (като наказателни) на всеки един коригиран алгоритъм.

Обновено  класиране за първи  кръг

Отбор (членове) Общо  точки Алгоритмична  част (точки) Приложна  част (точки)
Антон Богданов, Станислава Богданова 18 10 8
Александър  Георгиев 17.9 9.9 8
Станислав Гатев, Георги Ангелов 17.8 8.8 9
Кольо Данков, Стефан Чонов 16.8 9.8 7
Кристиан  Ташков 16.2 9.2 7
Лъчезар Цонов, Йордан Стоянов 15.9 9.9 6
Лазар Сестримски, Георги Билюков, Танер Мехмед 14.8 8.8 6
Марио Стоилов, Ивайло Кирилов 13.7 5.7 8
Михаил  Минков 13.5 9.5 4
Боян  Желязков 12.9 9.9 3
Радослав  Тодоров 11.2 9.2 2
Николай Лазаров, Иван Захариев 8.7 8.7 0
Марин Драганов 8.2 8.2 0
Стоян Буланов, Ирник Дионисиев 5.3 3.3 2
Георги  Йоловски 5.1 1.1 4
Кристиян  Николов 3.3 3.3 0

Спецификация на тестовата система

Всички задачи от първи кръг бяха тествани върху една и съща компютърна конфигурация при равни условия:

  • Intel® Xeon® CPU E31225 @ 3.10 GHz
  • 16 GB RAM
  • 128 MB Video Memory (dedicated) Intel® HD Graphics video card
  • 232 GB HDD
  • Microsoft Windows 7 64-bit OS

Поглед към следващия кръг

Журито на конкурса по програмиране се надява описанието на проблемите от първия кръг и обясненията, свързани с начина на оценяване да помогне на състезателите да се справят по-добре на следващите кръгове от конкурса. Препоръчваме на всички състезатели внимателно да прочетат и анализират типичните най-често допускани грешки, за да ги избягват при следващите кръгове. Надяваме се конкурсът да развива уменията на състезателите като софтуерни инженери и да допринесе за тяхното израстване в професията чрез трупане на практически опит в алгоритмичното и приложното програмиране.

Предстои оценяването на следващия кръг в конкурса. Все още има време участниците да проверят добре изпратените решения и да се уверят, че спазват стриктно изискванията.

Premium Drupal Themes by Adaptivethemes