Спасихме водонедораслите! След дълго чакане, най-после състезателите ни могат да видят как са се представили на този кръг на конкурса. В този кръг видяхме доста интересни приложни части и алгоритмични части, както и още по-интересни крайни резултати. По традиция ще кажем няколко думи за кръга и оценяването, и разбира се по-долу ще можете да намерите резултатите.
За оценяването и резултатите от алгоритмичната част
Класическата “Игра на Живот” е нещо, което почти всеки по-опитен софтуерен инженер е писал – и най-вероятно на чиито интересни развития се е възхищавал. Но предвиждането на нейното развитие, без пълно изчерпване, е нерешена задача. Въпреки, че са известни определени форми, чиито развитие е вече изследвано и познато, намиране на най-оптимална начална подредба при даден брой начални живи клетки е нелека задача. Още повече, когато полето може да съдържа и “храна”, нещата стават още по-сложни – така че е в реда на нещата да поздравим участниците, за добрите им резултати при такава задача.
Тестовете, проверката и резултатите
Генерирането на тестовете беше… забавно начинание. При толкова много променливи критерии (размер на поле, брой “водонедорасли”, брой ходове, брой клетки с храна спрямо големината на полето), дори с по 4-5 диапазона от стойности за всяко стигнахме до заключението, че ще са нужни около 700 теста за пълна изчерпателност. Тестовете бяха генерирани, но общото време, което щеше цялото тестване щеше да отнеме, се оказа твърде дълго – тъй като имахме алгоритми, които имаха проблеми с вход-изход (както на миналия кръг), а и беше нужно да верифицираме резултатите в последствие, решихме да съкратим броя тестове.
След известно пресмятане, достигнахме до разумната бройка от 72 теста, с по-големи диапазони от стойности за отделните критерии, от които за всеки един тест избирахме по един диапазон от всеки критерии и вземахме произволни числа в тях – като това доведе до доста разнообразно съдържание на тестовите файлове.
Допълнително, за всеки тестов файл генерирахме по няколко (произволен брой) “следи от форми в играта на живот”, като храна. Тоест, имахме няколко предефинирани известни форми в играта на живот и ги пускахме да се развиват върху полето, като поставяхме клетка с храна навсякъде, където се появяваше жива клетка. Разбира се, слагахме и произволно разпределена храна.
Проверката също беше интересно начинание. Нямаше как да бъде направена, без да се развие игра на живот спрямо началната подредба, предоставена от състезателите (и вземайки предвид храната и други критерии). За да сме сигурни в резултатите от проверката изменихме генерираните лог файлове, за по-лесна ръчна проверка, както и написахме втора проверка, на програмен език различен от този на основната проверяваща система и сравнявахме резултатите.
Преди голямото тестване, направихме такова със само няколко теста, за да намерим алгоритми с проблеми във входа и изхода (защото дори след първото и второто предварително тестване имаше алгоритми, които не функционираха коректно) и да ги коригираме, като разбира се отбелязахме съответните наказателни точки. За съжаление имаше няколко проблема, които не можахме да коригираме (или не беше коректно да го правим) – нарушаване на ограничението за време, ползване на повече или по-малко водонедорасли от зададеното в теста, както и разнообразие от грешки в стил “unhandled exception” – което за съжаление доведе до по-ниски (и на места нулеви) резултати – но поне някои отбори с такива проблеми компенсираха с приложните си части.
Оценяването бе извършено по новият алгоритъм за оценяване със скалиране на всеки тест, като тази система ще бъде ползвана и в следващите кръгове – в случая:
- Всеки тест носеше 10/72 (десет седемдесетивтори) точки
- Тези точки получаваше алгоритъма с най-висок резултат за съответния тест
- Останалите получаваха съответната част от тези точки
- Резултатите за всички тестове се сумираха и точките на алгоритъма с най-висок резултат бяха скалирани до 10, а останалите получиха съответната част от тези точки
Този път първенците в алгоритмичната част имат забележима преднина пред останалите участници, макар че почти всички се представиха доста добре.
За оценяването и резултатите от приложната част
Приложната част този път даваше доста голяма свобода в изпълнението. Затова беше доста важно да бъдат измислени обективни методи за оценка на отделните критерии. Критерии като “Дизайн” и “Оригиналност” не беше нужно да бъдат предефинирани (описахме как журито ги оценява в анализа на първи кръг), но при “Коректност” и “Ползваемост” въведохме малки изменения, с цел по-добра оценка.
Как журито оценява Коректност за този кръг?
Както сме описвали, коректността определя предимно дали дадените изисквания са изпълнени и дали предаденото решение пълно в контекста на задачата. Когато се създава един уебсайт, изисквания можем да наречем mark-up валидност, правилно функциониране при различни резолюции (т.е. без размествания), валидни хиперлинкове и семантично коректен HTML. Пълнотата, тъй като бе широко понятие за тази задача, решихме да оценяване чрез директно съпоставяне на решенията на отделните отбори – тоест, колкото повече смислени елементи един сайт съдържаше и колкото по-добре бяха имплементирани те спрямо останалите сайтове, толкова по-висока “подоценка” за пълнота бе давана за журито. Грубо казано, 1.5 от максималните 3 точки за коректност давахме за валидност и още 1.5 давахме за пълнота и изпълнение.
Ето и по-популярните елементи сред решенията елементи, на базата на които журито оценява Коректност в този кръг:
- Въведение в задачата/”мисията”
- “Разкази”/”Истории”/”Измислици” или т.нар “lore” на английски – допълнтиелно тематично съдържание
- Описание на алгоритмичната част
- Изследване/анализ на форми от оригиналната Игра на Живот
- Симулатор
Това бяха основните отправни точки, като те бяха избрани след наблюдението на честотата им при повечето отбори – както в истинския живот един уебсайт е по-ценен, когато съдържа това, което в момента е модерно – а какво е модерно се определя от останалата част от мрежата.
Как журито оценява Ползваемост за този кръг?
Основната цел на един уебсайт е да предоставя информация. Колкото по-добре я формулира, разделя на подраздели, илюстрира с примери, колкото по-добра навигация представя и по-интуитивно се ползва, толкова по-ползваем може да бъде. Това е което оценявахме и ние. Задачата бе създадена с цел да бъде забавна и ненатоварваща (за “външните наблюдатели”, ако можем така да се изразим). Следихме за ненатоварващ текст в – необходимото междуредово разстояние, шрифтове, форматиране (удебелен шрифт, подточки, подзаглавия, таблици…), подходящи илюстрации и лекота на ползване на допълнителни модули, като симулатор и т.н. – решения със съдържание, приличащо повече на статия (да, като тази тук) получиха по-ниски резултати за този критерии, докато такива, които формулираха информацията, така че да бъде възприета бързо, получиха по-високи оценки.
Сайтовете на всички участници си заслужават!
Това е един призив към читателите (включителни и състезатели) – журито определено се забавлява с проверката на приложната част в този кръг. По един или друг начин всеки отбор допринесе за “оцеляването на водонедораслите” извън кръга – при това някои с доста добро чувство за хумор и оригиналност в създаденото. Така че не се чудете дали да разгледате решенията, заслужава си! Всички решенията по традиция ще бъдат качени в публичното хранилище на конкурса – линкове ще намерите по-долу в тази статия.
Резултати и награждаване
Ето и дългоочакваното класиране, в което сме подредили всички участници, представени чрез потребителските им имена в студентската система на Телерик, спрямо резултатите на отбора им в този кръг.
Този път ще наградим първите 4 отбора (изписани с удебелен шрифт) – тъй като имаме равни точки за 3-то място – за представянето им на този кръг, като ще пишем на съответните участници допълнително за да уточним дата и час.
Благодарим на всички за участието и скоро очакваме решенията ви за следващия кръг!
Автор 1 | Автор 2 | Общо | Алгоритъм | Приложение |
mgochev | 17 | 10 | 7 | |
pemmpty | lazo003 | 14 | 8 | 6 |
krasi.nikolov | ognyan.petkov | 11 | 5 | 6 |
pirin | isipro | 11 | 5 | 6 |
aleks.todorov | nader.dabour | 10 | 3 | 7 |
Nevencheto | AngelVladov | 10 | 0 | 10 |
aslv1 | erik1001 | 9 | 2 | 7 |
cocodonchev | rusiqt | 9 | 4 | 5 |
KOCTEHYPKATA | 9 | 5 | 4 | |
manchev | gercho | 9 | 3 | 6 |
paveld3 | at.keranov | 9 | 1 | 8 |
plamen.hristian | hristy93 | 9 | 3 | 6 |
psotirov | 9 | 3 | 6 | |
mariq88 | d_p_y | 8 | 2 | 6 |
mario.stoilov.9 | ivailok1 | 7 | 4 | 3 |
s_mihaylov | 7 | 5 | 2 | |
kdikov | 6 | 0 | 6 | |
yonko.tsonev | 6 | 0 | 6 | |
galingrudov | BlackEagle | 5 | 1 | 4 |
Ivaylo | ognyan.angelov | 5 | 0 | 5 |
kiril.ilarionov | 5 | 1 | 4 | |
mitko_lazarov | 5 | 2 | 3 | |
PeterParushev | silistra | 5 | 5 | 0 |
georgi.ivanov | 5 | 4 | 1 | |
angel.n.stoyanov | migrachev | 4 | 4 | 0 |
martin.durchov | xpxd4 | 4 | 0 | 4 |
technet | 2 | 2 | 0 | |
zdravko.beykov | 2 | 2 | 0 | |
stoyaneft | merakses | 1 | 1 | 0 |
Подробни резултати и допълнителни материали
Всички допълнителни материали от състезанието (решения на участниците, тестове, лог файлове на тестването и т.н.) ще могат да бъдат намерени няколо дни след класирането на този адрес: http://downloads.academy.telerik.com/svn/pc-magazine/Public/.
pemmpty
February 15, 2013
Честно казано много ме изненадаха резултатите. Мислех, че с 16 точки трудно ще се влезе 3-ката, но явно задачката се е оказала доста по-трудна от първата. С интерес очаквам подробните резултати 🙂
admin
February 15, 2013
Те са качени вече, разрови се в линка даден най-долу в публикацията и ще ги намериш – самите решения не сме качили все още (малко по-големички са) но и това ще стане скоро ;). Иначе поздравления!
pemmpty
February 16, 2013
Може ли да пипитам за какво са ни отнети 0.5 точки. На предварителните два теста имахме проблеми – първо с правилно задаване на ехе файла, после слагахме интервали в изхода. Тях ги коригирахме (или поне така си мислиме). Ще ни е от полза за настоящия кръг да знаем какъв е проблемът и да се опитаме този път да не го оправим 😉
admin
February 16, 2013
Да, разбира се, проблемът е доста видим. Поне в това, което е пратено (и изпълнимия файл, и кода) се извеждат единици (1) вместо символът плюс (+) както се очаква по условие. Допълнително, алгоритъмът очаква въвеждане на нов ред след като изведе изхода, вместо да приключва работата си (т.е. да се “затваря”) – като този проблем не е толкова фатален, но е добре да се стараете да го избягвате. Така че 0.5 бяха отнети предимно заради грешните символи (1 вместо +).