Водонедорасли
Задача #2 от конкурса на Telerik и PC Magazine Bulgaria, сезон 2012/2013
Годината е 2115 (краят на света никога не идва навреме). Учените от Националната Астробиологическа Институция за Широкоспектърно-Космическа Валидация на Организми (НАИШ-КВО) са открили нещо, което наричат “интересна планета”. Интересното на планетата е, че в атмосферата ? има газове, които типично се произвеждат от живи организми. НАИШ-КВО решават – да пратят екип от астронавти, които да посетят планетата и да изследват ситуацията там – независимо какво ще струва това.
Когато астронавтите достигат планетата след достатъчно дълго пътуване, за да изгледат How I Met Your Mother, Дързост и Красота, както и израстването на едно цвете (последното не е филм) астронавтите слизат от Галактическия Обект за Транспорт на други Обекти (GOTO) и започват да изследват планетата. Откритията показват, че няма достатъчно висши форми на живот, за да има с кого да си пият Бързия Интоксикант за Рехабилитация и Активизация (БИРА), но за сметка на това големи области от планетата са покрити от водоподобна слуз, в която по особено интересен начин живеят малки организми. Тези организми изглежда имат доста силен потенциал за развитие. Още повече, изследванията показват, че тези организми, докато са активни, могат да бъдат ползвани за произвеждане на Живо Извлечение с Вискозитет Алфа от Бързия Интоксикант за Рехабилитация и Активизация (ЖИВАБИРА). За съжаление организмите са твърде малко към този етап. Затова астронавтите ги нарекли “водонедорасли”. Със сегашното им темпо на развитие, астронавтите няма да доживеят да създават ЖИВАБИРА от водонедорасли.
След дълги изследвания, астронавтите открили, че начина по който организмите се развиват може почти да бъде сведен до един известен, но забравен математически модел, наречен “Играта на живота”. Следователно, астронавтите, с правилната намеса, могат да ускорят значително развитието на водонедораслите. Идеята е за всяка “локва” (така астронавтите наричат областите с водоподобна слуз) да се съберат водонедораслите и да се преподредят, така че да се развиват по-бързо. Тъй като астронавтите се затрудняват да смятат всеки път подходящата подредба (гледайте вие толкова дълго сериали, да ви видим), ви молят да им помогнете, като напишете софтуер, който измисля такива подредби, че след определено време да може да се извлече максимална полза от една локва. Има ли желаещи?
Описание на “Водонедораслите” и “Играта на живота”
Местата, в които водонедораслите живеят, ще наричаме “локви”. Съществената част от всяка локва е разграфена от астронавтите като квадратна решетка, като всяка клетка от тази решетка може да съдържа или точно едно водонедорасло (такава клетка наричаме жива), или да бъде празна (такава клетка наричаме мъртва), или да съдържа храна (водонедораслите фотосинтезират, но имат способности и да изяждат определени частици). Оказва се, че развитието на водонедораслите може да се моделира математически чрез известния клетъчен автомат “Играта на живота”.
“Играта на живота”
Това не е игра в традиционния смисъл. Да си представим едно квадратно поле, което се състои от малки квадратни клетки, каквито са нашите “решетки” на локвите. Всяка клетка може да бъде жива или нежива (мъртва). Всяка клетка има ред и колона (координати), на които се намира в решетката. Всяка клетка също така има и съседи, които са най-много 8 на брой. Ако редът и колоната за една клетка означим с R и C съответно, то съседите на тази клетка са: (R-1, C-1), (R-1, C), (R-1, C+1), (R, C-1), (R, C+1), (R+1, C-1), (R+1, C), (R+1, C+1) – стига, разбира се, някоя от изброените да не е извън решетката. Така клетките, които са в някой от ъглите на решетката имат 3 съседа, а клетките, които са в край на решетката, без да са в ъгъл, имат 5 съседа.
Играта на живота се “играе” на ходове, които астронавтите ще наричат единици време. За всяка клетка, в процеса на преминаване в следващата единица време (следващия ход), могат да се случат следните неща:
- Ако клетката е “жива”
- И има 2 или 3 “живи” съседа в текущата единица време, тя остава “жива” в следващата единица време (ход)
- В противен случай клетката ще бъде “мъртва” в следващата единица време (ход)
- Ако клетката е “мъртва”
- И има точно 3 “живи” съседа в текущата единица време, тя ще стане “жива” в следващата единица време (ход)
- В противен случай клетката ще остане “мъртва” в следващата единица време (ход)
Играта на живота е известен клетъчен автомат, за който астронавтите знаят и са разучавали в Интернет (вж. статията по темата в Wikipedia).
Правилата важат по същия начин за водонедораслите, с уговорката че ако имаме клетка с водонедорасло, то тя е жива, а ако водонедораслото умре, клетката става празна/мъртва (т.е. тези термини ще бъдат ползвани като синоними по-нататък).
Храната
В даден момент може да се окаже, че в клетка, в която има храна, трябва да се появи водонедорасло. В такъв случай храната бива изядена, като това прави водонедораслите в цялата локва “по-качествени“.
Качество на локва
Астронавтите искат да направят възможно най-добро развитие на водонедораслите за определено време. Затова те са измислили начин да оценяват определена “локва” за това колко добро е поколението в нея в произволен момент от времето. С две думи, качеството на локвата в определен момент от време е сбора на всички клетки съдържащи живи водонедорасли с броя клетки храна, които са били изядени, при условие че броят на живите клетки в този момент е различен от нула. Например ако имаме в определен момент от време (определен ход) 10 живи клетки и до този момент 3 клетки с храна са били изядени (независимо в продължение на колко хода), то качеството на поколението в локвата е 13 в този определен момент. Важно е да се отбележи, че ако в определен момент от време в локвата няма нито една жива клетка, то тогава качеството на поколението в локвата става нула (като няма поколение, няма качество). Например ако началната подредба е направена, изядени са след определен брой ходове 5 клетки храна, и в момента на премерване се окаже, че няма нито една жива клетка, качеството не е 0+5=5, а е 0, поради липсата на живи клетки.
Сега астронавтите са си поставили следната цел – да подредят начално състояние на всяка локва с водонедорасли, така че след определен брой единици време (ходове), поколението в тази локва да има възможно най-голямо качество. Трябва да се отбележи, че астронавтите не могат да променят местоположението на храната в локвата. Също така могат да подредят само веднъж водонедораслите в локвата – в началото. Оттам нататък оставят водонедораслите да се развиват, евентуално да изяждат храна, и в крайна сметка след определено време астронавтите премерват качеството на локвата по гореописания начин.
Алгоритмична задача – генератор на начална подредба на водонедорасли
Преди генерирането на началната подредба решетката, на която и да е локва се състои от празни клетки и клетки с храна (но е възможно и да няма клетки с храна).
Напишете алгоритъм, който при даден брой водонедорасли за разпределяне, даден размер на квадратна решетка (локва) и дадени начални позиции на храна в тази решетка, подрежда дадените водонедорасли така в решетката, че след даден брой единици време (ходове), качеството на водонедораслите е възможно най-високо. Тоест, броят живи клетки след дадените единици време е число различно от нула и това число събрано с броя изядени клетки храна дава възможно най-голяма сума.
Генераторът трябва да опише решетката, която се получава, когато направи първоначалната подредба на водонедораслите – тоест да опише решетката с всичките ? празни клетки, живи клетки и клетки с храна.
Генераторът има право да слага по точно едно водонедорасло в клетка, като ако клетката съдържа храна, тя се счита за изядена от момента на началната подредба (нулевата единица време). Тоест, при описването на решетката, генераторът е нужно просто да посочи, че в тези клетки има водонедорасло (а не храна) и ще бъде взето предвид, че тези случаи са изяждания.
Входни данни
Входните данни се въвеждат от стандартния вход (конзолата).
На първия ред от стандартния вход се въвежда цялото число T – единиците време, след които ще бъде извършено измерването. Например ако T е 1, ще мине 1 единица време, ще се изчислят новите живи, мъртви и изядени клетки (ако има такива) и ще бъде направена оценката.
На втория ред се въвежда цялото число V – броят водонедорасли, които трябва да бъдат поставени.
На третия ред се въвежда цялото число N – размерът на квадратната решетка (броят редове и колони).
На всеки един от следващите N реда се въвеждат по N символа. Символите биват два вида: нули (‘0’) и латинскa буквa F (‘F’), като съответно нулите означават празна клетка, а буквите F означават храна. Тези символи описват всяка една клетка от всеки един ред в решетката – съответно първия символ на първия ред описва дали първата клетка на първия ред е празна или съдържа храна, втория символ описва дали втората клетка на първия ред е празна или съдържа храна и т.н.
Входните данни ще бъдат винаги валидни и в описания формат.
Изходни данни
На стандартния изход трябва да бъдат отпечатани точно N на брой реда с по N на брой символа – като всеки символ описва съответната клетка от съответния ред на решетката в началната подредба, която алгоритъмът е избрал.
Символите биват 3 вида: нула (‘0’), латинска буква F (‘F’) и символът + (‘+’), като съответно нулата и буквата F носят същото значение, както при входните данни, а символът + обозначава поставено водонедорасло (жива клетка).
Ограничения
- 1 ? T ? 1000
- 3 ? N ? 1000
- 3 ? V ? (N * N) – 5
- Програмата трябва да завършва своята работа за най-много 3 секунди. След третата секунда програмата ще бъде спряна автоматично.
- Всички водонедорасли трябва да бъдат разпределени, тоест, в изходните данни трябва да има точно V на брой символа +, в противен случай алгоритъмът ще получи нула точки за тестът, на който е върнал различен от V на брой символа +
Примери
С тези примери ще онагледим как ще бъде форматиран входа и как трябва да бъде форматиран изхода, но няма гаранция, че те са оптимални – възможно е състезателите да измислят по-добри решения за конкретните примери. Оценяването ще бъде извършено на база получените резултати за “качество на локва” (както е дефинирано по-горе). Тоест, колкото по-висок е този резултат, толкова по-висок резултат ще получи алгоритъмът за съответните тестове.
Първи пример
Примерен вход | Примерен изход |
---|---|
2 3 5 00000 00F00 0FFF0 00F00 00000 |
00000 00F00 0+++0 00F00 00000 |
Обяснение
Алгоритъмът е преценил, че е най-подходящо да постави 3-те клетки в средата на полето, във форма, известна като blinker в “Играта на живота”, съответно изяждайки 3 клетки храна. Ето как биха се развили така поставени водонедораслите за 2 единици време:
Нулева единица време (т.е. при поставянето) |
1-ва единица време | 2-ра единица време (т.е. сега е измерването) |
---|---|---|
00000 00F00 0+++0 00F00 00000 |
00000 00+00 00+00 00+00 00000 |
00000 00000 0+++0 00000 00000 |
За нулевата единица време са изядени 3 клетки храна, на първата единица време са изядени още 2 клетки храна, на втората единица време не са изядени клетки храна. Тоест, на края на втората единица време, “качеството” на полето е 3 (изядени клетки храна) + 2 (изядени клетки храна) + 3 (останали живи клетки) = 8 и алгоритъмът ще получи резултат 8 точки за този тест.
Втори пример
Примерен вход | Примерен изход |
---|---|
1 6 7 0000000 0000000 00F0000 000F000 0000000 0000000 0000000 |
0000000 0++0000 0+F0000 000F+00 000++00 0000000 0000000 |
Обяснение за втори пример
Алгоритъмът е преценил да постави дадените 6 клетки около храната в така наречената форма beacon от “Играта на живота”. Ето как биха се развили в този случай водонедораслите за дадената 1 единица време:
Нулева единица време (т.е. при поставянето) |
1-ва единица време (т.е. сега е измерването) |
---|---|
0000000 0++0000 0+F0000 000F+00 000++00 0000000 0000000 |
0000000 0++0000 0++0000 000++00 000++00 0000000 0000000 |
За нулевата единица време не е изядена нито една клетка храна. На първата единица време, обаче 2 живи клетки се появяват върху позицията, където се намира храната – съответно храната бива изядена (2 клетки). Съответно “качеството” на полето е 8 (живи клетки в този момент) + 2 (клетки изядена храна) = 10 и алгоритъмът ще получи резултат 10 точки за този тест.
Приложна задача – описание на алгоритъма за водонедораслите под форма на уебсайт
Астронавтите имат за задача да опишат мисията и откритията си. И защото Интернет е станал основен начин за разпространяване на информация, астронавтите трябва да опишат мисията си като направят уебсайт за нея. Споменахме ли, че сте с тях на планетата? Не сме… е вече сте!
Уебсайтът трябва да бъде базиран на HTML и CSS (като нивото на усвояване на HTML5 e същото, каквото е при браузър Chrome последна версия през януари 2013). Възможно е ползване и на други клиентски технологии, които се поддържат от Chrome последна версия за януари 2013. Уебсайтът трябва да бъде предаден като един или повече HTML файла, заедно със съответните им ресурси (стилове, скриптове, картинки и т.н., ако, разбира се, има такива). Задължително трябва да има един HTML файл с име index.html, който да бъде главната страница на уебсайта, като ако има други страници в index.html трябва да има хиперлинкове към тях. По желание на състезателите може да се ползват и сървърни технологии – като в този случай осигуряването на сървър, качването на уеб приложението на него и осигуряването на достъп през Интернет до приложението е отговорност на състезателите (състезателите предоставят работещ линк). По регламент целият код на уеб приложението трябва да бъде предаден (в случая уебсайт без сървърна част, описаните по-горе HTML, CSS и подобни файлове са и кодът, т.е. те са напълно достатъчни).
Уебсайтът има основна цел да опише “Играта на живота” в контекста на водонедораслите. Това включва описание на начина, по който се развиват поколенията на водонедораслите, различни интересни подредби на водонедорасли и храна и анализ на комбинации между тях, описание на алгоритмичните методи, които състезателите са ползвали (или са искали да ползват) за решаване на алгоритмичната част, примери как би работила алгоритмичната част в дадени ситуации, както и всичко друго, което състезателите могат да включат по темата (по желание може да се направи и описание на “планетата”, екипировката на астронавтите и т.н.). Тук е важно да се отбележи, че журито почти няма да държи толкова на литературен стил (но все пак “asdf asdf”, “lorem ipsum” и подобни няма да се отразят положително), а по-скоро ще търси правилно структурирана като семантика информация, валидност на кода на страницата, спазване на стандартите, удобство при разглеждане на информацията и т.н.
Няма строго изискване за структурирането на уебсайта – той може да има отделни страници с хиперлинкове помежду си, може всичко да е на една страница, може да съдържа визуализации, може да съдържа картинки, мелодии и видео, може да бъде стилизиран, може да има динамични елементи (например симулация на “играта на живота с водонедораслите”) и всичко останало, което състезателите преценят, че е добре да се включи в подобен уебсайт. Журито насърчава проявата на оригиналност, добавянето на нови елементи и осъществяването на привлекателен дизайн, стига те да са подходящи за описаната задача.
Критерии за оценяване
Оценяване на алгоритмичната част
При оценяването ще бъдат ползвани различни по големина “решетки”, с различно разпределение на храна (или липса на такава).
- Всеки алгоритъм ще бъде пуснат да генерира начална подредба за всяка една от “решетките”.
- За всеки тест ще се намира най-добрия резултат на алгоритъм и той ще получи максималните точки за този тест, а останалите ще получат съответния процент от тези точки за този тест (т.е. скалирането се извършва за всеки тест, а не за сбора от всички тестове като преди).
- Например, ако за задачата има 10 теста, то всеки ще носи по 1 точка.
- Ако на първото поле най-добре представилият се алгоритъмът G има резултат 30
- алгоритъмът M има резултат 15,
- а алгоритъмът L има резултат 10, то
- в крайна сметка точките за този тест са:
- G: 1 точка
- M: 0.5 точки
- L: 0.33 точки
- По същия начин се оценяват всички тестове, точките се сумират и след това се закръглят до цяло число
- Максимални точки в крайното класиране за алгоритмичната част: 10
Критерии за оценяване на приложната част
Оценяването на приложната задача ще се извърши по-следните критерии:
- Коректност (доколко уебсайтът следва съвременните уеб стандарти и се валидира успешно спрямо тях, структурира семантично информацията и има съдържание по темата) – 3 точки
- Ползваемост (доколко е удобна и интуитивна е работата с уебсайта) – 3 точки
- UI дизайн (доколко е приятен и удобен уебсайтът) – 2 точки
- Оригинални функции и решения, които да впечатлят журито – 2 точки
- Максимални точки в крайното класиране за приложната част: 10
Допълнителни изисквания
Задачите позволяват използването на различни езици за програмиране и технологии (например C#, PHP, C, C++, Delphi, Python, WPF, Windows Forms, Java, Swing, Flash, JavaScript, HTML5). Всички предадени решения ще бъдат тествани в Windows 7 среда съгласно общите условия на конкурса.
За алгоритмичната част се изисква да бъде предаден пълен сорс код + изпълним файл за Windows (.exe). Ако програмирате на език, който по природа не създава изпълними .exe файлове (например PHP, Python, Java или JavaScript), използвайте подходящ компилатор (потърсете в Интернет).
За приложната част се изисква да бъде предаден пълен сорс код. Приложната част трябва задължително да се отваря в браузър (Chrome, последна версия за януари 2013). Състезателите имат право да направят приложната част като уебсайт, състоящ се от определен брой HTML страници, от които има една главна страница с име index.html, плюс съответните им ресурси. В този случай при отварянето на index.html, трябва уебсайтът да функционира правилно и да осигурява навигация до останалите страници, ако има такива. Състезателите също имат право да направят уеб приложение със сървърна част, при което единствено трябва да осигурят линк към приложението си, качено някъде в Интернет, както и пълният му сорс код. Тъй като оценяването на приложната част ще бъде извършвано и от гледната точка на потребител (а потребителите искат да стартират едно приложение възможно най-бързо и лесно), сериозни затруднения при намирането и стартирането на приложението могат да намалят присъдените от журито точки.
Характеристики на системата, върху която ще бъде проведено тестването
- 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
Краен срок
Краен срок за предаване на решения: неделя, 20 януари 2013 г, 23:59:59 часа.
Решенията се предават в студентската система на Академията на Телерик, на адрес http://telerikacademy.com/Courses/Courses/Details/13 според инструкциите, описани на раздела “Качи решение” на официалния сайт на състезанието.
junkie
December 17, 2012
Баровско Извлечение с Вискозитет Алфа от Бързия Интоксикант за Рехабилитация и Активизация = БИВАБИРА 😉
admin
December 17, 2012
😀 мерси, оправихме го
gman
December 18, 2012
Краен срок за предаване на решения: 17 януари 2012 г.
admin
December 18, 2012
Мерси, коригирахме го
Димитър Дилянов Иванов
December 20, 2012
Да не се залъгваме утре е 21 декември всички ще измрем, задача няма да се предава 😀
nakov
December 26, 2012
Май всички сме живи и можем да се захванем със задачката.
Слави Георгиев
December 23, 2012
Нали на входа всички букви F ще са главни? И още нали на входа () не трябва да има шпации между символите на отделните редове? Благодаря 🙂
admin
December 24, 2012
Да, правилно си разбрал, всичко букви F са главни и няма шпации никъде във входните данни (в изходните също не трябва да има) – има точно N реда по точно N символа всеки, като всеки символ описва клетка. Весели празници!
Галин Грудов
December 24, 2012
Какво се случва с клетките намиращи се на края на полето? Полето за игра карайно ли е или безкрайно? Ако е крайно може ли да се разглежда като тороид и излизащите от границата клетки да се появяват от срещуположната страна?
admin
December 24, 2012
Клетките на края на полето се разглеждат по същия начин, като всички останали, полето не се разглежда като тороид. Клетките на края просто имат по-малко съседи от останалите, т.е. можеш да си представяш, че клетките по края винаги имат поне определен брой мъртви клетки (по ъглите имат поне 5 мъртви съседа, а по страните имат поне 3 мъртви съседа). Макар че в “играта на живота” изглежда все едно нещата се “движат”, това не е съвсем така – просто нови клетки се появяват на някои места, спрямо правилата. В нашия случай, тези правила са същите за абсолютно всички клетки, единствената разлика е, че някои от тях просто имат по-малко съседи от останалите.
pemmpty
December 24, 2012
” Символите биват два вида: нули (’0?) ” – Реално това нула ли си е (0) или е малко “о” – (о);
На примерите и обяснението не прилича на типичната нула.
admin
December 24, 2012
Нула е, просто с този шрифт числата изобщо излизат по странни начини – ще помислим за решение на този проблем от следващия кръг. Може да опиташ да копираш текст от условието в Notepad и ще видиш, че символите са нули (ако откриеш несъответствие ще сме благодарни да ни кажеш, за да го коригираме 🙂 ).
Невена
December 24, 2012
Разрешено ли е за сайта да ползвам чужд безплатен дизайн, който не съм рисувала аз? Ще се вземат ли точки заради това? Ако е разрешено – трябва ли да напиша откъде съм го изтеглила?
admin
December 24, 2012
Здравей, разрешено е, стига да спазиш условията за ползване на този дизайн – някои изискват споменаване на автора и т.н., така че прочети условията за ползване на съответния дизайн. Разбира се, оригинален дизайн най-вероятно ще бъде оценен по-високо, но в никакъв случай няма да отнемаме точки за ползване на друг дизайн, стига това да не е в разрез с правилата за ползването му.
pemmpty
December 26, 2012
Необходимо ли е алгортъма в приложната част да дава добри резултати – смисъл това ще се отрази ли негативно на точките за него. Или с други думи ще има ли разлика, ако накрая резулатат ни е 0, но алгоритъма смята правилно и работи по правилата с такъв, който изкарва високи резултати.
Въпросът идва от това, че в приложната част мислим да наблегнем на човешкия фактор с повече опции за потребителя.
admin
December 26, 2012
За тази задача няма изискване да има симулация, а уеб сайт – какво ще има на него не е важно, стига да е приятно и удобно за употреба и да е в съответствие в описаната в условието ситуация. В този смисъл, ако имате симулация, няма значение дали алгоритъмът който подрежда функционира добре, или няма алгоритъм изобщо и може само човек да играе и т.н. – ако изглежда добре и е ползваемо и визуализацията е коректна (т.е. правилно се играе “играта на живота” в контекста на тази задача), ще бъде оценено добре. Но обърнете внимание и на другите неща, които може да присъстват в сайта – добре е да има и друго, освен симулация (в описанието на приложната част са дадени насоки и примери).
anonymous
December 26, 2012
Исках да попитам, защото не разбрах, дали храната в началото се генерира произволно по полето или някъде ние въвеждаме къде и колко да е ?
admin
December 26, 2012
Началното състояние на полето се въвежда на стандартния вход, т.е. от конзолата. Съответно вашият алгоритъм трябва да прочита входните данни за полето от конзолата (както и за броя водонедорасли) – журито ще генерира тестови случаи и ще ги подава на всеки алгоритъм, чрез конзолата им.
anonymous
December 26, 2012
А какво трябва да зарежда за по-малко от 3 секунди ? Цялото приложение с решението ли или само първия ход след въвеждането на променливите ?
admin
December 26, 2012
При алгоритмичната част трябва на конзолата да е изведено това, което е описано в раздела “Изходни данни” и програмата да се “изключи”, в рамките на 3 секунди. Това означава, че програмата по някакъв начин (дали ще проиграваш ходовете, дали ще прилагаш някакви хитрости и т.н. си е твоя задача) трябва да е “измислила” подредба, която счита за изгодна, да я е “изпечатала” на конзолата и да се “затворила” в рамките на 3 секунди. Не се изисква печатане на ходове, не се изисква извеждане на подсказки, на краен резултат или каквото и да било – изисква се само да бъде изпечатано как алгоритъмът би си подредил нещата първоначално – оттам нататък проверяващата система ще се пресметне как ще продължи играта и какви точки ще получи алгоритъмът – отново, от него се изисква единствено да изведе началната подредба в рамките на 3 секунди и да се изключи.
Krasimir Nikolov
January 2, 2013
Имам един въпрос относно оценяването на алгоритмичната част. Ще имат ли всички тестове еднаква тежест или просто ще се сумират резултатите от различните тестове?
Давам пример, един тест на решетка 10х10 може да има резултат 50-60 максимум, а един тест с решетка 1000х1000 може да има резултат 500- 600 хиляди. Ако резултатите просто се сумират се обезмисля оптимизирането на малките решетки.
admin
January 2, 2013
Обмисляме този проблем и може би съвсем скоро ще въведем тежести за тестовете, но при всички положения оптимизирането на големи тестове ще бъде по-изгодно от оптимизирането на малки. Следете страницата в следващите дни за детайли по въпроса
Zdravko
January 6, 2013
Задачката си е сложна 🙂 Има ли шанс да ни дадете повече информация за генерирането на тестващите ходове, примерно, ако има F на брой клетки с храна, то те са генерирани с еднакъв шанс да са в коя да е клетка …
Имам предвид, че ако входовете са само специално случаи, където най-доброто решение е да се търсят точни съвпадения с известни patterns, дадено решение може да се представя много по-добре от решение, което е оптимално при безброй много тествания с произволни стойности T, V, N и позиция на храната …
admin
January 6, 2013
Ще има тестове, при които разположението на храната съвпада с известни pattern-и, но не е целта да се търси предимно това. При по-голямата част от разположенията на храната, ще има достатъчен брой живи клетки за подреждане, така че някой техен развиващ се pattern, при правилно разположение да консумира голям процент от тази храна. Понякога ще липсва какъвто и да било добър pattern и тогава ще трябва да вземете решение дали ще се целите в изяждане на повече храна или поддържане на повече живи клетки. Т.е. спрямо храната и броя живи клетки, с които разполагате, трябва да разсъждавате дали има pattern който ви устройва, дали да максимизирате изядената храна или да максимизирате оцелелите клетки. Но не целете измисляне на оптимално решение, такова няма при тези ограничения (или поне на нас не ни е известно). Просто предвидете възможно най-много възможни случаи и реагирайте – например ако имате храна подредена на една права, то пускането на един glider през нея изглежда доста добра идея, нали?
Успех!
Zdravko
January 7, 2013
Малко странен въпрос имам – искам приложната ми част да е на английски – как се превежда заглавието на задачата 🙂 ?
Zdravko
January 7, 2013
SeaUnWeeds
admin
January 7, 2013
Изглежда приемливо, ако ти харесва го ползвай 🙂
admin
January 7, 2013
И ние имаме затруднения да го преведем 🙂
Невена
January 7, 2013
immature algae?
admin
January 7, 2013
Също става 🙂
Невена
January 7, 2013
В тази задача няма изискване за симулация, но ако все пак се направи някакво приложение, което да се тегли от сайта, ще даде ли допълнителни точки или въобще няма да е отразено, поради това, че основното изискване е за сайт?
admin
January 7, 2013
Ами ако е отделно приложение което се тегли няма да има чак толкова голям ефект, колкото ако е “вградено” в сайта – но със сигурност ще е бонус
Vladi5rov
January 8, 2013
Как да разбирам условието ” точно 3 живи съседи” за оживяване? Ако една мъртва клетка има 4 или повече живи съседни, то тя няма да оживее?
Също и ако една жива клетка има 4 или повече живи съседни – ще умре така ли?
admin
January 8, 2013
Да, точно така. Условието следва правилата в Играта на Живота на Conway (http://en.wikipedia.org/wiki/Conway's_Game_of_Life), откъдето може да извлечеш и останалите изводи, но идеята е, че точно 3 живи съседа могат да съживят една клетка (размножаване), 2 или 3 живи съседа могат да поддържат една клетка жива, само 1 жив съсед означава че жива клетка ще умре (от самота), повече от 3 живи съседи означават, че клетката ще умре (от пренаселване).
Stoyan
January 13, 2013
При голямо N как се очаква да се изкара изхода за под 3 секунди? Печатането по конзолата е мъчително бавен процес 🙁
admin
January 13, 2013
Печатането е бавно, защото конзолата бавно визуализира това, което е изпечатала. В действителност пращането на данните отнема доста малко време. Може да експериментираш, като отвориш един команден прозорец (Command Prompt) в директорията, където е изпълнимия ти файл и да напишеш YourAlgorithmFile.exe > output.txt (като YourAlgorithmFile замениш с името на exe-то съответно) – този начин на стартиране е подобен на начина, който тестващата система ще ползва. Ще видиш, че ако печаташ целия изход като един низ (т.е. с точно 1 команда за печатане), времето, което това ще отнеме ще е по-малко от 1 десета от секундата. Така че не се притеснявай – ако четеш и пишеш върху конзолата с малко команди, това няма да изяде много от времето ти.
Невена
January 17, 2013
В екипа сме двама души, но колегата не е записан в академията на Телерик. Трябва ли да си направи профил там, или е достатъчно да напиша трите имена и email?
admin
January 18, 2013
Не е нужно да се записва, просто в authors.txt трябва да бъде описан по “прякор” и e-mail. Прякорът ще е името, чрез което ще го представим в класирането, така че е добре да е нещо сравнително уникално – трябва да се състои от латински букви (+ цифри, точка и долна черта), без интервали. За прякор може например да даде e-mail-a без @някъде.com, или пъй трите си имена слято (напр. IvanPetrov)
pemmpty
January 18, 2013
Здравейте, в приложната част сме използвали:
с js – event.srcElement.style.backgroundColor = “black”;
като преди това в HTML ме задали onclick=”setLiveCells(event)” .
Това работи добре под Chrome(което за целите на конкурса е OK),но при Firefox нищo не става. Mozilla просто не подъжа това или има някакъв трик, по който да го оправим. Целта ни е да оптимиираме приложната част и след някой ден да го качим в интернет.
admin
January 18, 2013
Такива грешки не са толкова трудни за коригиране, но действително по условие проверката ще е под Chrome, така че това не трябва да ви притеснява в случая. В етапа на предварително тестване приложната част няма да се гледа (единствено ще бъде проверен формата на вход и изход на алгоритъма, както и структурата на authors.txt файла), така че ако ще участвате в него също няма да има проблем с наличието на приложната част.
laz0
January 21, 2013
Пак ли да очакваме резултатите до 2 седмици 🙂
admin
January 21, 2013
За миналия кръг резултатите излязоха за 1 седмица (петъкът след крайния срок), но този път ще отнеме повече време – така че да, до 2 седмици сигурно ще са готови
Невена
January 25, 2013
Колко отбори са участвали в този кръг?
admin
January 25, 2013
Около 30 🙂
pemmpty
February 10, 2013
Нали тук ще бъдат изнесени резултатите, както на 1-ва задача; не съм пропунал някакви новости относно резулатите от 2-ра 😉
admin
February 10, 2013
Да, така ще бъде, работим по въпроса 🙂 (за алгоритмичната част имаме 700 теста и нещата се случват малко по-бавно от желаното).
laz0
February 11, 2013
Леле 700 теста … Ще станат ли скоро, че аз чакам да си видя резултата и тогава да почвам следващата задача 🙂 Ако има още много за чакане, да я почвам от сега 🙂
admin
February 11, 2013
Ами, почвай най-добре защото срокът за другата задача е до края на другата седмица – което не е много време. Иначе сме пуснали тестването, но по много груби сметки ще са му нужни около 48 часа и след това трябва да се провери и резултатите да се изготвят…
laz0
February 11, 2013
Чудно, дано до края на седмицата излязат резултатите 🙂