Bilten s 22. kampa mladih informatičara Hrvatske
Transcription
Bilten s 22. kampa mladih informatičara Hrvatske
SADRŽAJ 22. kamp mladih informatičara Hrvatske....................................................................................3 Popis polaznika ...................................................................................................................4 Pregled radionica, voditelja i pohvaljenih polaznika ..........................................................6 Intervju: Ivo Šeparović, dipl. ing., tajnik HSIN-a.......................................................................7 Razgovori o Kampu Novi voditelji radionica.......................................................................................................9 Polaznici ............................................................................................................................10 S priprema na Kampu Olimpijci ...........................................................................................................................12 Voditelj tima......................................................................................................................13 Završna svečanost 22. kampa .....................................................................................................14 Prva juniorska hrvatska informatička olimpijada....................................................................16 Program .............................................................................................................................17 Rezultati ............................................................................................................................18 Pravila ...............................................................................................................................19 Radionica: Olimpijci juniori..............................................................................................23 Intervju: Nikola Dmitrović, prof. mentor ..........................................................................26 Popis polaznika po radionicama .................................................................................................28 RADIONICE Logo početni......................................................................................................................35 Logo napredni ...................................................................................................................37 BASIC početni ..................................................................................................................41 BASIC napredni ................................................................................................................44 Programski jezici PYTHON / C++ ...................................................................................48 Početnici ............................................................................................................................50 Visual Basic / SQL Server ................................................................................................53 PHP ...................................................................................................................................55 Algoritmi početni ..............................................................................................................57 Algoritmi napredni ............................................................................................................60 Olimpijci seniori................................................................................................................62 PRILOG: Zadaci i opisi algoritama s 1. JHIO-a.......................................................................67 22. KAMP MLADIH INFORMATIČARA HRVATSKE – KRK 2012. 22. kamp mladih informatičara Hrvatske, u organizaciji Hrvatskog saveza informatičara – HSIN-a, održan je u Krku od 19. do 29. lipnja 2012. godine. Suorganizatori ove tradicionalne ljetne škole informatike bili su Osnovna škola Frana Krste Frankopana u Krku i Klub informatičara otoka Krka – KIOK. 22. kamp u Krku organiziran je u jednom terminu u trajanju od 11 dana. Za polaznike Kampa održano je 12 radionica, koje su vodili stručni suradnici HSIN-a i KIOK-a. Program Kampa uspješno je završilo 70 učenika i to: 47 učenika osnovnih škola, od kojih je 16 pozvao HSIN temeljem natječaja, i 23 srednjoškolca, od kojih je 14 pozvao HSIN. Cjelokupan stručni program održan je u prostorima OŠ F. K. Frankopana u Krku. Program se odvijao u 4 učionice opremljene sa ukupno 55 računala. Povezanost s internetom ostvarena je CARNet-ovom vezom od 10Mb/s. Prema vlastitim interesima učenici su pohađali jednu ili više radionica. Svi su se na radionicama istakli marljivim radom. Veliko zanimanje srednjoškolci su pokazali za radionicu "Algoritmi" dok je među mlađim uzrastom popularna bila radionica "Početnici". Posebna radionica "Olimpijci" i ove je godine organizirana za pripreme sedmorice informatičkih reprezentativca Republike Hrvatske (prvotimci: D. Ćevid, A. Razum, M. Tomić i D. Gleich i pričuve: M. Milišić, T. Tunković i M. Balunović), izabranih temeljem rezultata na HIO 2012. i Izbornim pripremama 2012. Olimpijci su se u Krku pripremali za nastupe na najznačajnijim informatičkim natjecanjima u 2012. godini: • 19. srednjoeuropskoj informatičkoj olimpijadi – CEOI 2012 u Mađarskoj i • 24. međunarodnoj informatičkoj olimpijadi – IOI 2012 u Italiji. Značajna novost u sklopu programa ovogodišnjeg Kampa bilo je održavanje 1. juniorske hrvatske informatičke olimpijade – JHIO 2012. Na JHIO 2012. sudjelovalo je 7 najboljih juniora i jedna juniorka, tj. učenici do 16 godina starosti na dan međunarodnog natjecanja. Natjecali su se, u dva dana (24. i 28. lipnja), u rješavanju 5 originalnih, problemskih zadataka na algoritamskoj osnovi. Najuspješnija četiri natjecatelja: D. Bradač, B. Filipović, N. Pintarić, V. Kurdija, izborili su mjesto u hrvatskom timu za nastup na: • • Balkanskoj informatičkoj olimpijadi – JBOI 2012 u Makedoniji i Međunarodnom informatičkom natjecanju – ITI Shumen 2012 u Bugarskoj. Voditelji 22. kampa bili su: Aron Bohr, stručni suradnik u ime HSIN-a, Boris Bolšec, prof., u ime škole domaćina, te Nikola Dmitrović, prof.-mentor, voditelj priprema juniora za nastup na JHIO 2012. Glavni i odgovorni organizator bio je Ivo Šeparović, dipl. ing., tajnik HSIN-a. Program Kampa odvijao se pod pokroviteljstvom Hrvatske zajednice tehničke kulture, Ministarstva znanosti, obrazovanja i sporta, poglavarstava Grada Krka i Županije primorsko-goranske. KAMP 2012. 3 22. KAMP – POPIS POLAZNIKA UČENICI OSNOVNIH ŠKOLA R. br. 4 Ime i prezime Škola, Općina / Grad Razred 1. Filip Ahčin PŠ Strmec Samoborski 1. 2. Sven Ahčin PŠ Strmec Samoborski 3. 3. Anto Avgustinović OŠ F. K. Frankopana, Malinska 4. 4. Patrik Bajčić OŠ F. K. Frankopana, Malinska 2. 5. Matej Ban - - 6. Robert Benić ZRS/Udruga informatičara Božo Težak, Zagreb 7. 7. Domagoj Bradač OŠ Otok, Zagreb 8. 8. Filip Braut OŠ F. K. Frankopana, Krk 3. 9. Luka Braut OŠ F. K. Frankopana, Krk 5. 10. Renato Braut OŠ F. K. Frankopana, Krk 3. 11. David Brusić OŠ F. K. Frankopana, Malinska 4. 12. Filip Crnčić OŠ F. K. Frankopana, Dobrinj 4. 13. Jakov Depikolozvane OŠ F. K. Frankopana, Vrh 5. 14. Tomislav Franov OŠ F. K. Frankopana, Krk 2. 15. Marija Gegić OŠ Retkovec, Zagreb 8. 16. Marin Geljić OŠ F. K. Frankopana, Krk 3. 17. Maria Elena Hržić OŠ F. K. Frankopana, Malinska 4. 18. Ivan Jambrešić ZRS / Udruga programera S VIJUGOM, Zagreb 3. 19. Lurda Kauzlarić OŠ F. K. Frankopana, Malinska 2. 20. Josip Klepec I. osnovna škola Vrbovec 6. 21. Damjan Klobučar OŠ F. K. Frankopana, Krk 2. 22. Karlo Kovačić Mladi informatičari Strahoninca, Strahoninec 7. 23. Vedran Kurdija OŠ Mladost, Zagreb 7. 24. Marko Lazarić OŠ Centar, Pula 7. 25. Dorijan Lendvaj RIK Popovača 2. 26. Vilim Lendvaj RIK Popovača 6. 27. Elena Lukić OŠ F. K. Frankopana, Malinska 4. 28. Benjamin Marić OŠ F. K. Frankopana, Krk 4. 29. Ivana Milčetić OŠ F. K. Frankopana, Malinska 4. 30. Vanesa Morić OŠ F. K. Frankopana, Krk 3. KAMP 2012. UČENICI OSNOVNIH ŠKOLA 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. Zoja Nekić Petar Orlić Nikola Pintarić Stjepan Požgaj Martin Rosenzweig Luka Gabriel Rošić Marina Samblić Karlo Sintić Leon Starešinić Nikica Stijepić Lorenzo Šamanić Mia Šimić Renato Šutić Fran Vasilić Josip Zrilić Lucija Žužić Marko Žužić OŠ F. K. Frankopana, Krk OŠ J. Račića, Zagreb OŠ I. G. Kovačića, Sv. Juraj na Bregu OŠ Belica, Belica OŠ I. Filipovića, Zagreb OŠ F. K. Frankopana, Vrh OŠ F. K. Frankopana, Krk OŠ F. K. Frankopana, Krk OŠ J. Račića, Zagreb OŠ F. K. Frankopana, Vrh OŠ F. K. Frankopana, Krk OŠ F. K. Frankopana, Malinska OŠ F. K. Frankopana, Krk OŠ F. K. Frankopana, Krk OŠ F. K. Frankopana, Malinska OŠ F. Frankovića, Rijeka OŠ F. K. Frankopana, Vrh 4. 8. 8. 8. 8. 5. 6. 6. 8. 5. 5. 2. 3. 6. 4. 6. 5. UČENICI SREDNJIH ŠKOLA R. br. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. KAMP 2012. Ime i prezime Mislav Balunović Luka Barišić Domagoj Ćevid Branimir Filipović Dominik Gleich Mislav Gucunski Dino Ilić Pavao Jerebić Filip Keri Ivan Lazarić Mihael Liskij Zvonimir Medić Neven Miculinić Helena Mikulić Matija Milišić Antun Razum Tonko Sabolčec Ivan Šego Marin Tomić Tomislav Tunković Kristijan Vulinović Mario Vuzem Ivana Žužić Škola, Općina / Grad Gim. M. Mesića, Sl. Brod XV. gimnazija, Zagreb V. gimnazija, Zagreb XV. gimnazija, Zagreb XV. gimnazija, Zagreb III. gimnazija, Osijek SŠ za elektrotehniku i računalstvo, Rijeka III. gimnazija, Split XV. gimnazija, Zagreb Gimnazija, Pula XV. gimnazija, Zagreb XV. gimnazija, Zagreb Udruga darovitih informatičara Rijeke, Rijeka XV. gimnazija, Zagreb XV. gimnazija, Zagreb XV. gimnazija, Zagreb XV. gimnazija, Zagreb XV. gimnazija, Zagreb V. gimnazija, Zagreb Gim. L. Vranjanina, Zagreb Gimnazija A. Mohorovičića, Rijeka Srednja škola Krapina, Krapina Gimnazija A. Mohorovičića, Rijeka Razred 2. 1. 3. 1. 2. 3. 2. 1. 2. 1. 1. 3. 3. 2. 4. 4. 1. 1. 3. 4. 2. 2. 1. 5 PREGLED RADIONICA, VODITELJA I POHVALJENIH POLAZNIKA Radionica 6 Voditelji i predavači Broj polaznika Pohvaljeni 1. Algoritmi početni Matija Bucić 13 Petar Orlić, Martin Rosenzweig i Mislav Gucunski 2. Algoritmi napredni Marin Smiljanić 11 Ivan Lazarić, Ivan Šego i Luka Barišić 3. BASIC početni Mislav Balunović 11 Marko Žužić, Jakov Depikolozvane i Josip Zrilić 4. BASIC napredni Marijan Jurešić, dipl. ing. Mislav Balunović 8 Marina Samblić, Lucija Žužić i Luka Braut 5. LOGO početni Helena Mikulić 9 David Brusić i Ivana Milčetić 6. LOGO napredni Mihael Liskij 8 Ivan Jambrešić, Lucija Žužić i Dorijan Lendvaj 7. PHP Gordan Nekić 6 Fran Vasilić, Josip Klepec i Dino Ilić 8. Početnici Diana Lendvaj, dipl. ing. 13 Tomislav Franov, Filip Braut, Renato Šutić i Damjan Klobučar 9. Programski jezici PYTHON / C++ Nikola Dmitrović, prof. 11 Martin Rosenzweig, Josip Klepec i Lucija Žužić 10. Visual BASIC SQL Server Marijan Jurešić, dipl. ing. Gordan Nekić 6 Dino Ilić, Karlo Sintić i Kristijan Vulinović 11. Olimpijci juniori Nikola Dmitrović, prof. 8 - 12. Olimpijci seniori Matija Osrečki 7 - KAMP 2012. IVO ŠEPAROVIĆ: Razgovor povodom održavanja 1. JHIO 2012. u Krku 2. MJESTO U SVIJETU I 1. U EUROPI NIJE BIO NAŠ MAKSIMUM U okviru Kampa 2012. u Krku održano je i jedno sasvim novo natjecanje za najuspješnije najmlađe sudionike, 1. juniorska hrvatska informatička olimpijada, natjecanje najvišeg nivoa na nacionalnoj razini. Više o tome rekao nam je, glavni organizator, tajnik HSIN-a, Ivo Šeparović, dipl. ing. Što Vas je potaklo da Izvršnom odboru HSIN-a predložite utemeljenje i organiziranje prve Juniorske hrvatske informatičke olimpijade – JHIO 2012? Višegodišnji rad na informatičkim programima s mladima u Hrvatskoj, te iskustva stečena u međunarodnoj suradnji svakako su glavni pokretač ideja koje sam do sada davao Izvršnom odboru HSIN-a i stručnim suradnicima kroz Znanstveni odbor HSIN-a. Samo nekoliko država u Europi vodi brigu o učenicima do 16 godina starosti na spomenutim programima. Tako postoji Juniorska balkanska informatička olimpijada – JBOI i ITI Shumen na kojima se natječu učenici do 16 godina na jednakim informatičkim programima kao i stariji učenici srednjih škola. HSIN već godinama provodi program HONI – natjecanja putem Interneta za sve učenike pa i za ove najmlađe, a prije dvije godine priredili smo poseban program za njihov uzrast i znanje. Pošto su ove godine naši učenici po drugi puta pozvani na JBOI i na ITI Shumen, odlučili smo se za organizaciju JHIO 2012., kako bi izabrali najbolju četvoricu koja će nas zastupati na tim natjecanjima. Kako su se o tom prijedlogu očitovali pojedini članovi IO-a HSIN-a? Izvršni odbor HSIN-a je, na moje obrazloženje o korisnosti ovog programa za budućnost mladih natjecatelja informatičara, u potpunosti prihvatio ideju o organizaciji 1. JHIO u sklopu Kampa 2012., koji je održan u Krku. Pokazat će se to punim pogotkom, kada pogledamo rezultate naših juniora na JBOI i ITI Shumen 2012. Znači li to da je u školskom programu informatika, u znanstvenom pristupu, dobila mjesto koje zaslužuje? Ne mislim da se u školskom programu za učenike do 16 godina starosti posvećuje dovoljno pažnje "znanstvenoj informatici" (Computer Science). Za one najbolje, mi u HSIN-u nadopunjujemo njihova znanja, osobito na našim zimskim i ljetnim školama informatike, te na već spomenutom programu HONI putem Interneta. Na tim našim programima sudjeluju i učenici već od 1. razreda osnovne škole. KAMP 2012. 7 Kakva je danas situacija s «pokrivenošću» računalima, ima li svaki učenik pristup računalnim resursima, koji su mu neophodni? Situacija s "pokrivenošću" računalima popravlja se iz godine u godinu i u školama i kod učenika kod kuće. Mislim da za ovaj program to nije dovoljno, jer u mnogim školama se radi samo "korisnička informatika", vezana za poznati ECDL, te "surfanje" Internetom. N. pr. u Gradu Zagrebu, osim u nekim školama znanstvena informatika se poučava i u 20-tak klubova, članica HSIN-a (ujedinjenih u ZRS), te organiziranju mnogobrojnih natjecanja i za one najmlađe osnovnoškolce. Dotle, recimo na otoku Lastovo od svega nema ništa (mi smo pokušali nešto napraviti 1998. kada smo tamo organizirali Ljetnu školu informatike i kada smo osnovali informatički klub), ali zbog birokracije i nerazumijevanja lokalne uprave i države sve se ubrzo urušilo. Zaključak je da nisu svi hrvatski učenici ravnopravni u mogućnosti stjecanja znanja iz informatike u lijepoj našoj Hrvatskoj deklariranoj "zemlje znanja" u budućnosti. Podigli ste visoko ljestvicu za «male», znači li to da su «veliki» olimpijci Hrvatske dosegli svoj maksimum? Ovo je vrlo teško pitanje, ali sigurno je da će, ako se kvalitetno i stručno radi s malima, veliki olimpijci postizati boje rezultate. Mislim da, ipak, 2. mjesto u svijetu i 1. u Europi, rezultat iz 2011. godine nije maksimum hrvatskih učenika. Uvijek sam govorio: «Bit ćemo prvaci svijeta.», ako nam se "dozvoli", to jest, ako se u Hrvatskoj bude vodilo dovoljno brige o nama (HSIN-u i učenicima). Ne možemo bez usporedbi s konkurencijom. Pratite li njihove programe i koliko surađujete? Već sam na prvom pitanju kazao da suradnja na međunarodnoj razini donosi najviše koristi ovim našim programima u Hrvatskoj, te usporedba s konkurencijom nosi važan moment u rezultatima na natjecanjima. 2. mjesto u svijetu, 1. mjesto u Europi na IOI 2011, i pojedinačne pobjede na JBOI, BOI i ITI Shumen, govore same za sebe. Već daleke 1994. povezali smo se sa zemljama srednje Europe, članicama CEOI-a. Najbolju suradnju bili smo ostvarili s Poljskom, kasnije smo surađivali s Bugarskom i Rumunjskom. Velika iskustava dobili smo od najmnogoljudnije zemlje svijeta Kine, s kojom smo osim stručnih ostvarili i prijateljske veze, surađujemo s CCF-om (Chinesse Computer Federation). Uvijek ste prepuni ideja, što planirate za budućnost? Momentalno planiram sudjelovati na organizaciji prve Juniorske međunarodne informatičke olimpijade – JIOI, koja će se održati u rujnu 2013. u Sofiji, u Bugarskoj, gdje sam imenovan članom Međunarodnog informatičkog olimpijskog odbora – IC-a JIOI-a. Razgovarala: Vlasta Šeparović 8 KAMP 2012. RAZGOVORI U KRKU... NOVI VODITELJI RADIONICA Svake godine na Kampu se pojave novi predavači. Neki prvi puta u toj vrlo važnoj ulozi, a neki već s prijašnjim sličnim iskustvima. Imena dobro poznata, uglavnom su to bivši, a i sadašnji natjecatelji, i marljivi suradnici HSIN-a. Zamolili smo ih za kratak osvrt na ovogodišnji Kamp. Mihael Liskij – Napredni Logo Prvi put sam voditelj na Kampu, inače sam voditelj Loga u ZRS-u. Grupa je vrijedna i ne igra se. Imam troje polaznika kojima dajem teže zadatke, a ovim ostalima malo više pomažem. U principu dosta brzo sve shvaćaju. Nisam ništa posebno planirao raditi jer nisam znao da ću biti predavač, ali sam se snašao i zadovoljan sam sa svime što smo obradili. Mislav Balunović – Početni i napredni Basic Predavao sam u Krapini. Iskustva su podjednaka, ali sam sada malo iskusniji i bolje sam shvatio kakav pristup treba imati i kako im bolje objasniti. Grupa je dobra, slušaju i brzo kuže pa je lakše i meni, a i brže napredujemo, više toga stignemo napraviti. Uspio sam obraditi sve što sam planirao, ništa nije bilo nepredviđeno. Matija Bucić – Početni Algoritmi Grupa je super, svi se trude, svi rade. Mislim da su svi imali prilike nešto naučiti i da jesu nešto naučili i nadam se da im nisam bio suviše dosadan. Nisam imao iskustva s predavanjem iz informatike, nešto sitno sam držao u MIOC-u, ali imam iskustva s predavanjem iz matematike. Kao pripremu za predavanje pregledao sam svoje stare kodove, stare pripreme koje sam slušao na Kampu ili u Zagrebu. Nisam održao sve što sam planirao, za to bi mi trebalo jedno tri mjeseca, ali one glavne stvari koje sam htio sam i napravio. Helena Mikulić – Logo početni Ovo mi je prvi puta da predajem na ovakvoj radionici. Grupa je super, svi su se trudili i željeli su raditi. Naravno da je bilo nekoliko iznimaka koji su se htjeli samo igrati, ali su i oni na kraju naučili. Za pripremu sam pregledala svoje stare udžbenike i konzultirala se sa prijateljima o količini gradiva koje ćemo obaviti. Mislim da sam se dobro snašla i da su klinci naučili nešto novo, te da im je radionica bila korisna. Diana Lendvaj, dipl. ing. – Početnici Ovo je prvi put da sam vodila ovakvu radionicu. Lakše je nego u školi zato što su djeca zainteresirana i žele raditi. Kao pripremu za radionicu pregledala sam neke materijale prilagođene djeci te dobi kako bih im na što jednostavniji i zanimljiviji način mogla prikazati gradivo. Obradila sam sve što sam planirala, čak i nešto više zbog njihovog prijašnjeg poznavanja interneta i preglednika, te smo na kraju stigli sve ponoviti. Pripremila: Helena Mikulić KAMP 2012. 9 RAZGOVORI U KRKU... NAJMLAĐI POLAZNICI ... Najveselija i stalno u pokretu, grupa najmlađih polaznika radionice Početnici i Logo spremno je odgovarala na postavljena pitanja, iako je ponekom poneko i promaklo. U razgovoru su sudjelovali: Filip Ahčin (1. r.), David Brusić (4. r.), Ivana Milčetić (4. r.), Matej Ban, Marko Žužić (5. r.), Ivan Jambrešić (3. r.), Sven Ahčin (3. r.), Anto Avgustinović (4. r.), Zoja Nekić (4. r.), Josip Zrilić (4. r.), Elena Lukić (4. r.), Jakov Depikolozvane (5. r.) i Dorijan Lendvaj (2. r.). Na koje si sve radionice išao/išla? Filip: Početnici David: Početni Logo i Qbasic Ivana: Početni Logo i Qbasic Matej: Početnici Marko: Početni Qbasic Ivan: Logo i C++/Python Filip Ahčin Tko te naučio raditi na računalu? Sven: Naučio me didica. Počeo sam raditi na računalu kad sam krenuo na Zimsku školu. Filip: Brat me naučio Logo, a sam sam se naučio raditi na kompjuteru. David: Prvo su me zainteresirale igrice, međutim i programi koji se rade, znači stvaranje nečeg novog i drugog. Naučio me tata. Ivana: Moj tata je informatičar pa me on dosta toga naučio, a u 4. razredu sam dobila informatiku pa sam tamo isto naučila. Anto: Učiteljica iz škole i iz Kampa. Zoja: Brat. Matej: Prijatelji. David Brusić Što si sve znao/znala raditi na računalu prije Kampa? Sven: Bojanje i Logo Filip: Igrati igrice, Logo i kako mijenjati slike. David: Znao sam raditi Logo. I prilično sam dobar u internetu. Ivana: Znala sam repeat u Logu, Windowse i internet. Josip: Neke stvari u Logu poput repeata i raditi u editoru, naredbe fd, rt, lt Zoja: Osnovne naredbe za Logo, igrat igrice, internet. Matej: Igrat igrice. Marko: Logo, internet, Word Kako ti se sviđa profesorica/profesor na radionici/radionicama? Sven: Pa dobra je i daje nam da igramo igrice. Filip: Sviđa mi se učiteljica. David: Pa, učiteljica Helena je poprilično dobra, ona nam predaje Logo i sve nas uči, a profesor iz QBasica je isto dobar. Ivana: Oni su odlični, najbolji. Najbolji koje sam imala, puno bolji od onih u školi, to je sigurno. Elena: Dobri su i zanimljivi. Pomagali su nam i objašnjavali. Anto: Bili su jako dobri, zadavali su nam malo teške, malo lake zadatke, no zbog toga smo i naučili. Jakov: Profesor je fora, sve dobro objašnjava i strpljiv je, osim ako smo mi zločesti. 10 Ivana Milčetić Matej Ban KAMP 2012. RAZGOVORI U KRKU... Marko Žužić Ivan Jambrešić Sviđaju li ti se radionice i jesi li naučio/naučila nešto novo? Sven: Sviđa mi se. Naučio sam u Logu naredbu repeat i kako da kornjača nestane. Filip: Naučio sam kopirati slike s interneta. David: Na Logu sam naučio kako se bojaju kvadrati, a na QBasicu smo naučili zbrajati postotak i sve drugo. Ivana: U Logu bojati neke stvari, naredbu IF, a u Basicu mi je sve novo. Josip: U Logu naredbu fill da se ispuni, varijable, LABEL da pišem, IF za postavljanje uvjeta i takve naredbe. Anto: Naučio sam kako raditi u edallu, kako bojati crteže, a Basic nikad prije nisam znao. Matej: Znam napravit slova u 3D, povećati slova u Wordu i mijenjati boju papira. Dorijan: FOR u Logu i C++. Što bi još želio/željela naučiti? Sven: Sve o Logu i o kompjuterima i kako se dopisivati s prijateljima. Filip: Ništa, ja već znam sve. David: Htio bi naučiti raditi web stranice, zasad me samo to zanima. Ivana: Htjela bih naučiti raditi na Pythonu, a u Logu malo detaljnije i teže zadatke rješavati. Josip: Visual Basic, C++, algoritme, internet...sve. Elena: Kako se rade velike igrice na kompjuteru. Anto: Htio bi još učiti Visual Basic, C++ i Flash. Matej: Povećati slike, spremati slike, i vlastite igrice raditi. Htio bih biti programer. Marko: Napredni QBasic. Dorijan: Htio bi naučiti raditi vlastite internet stranice. Imaš li slobodnog vremena, bi li želio/ željela imati organizirano slobodno vrijeme? Marko: Imam još dovoljno slobodnog vremena Dorijan: Imam dovoljno slobodnog vremena za kupanje i igranje na kompjuteru. Ivan: Imam, onda igram igrice ili radim Logo, odem se kupati i zafrkavam svog prijatelja Dorijana. Elena Lukić KAMP 2012. Jakov Depikolozvane Sven Ahčin Anto Avgustinović Zoja Nekić Josip Zrilić Dorijan Lendvaj 11 RAZGOVORI U KRKU... OLIMPIJCI Antun Razum, maturant XV. gimnazije, Zagreb Koliko si se spremao? Zadnjih 10 dana je bilo baš intenzivno spremanje. Inače, ako se ide na natjecanje iz informatike treba stalno biti spreman jer su uvijek neka događanja, natjecanja, pripreme... Kako ti se sviđa ova vrsta priprema? Mislim da je ova vrsta priprema dosta bitna jer treba ostati u formi. Mislim, ako se tako intenzivno priprema onda se puno brže mogu rješavati zadaci, i puno lakše, a mislim da je to dosta važno. Što očekuješ dalje od natjecanja? Nadam se najboljem, i da ću se i kao student nastaviti natjecati. Marin Tomić, 3. razred V. gimnazije, Zagreb Koliko si se spremao? Rješavao sam zadatke na tjednoj bazi prije Kampa, a sad se svakodnevno pripremamo. Kako ti se sviđa ova vrsta priprema? Pa ovo je super, dobro dođe da nas malo stisnu, da vježbamo i tako... Što očekuješ dalje od natjecanja? Malo me trema, ali nadam se najboljem. Tomislav Tunković, maturant gimnazije Lucijana Vranjanina, Zagreb Koliko si se spremao? Najviše sam se pripremao ovih zadnjih deset dana na Krku. Imao sam se prilike posvetiti malo više rješavanju zadataka za što doma baš i nemam toliko vremena. Koliko slobodnog vremena imate uz ove pripreme? Ja bih rekao dosta. Onda neki odu na kupanje, neki se odu odmarati, kako tko želi. Što očekuješ dalje od natjecanja? Teško je reći, vidjet ćemo kakvi će biti rezultati. Domagoj Ćevid, 3. razred V. gimnazije, Zagreb Kako ti se sviđaju pripreme? Super, super je ekipa. Koliko si se spremao? Ne onoliko koliko sam htio. Prošao sam i na matematičku olimpijadu i time sam se počeo prije baviti pa sam se više pripremao za to. Što očekuješ dalje od natjecanja? Da bude dobro, da dobro prođe. Planiram se bolje pripremati u budućnosti. 12 KAMP 2012. RAZGOVORI U KRKU... Dominik Gleich, 2. razred XV. gimnazije, Zagreb Kakav je osjećaj biti dio olimpijskog tima? Dobar. Mislim, sigurno je pozitivan osjećaj nakon što si uložio puno rada da bi se uopće kvalificirao na olimpijadu, da napokon i prođeš jer je to zapravo i bio cilj samog natjecanja. Koliko si se spremao? Tijekom cijele godine kao i svi. Riješio sam pokoji zadatak svaki tjedan i tako... Koliko slobodnog vremena imate uz ove pripreme? Nađe se slobodnog vremena za pričanje, kupanje, druženje... Što očekuješ dalje od natjecanja? Sudjelovati. Nadam se i medalji. VODITELJ TIMA Matija Osrečki, student FER-a, stručni je voditelj hrvatskog tima na CEOI 2012. Što misliš o ovogodišnjem timu? Dobar je tim. Mislim da puno vježbaju na ovom Kampu i puno se pripremaju. Kakvi će rezultati biti, nisam siguran, ali članovi tima su podjednaki, bit će zanimljivo. U usporedbi s prošlom godinom, možda su malo slabiji, ali vidjet ćemo. Kao bivši natjecatelj imaš li kakav savjet za olimpijce, ali i za sve ostale? Pa olimpijci već sve znaju i više-manje su spremni. Svi ostali trebaju vježbati i ići na što više natjecanja, uključivati se u događanja i dolaziti na kampove, ali i naći vremena za odmor i zabavu. Treba isprobavati razne pristupe koji nisu u okviru algoritama. Na natjecanjima se uglavnom rade algoritmi, ali dobro je i isprobati matematiku i kroz srednju školu se time baviti. To na kraju pomogne. Jesi li zadovoljan načinom i količinom priprema za olimpijce? Da, dosta sam zadovoljan. Uglavnom, što se tiče znanja koje trebaju savladati, već otprije znaju puno toga. Ono što sada trebaju je ući u kodersku praksu i puno zadataka riješiti da uđu u formu, što uglavnom i rade i koncentrirani su na to, tako da sam zadovoljan. Misliš li da ćeš se snaći u ulozi voditelja? Da, mislim da hoću. Imao sam već sličnih iskustva, ne baš ovakvih, voditi ekipu na CEOI-u, ali u kontekstu međunarodnih natjecanja i susreta, te vođenja i koordiniranja ljudi. Razgovore vodila: Helena Mikulić KAMP 2012. 13 ZAVRŠNA SVEČANOST U četvrtak, 28. lipnja 2012. svečano je zatvoren 22. kamp mladih informatičara Hrvatske – KRK 2012. Završnu svečanost Kampa u auli OŠ F. K. Frankopana u Krku pohodili su gradonačelnik grada Krka, Dario Vasilić, prof. i predstavnici HZTK-e, prof. dr. sc. Ante Markotić i v.d. glavne tajnice Zdenka Terek, dipl. oec., koji su prisutnim polaznicima i organizatorima uputili čestitke i riječi srdačne podrške. Pozdravom svim sudionicima 22. kampa, roditeljima, posebnim gostima i organizatorima, HSIN-u i KRIK-u, svečanost je započeo ravnatelj OŠ F. K. Frankopana, Sergio Samblić, prof.: "Nadam se da ste na ovom Kampu puno toga naučili i da ste se lijepo proveli ovdje, da vam je bilo ugodno družiti se, i da ćete s Krka ponijeti lijepe uspomene." Pozvao je zatim vokalnu skupinu učenica “Bona Forma” da izvedu prigodan program. Skladno odjevene četiri djevojke lijepo su otpjevale nekoliko popularnih tradicionalnih i gospel skladbi. Predsjednik HSIN-a, Alen Spiegl, dipl. ing. naglasio je zatim prisutnima da je na ovom Kampu održana 1. juniorska hrvatska informatička olimpijada – JHIO 2012 i istaknuo: "U HSIN-u smatramo da je to put kojim je potrebno ići da bi ostali ovdje gdje sada jesmo, znači raditi i s mlađim učenicima kao što već više od 15 godina radimo s ovim velikima". Prozvao je zatim sve natjecatelje na JHIO 2012., njih osam, i objavio nosioce prvih JHIO medalja. Medalje su, uz pomoć tajnika i predsjednika HSIN-a, osvajačima uručili cijenjeni gosti: brončanu ravnatelj OŠ Sergio Samblić, srebrnu gradonačelnik Dario Vasilić i zlatnu predsjednik HZTK-e, prof. dr. sc. Ante Markotić. Uz tradicionalno srdačne pozdrave mladim informatičarima i cijenjenim gostima, gradonačelnik Vasilić je naglasio: "Drago mi je da se ove vrijedne pripreme mladih informatičara, pod nazivom Kamp mladih informatičara Hrvatske u organizaciji HSIN-a zajedno s našom udrugom KRIK, održavaju upravo u našem gradu, u gradu Krku. Nama je to ponos grada, jer baš ona točka na «i», završna priprema za olimpijadu i razna druga međunarodna natjecanja, radi se upravo u gradu Krku .To znači da vam je ova škola i ovaj grad dodatna inspiracija za te vrhunske, svjetske rezultate koje ste dosad postigli. Čestitam vam unaprijed na rezultatima koje ćete ove godine ostvariti i, naravno, na svemu što ste do sada postigli, na svemu što ste naučili." U ime Hrvatske zajednice tehničke kulture – HZTK, u čijem sastavu HSIN djeluje, prisutnima se obratio predsjednik, prof. dr. sc. Ante Markotić: "Želim pozdraviti najprije vas u ime HZTK-e u čijem sastavu danas djeluje 16 nacionalnih saveza. Međutim, treba izdvojiti HSIN, ne iz kurtoazije zato što je to danas ovdje i vi ste ovdje prisutni, nego iz kurikuluma HSIN-a, koji, evo čuli ste koji je ovo Kamp po redu, ja se nažalost sjećam i prvoga, što znači da imam nešto malo više godina, ali kontinuitet je velika stvar. Ono što je veliko, ovim mladim ljudima posebno želim usaditi, to su uspjesi vaših prethodnika upravo u vašem uzrastu. Ne znam je li vam poznato da UN danas imaju 237 zemalja, a prema nekim podacima 222 zemlje se organizirano bave informatikom, a po uspjesima mladih informatičara u svijetu, Hrvatska je zahvaljujući vama, peta u svijetu. Sigurno je, da baviti se informatikom nije jednostavno, ali u svakom slučaju da je to zalog za budućnost. Rekao bih: Što smo mi bez informatičkog dijela u sadašnjosti i budućnost?" 14 KAMP 2012. Prof. Markotić zahvalio je zatim HSIN-u, g. Šeparoviću, predsjedniku i suradnicima HSIN-a i nastavio je zahvalama školi domaćinu, ravnatelju i ostalima "za sve što prostorno prepuštate i ugađate našem HSIN-u". Posebne zahvale uputio je gradonačelniku Vasiliću zaključivši da je u posljednjih 20 godina Krk prerastao u megaotok i postao pravi svjetski brend. Na kraju je zaključio: "Sukladno svojim mogućnostima mi ćemo vas kao Zajednica i dalje pratiti". U nastavku završne svečanosti Kampa 2012. organizatori su uručili Priznanja HSIN-a svim sudionicima 22. kampa. Pohvalnice najuspješnijim učenicima za pokazana znanja i zalaganje u radionicama dodijelili su voditelji, Boris Bolšec, prof. i Nikola Dmitrović, prof. mentor. Zahvalnice pokroviteljima i suorganizatorima za potporu organizaciji Kampa 2012. i predavačima, stručnim suradnicima HSIN-a, dodijelili su predsjednik HSIN-a Alen Spiegl, dipl. ing. i organizator Kampa 2012., tajnik HSIN-a Ivo Šeparović, dipl. ing. Na kraju su predstavili timove i voditelje koji uskoro odlaze na međunarodne olimpijade. Nakon još jednog nastupa mladih umjetnica s Krka, 22. kamp mladih informatičara RH završenim je proglasio ravnatelj škole domaćina OŠ F. K. Frankopana, ravnatelj Sergio Samblić, prof. KAMP 2012. 15 1. JUNIORSKA HRVATSKA INFORMATIČKA OLIMPIJADA – JHIO 2012. 1. juniorska hrvatska informatička olimpijada – JHIO 2012. održana je od 20. do 28. lipnja 2012. u Osnovnoj školi Frana Krste Frankopana u Krku. Ovo novo natjecanje utemeljeno je 2. lipnja 2012. odlukom Izvršnog odbora HSIN-a, a na prijedlog tajnika HSIN-a, Ive Šeparovića. Odlučeno je da se JHIO, isto kao i HIO, održava svake godine, te da se prvi održi u 2012. godini, u sklopu Kampa mladih informatičara Hrvatske u Krku. Prema utvrđenim pravilima JHIO-a, na 1. JHIO pozvano je osam (8) učenika temeljem rezultata Hrvatskog otvorenog natjecanja u informatici – HONI 2011./2012., uz uvjet da smiju imati najviše 16 godina na dan održavanja međunarodnog natjecanja na kojem će nastupiti. Na 1. JHIO-u u Krku sudjelovalo je 7 juniora i jedna juniorka. U dva su se dana natjecali u rješavanju 5 (2+3) originalnih, problemskih zadataka na algoritamskoj osnovi. Najuspješnija trojica natjecatelja osvojila su JHIO medalje, i osigurali si mjesto u hrvatskom juniorskom timu u koji je ušao i natjecatelj plasiran na 4. mjesto, kako slijedi: 1. Domagoj Bradač 8. raz. OŠ Otok, Zagreb ZLATNA MEDALJA 2. Branimir Filipović 1. raz. XV. gimnazija, Zagreb SREBRNA MEDALJA 3. Nikola Pintarić 8. raz. OŠ I. G. Kovačića Sv. Juraj na Bregu BRONČANA MEDALJA 4. Vedran Kurdija 7. raz. OŠ Mladost, Zagreb - B. Filipović, D. Bradač, N. Pintarić i V. Kurdija Hrvatska informatička juniorska reprezentacija u 2012. godini nastupit će na dva međunarodna natjecanja, i to: Juniorska balkanska informatička olimpijada – JBOI 2012 (Ohrid, Makedonija, 9.-15. kolovoza 2012.) ITI Shumen 2012, (Shumen, Bugarska, 23.-26. studenog 2012.) 16 KAMP 2012. Program 1. JHIO proveden je u sklopu 22. kampa mladih informatičara, kroz devet dana. Za pripreme i natjecanja (2 ispita) mladih olimpijaca organizirana je posebna radionica Olimpijci juniori koju je vodio Nikola Dmitrović, prof. mentor iz XV. gimnazije u Zagrebu. PROGRAM 1. JUNIORSKE HRVATSKE INFORMATIČKE OLIMPIJADE Krk, 20.-28. lipnja 2012. 20.-24. 06. 2012. 09.00-11.30 11.30-13.00 13.00 13.30-14.30 15.00-19.30 19.30 20.00-21.00 Rješavanje zadataka s prošlih natjecanja Teoretska predavanja Ručak Rješavanje zadataka vezanih uz predavanje Slobodno vrijeme Večera Probna natjecanja 25. 06.2012. (ponedjeljak) 09.00-11.00 Prvi ispit 10.30-13.00 Rezultati, prezentacija i analiza algoritama zadataka s prvog izbornog ispita 13.00 Ručak 13.00-19.00 Slobodno vrijeme 19.30 Večera 20.00-21.00 Slobodno vrijeme 26. 06. 2012. 09.00-11.30 11.30-13.00 13.00 13.30-14.30 15.00-19.30 19.30 20.00-21.00 Rješavanje zadataka sa županijskih natjecanja Teoretska predavanja Ručak Rješavanje zadataka vezanih uz predavanje Slobodno vrijeme Večera Rješavanje zadataka s HONI-ja 27. 06. 2012. 09.00-11.00 10.30-13.00 13.00 14.30-15.00 15.00-19.00 19.30 20.00-21.00 Pripremno natjecanje – timsko Teoretsko predavanje Ručak Analiza pogrešaka u rješavanju zadataka s prvog izbornog ispita Slobodno vrijeme Večera Slobodno vrijeme 28. 06.2012. (četvrtak) 09.00-12.00 Drugi ispit 12.00-13.00 Rezultati, prezentacija i analiza algoritama zadataka s drugog izbornog ispita 13.00 Ručak 14.00-18.00 Slobodno vrijeme 18.00 ... Proglašenje rezultata 1. JHIO, dodjela olimpijskih medalja i proglašenje hrvatskog informatičkog juniorskog tima za 2012. godinu KAMP 2012. 17 1. JUNIORSKA HRVATSKA INFORMATIČKA OLIMPIJADA UKUPNI REZULTATI Mj. NATJECATELJ RAZ. ŠKOLA/KLUB BODOVI BODOVI 1. dan 2. dan BODOVI UKUPNO 1. Domagoj Bradač 8. OŠ Otok, Zagreb 110 225 335 2. Branimir Filipović 1. XV. gimnazija, Zagreb 180 141 321 3. Nikola Pintarić 8. OŠ I. G. Kovačića, Sv. Juraj na Bregu 120 198 318 4. Vedran Kurdija 7. OŠ Mladost, Zagreb 110 201 311 5. Robert Benić 7. ZRS/Udruga inf. Božo Težak, Zagreb 200 111 311 6. Stjepan Požgaj 8. OŠ Belica, Belica 120 132 252 7. Marija Gegić 8. OŠ Retkovec, Zagreb 170 64 234 8. Vilim Lendvaj 6. RIK Popovača, Popovača 120 82 202 Prvog dana natjecanja, 25. lipnja, natjecatelji su 120 minuta rješavali 2 zadatka, a drugi dan, 28. lipnja, rješavali su 3 zadatka 180 minuta. Ukupan zbroj osvojenih bodova 1. i 2. dana natjecanja odredio je plasman svakog natjecatelja na finalnoj rang listi 1. JHIO-a. Učenici Vedran Kurdija i Robert Benić u ukupnom su poretku osvojili jednak broj bodova, i 4. mjesto. Zbog toga su poslije ručka (u 15.00 sati) pristupili dodatnom natjecanju koje se sastojalo od rješavanja jednog zadatka u trajanju od 90 minuta. Temeljem većeg broja osvojenih bodova na “pripetavanju”, Vedran Kurdija zauzeo je 4. mjesto s 33 boda, a Robert Benić 5. mjesto s 20 bodova u ukupnom poretku. Program 1. JHIO i provedbu ispita realizirali su prijašnji uspješni hrvatski informatički olimpijci: Matija Osrečki, ing. i Ivan Katanić, uz potporu Bojana Antolovića, dipl. ing. i Stjepana Glavine, te uz administraciju natjecanja Krešimira Malnara. Evaluaciju ovog natjecanja na evaluatoru HSIN-a obavili su: Tomislav Novak, dipl. ing. i Bruno Rahle. U Krku, 28. lipnja 2012. 18 Organizator JHIO 2012. Ivo Šeparović, dipl. ing. KAMP 2012. POZVANI UČENICI NA JHIO 2012. Odlukom Izvršnog odbora HSIN-a od 2. lipnja 2012., temeljem rezultata postignutim na Hrvatskom otvorenom natjecanju u informatici HONI 2011./12., na 1. juniorsku hrvatsku informatičku olimpijadu JHIO 2012. pozvano je 8 učenika (do 16 godina starosti na dan održavanja međunarodnih natjecanja za koje se vrši izbor – JBOI 2012., Ohrid, Makedonija, 9.-15. kolovoza 2012., te ITI Shumen 2012, 23.-26. studenog 2012.) kao slijedi: R. br. 1. 2. 3. 4. 5. 6. 7. 8. Ime Prezime Raz. Škola/klub Robert Domagoj Branimir Marija Vedran Vilim Nikola Stjepan Benić Bradač Filipović Gegić Kurdija Lendvaj Pintarić Požgaj 7. 8. 1. 8. 7. 6. 8. 8. ZRS/Udruga informatičara Božo Težak, Zagreb OŠ Otok, Zagreb XV. gimnazija, Zagreb OŠ Retkovec, Zagreb OŠ Mladost, Zagreb RIK Popovača OŠ I. G. Kovačića, Sv. Juraj na Bregu OŠ Belica, Belica Godina rođenja 1998. 1997. 1997. 1998. 1998. 1999. 1997. 1997. PRAVILA 1. JUNIORSKE HRVATSKE INFORMATIČKE OLIMPIJADE JHIO 2012. 1. juniorska hrvatska informatička olimpijada JHIO 2012. održat će se u Krku, od 20. do 28. lipnja 2012., tijekom održavanja Kampa 2012. Na JHIO 2012. sudjeluje osam (8) učenika pozvanih temeljem rezultata Hrvatskog otvorenog natjecanja u informatici HONI 2011./12., a koji imaju najviše 16 godina na dan održavanja međunarodnih natjecanja za koje se vrši izbor: Juniorska balkanska informatička olimpijada JBOI 2012. (Ohrid, Makedonija, 9.-15. kolovoza 2012.) ITI Shumen 2012, (Shumen, Bugarska, studeni 2012.) Program JHIO provest će se kroz devet dana, a sastojat će se od stručnih predavanja, rješavanje zadataka sa značajnih međunarodnih natjecanja, i dva izborna ispita (natjecanja). Svi sudionici JHIO 2012. obavezni su prisustvovati cjelokupnom programu priprema te svaki izostanak bez opravdanog razloga utječe na nemogućnost sudjelovanja u hrvatskom timu. KAMP 2012. 19 Radno okruženje i provedba natjecanja Natjecanje na JHIO održava se u dva dana. Prvog dana natjecanje traje 90 minuta pri čemu se rješavaju dva (2) problemska zadatka, dok drugog dana natjecanje traje 120 minuta i rješavaju se dva (2) problemska zadatka. Dopušteni programski jezici za rješavanje zadataka su: Pascal, C i C++. Sva natjecateljska računala biti će opremljena samo Linux operacijskim sustavom. Prije početka JHIO natjecanja, održat će se probno natjecanje u trajanju od jednog sata s 1-2 zadatka, radi prilagođavanja učenika radnoj okolini. Sljedeći softver će biti instaliran: • Ubuntu distribucija Linuxa • web preglednik: Firefox, Chrome • editori: joe, vim, emacs, gedit, nano, scite, codeblocks, geany • kompilatori: gcc >= 4.2, g++ >= 4.2, Free Pascal >= 2.2 sa dokumentacijom • debuggeri: gdb, ddd • STL dokumentacija Za vrijeme natjecanja, natjecateljima će biti dostupan papir i pisaći pribor. U slučaju da natjecatelj želi koristiti vlastitu tipkovnicu, treba ju predati tehničkom osoblju na provjeru prije početka probnog natjecanja. Dozvoljeno je korištenje samo jednostavnih tipkovnica. Natjecatelj ne smije unositi nikakve elektroničke uređaje, medije za pohranu podataka, uređaje za komunikaciju, knjige, priručnike ili bilo kakav tiskani materijal. Svaki natjecatelj će imati unaprijed određeno radno mjesto koje će biti označeno brojem. Nakon smještaja za radno mjesto, natjecatelj će čekati službeni početak natjecanja i pri tom ne smije dirati računalo, tipkovnicu, miša ili bilo koji drugi natjecateljski materijal. Zadaci Svi zadaci na Olimpijadi dizajnirani su da budu algoritamske prirode. U nekim zadacima efikasnost, tj. brzina algoritma ima najveći udio u pisanju zadataka. Test podaci su unaprijed osmišljeni i koncipirani na način da će programi koji koriste neke manje efikasne, ali valjane algoritme, također dobiti određeni broj bodova. Test podaci biti će prilagođeni tako da razlikuju različite nivoe efikasnosti unutar zadanih ograničenja. Stoga, natjecatelj ima mogućnost pokušaja rješavanja zadataka s laganim test primjerima iako ne mora znati riješiti zadatak za složene primjere. Prilikom rješavanja zadataka, natjecatelj smije koristiti olovku i papir za skiciranje i razradu algoritma. • STANDARDAN ZADATAK (BATCH) – rješenje zadatka je izvorna datoteka (source) od programa koji čita zadane podatke iz standardnog ulaza (stdin) i ispisuje traženi rezultat na standardni izlaz (stdout). • INTERAKTIVAN ZADATAK (REACTIVE) – rješenje zadatka je izvorna datoteka od programa koji obavlja dijalog sa suprotstavljenim programom izrađenim od strane organizatora. Pri tome natjecateljev program koristi standardni ulaz i izlaz za komunikaciju sa suprotstavljenim programom. • ZADATAK SAMO S IZLAZOM (OUTPUT-ONLY) – rješenje zadatka je skup datoteka koje sadrže izračunate podatke. Natjecatelj isporučuje zip ili tgz arhivu koja sadrži te datoteke ili barem neke od njih. Za svaki zadatak biti će naznačeno memorijsko ograničenje. To se odnosi na sveukupnu zauzetost memorije (izvršni kôd, stack, heap...) Ulazni i izlazni podaci sastoje se od jednog ili više redova koji završavaju s end-of-line znakom, uključujući i zadnji red. Svaki red sadrži niz ispisnih znakova od ASCII-32 do ASCII-126. Format pojedinih ulaznih i izlaznih podataka biti će definiran unutar zadatka. 20 KAMP 2012. Upiti o zadacima Tijekom natjecanja, natjecatelj smije zatražiti pojašnjenje nekih elemenata zadatka. Pitanja se predaju putem servera preko forme predviđene za upite. Pitanje mora biti definirano tako da se može odgovoriti sa "da" ili "ne". Znanstveni odbor nakon primitka pitanja može dati slijedeće odgovore: • "DA" • "NE" • "BEZ KOMENTARA" • "PROČITATI PONOVO TEKST ZADATKA" Evaluator / poslužitelj Natjecanje se odvija u distribuiranom sustavu gdje su natjecateljska računala povezana u lokalnu mrežu s natjecateljskim poslužiteljem / evaluatorom. Natjecateljsko računalo ima pristup određenim servisima koje nudi natjecateljski poslužitelj: sustav za natjecanje, pristup dokumentaciji te pristup pisaču. Natjecatelj rješava zadatak na svom računalu te rješenje šalje na evaluator. Natjecateljska računala neće biti povezana međusobno niti na Internet. Svaki pokušaj natjecatelja za uspostavom takve veze, smatrat će se varanjem, te mogućom diskvalifikacijom. U slučaju problema rada mreže, natjecatelj ne smije sam pokušavati otkloniti kvar, već mora obavezno pozvati pripadnika tehničkog osoblja. Ispisivanje Ispisivati se mogu samo tekstualne datoteke. Nakon zamolbe natjecatelja za ispisom preko servera, pripadnik tehničkog osoblja dostavit će ispisane materijale. Natjecatelj ne smije sam napuštati radno mjesto kako bi uzeo ispisane materijale. Ograničenja ispisa su 10 stranica i 50 KB. Slanje / testiranje / spremanje Slanje Natjecatelj rješenja šalje na evaluator putem Web preglednika. Programski jezik koji je koristio natjecatelj evaluator određuje pomoću ekstenzije (*.pas; *.c; *.cpp) ili odabirom programskog jezika iz padajućeg izbornika. Rješenja mogu biti poslana na evaluator za vrijeme trajanja cijelog natjecanja. Ukoliko natjecatelj pošalje više od jednog rješenja za isti zadatak, kroz sučelje "submit" ima mogućnost odabira rješenja koje će se u konačnici vrednovati. Ako to ne učini, bodovat će se posljednje poslano rješenje za taj zadatak. Testiranje Natjecatelj može testirati svoja rješenja u evaluatorskom okruženju koristeći sučelje za testiranje. Prilikom testiranja, natjecatelj mora poslati rješenje i ulazne podatke koje želi testirati. Ograničenje ulaznih podataka koje natjecatelj treba poštovati, nalazit će se na sustavu. Nakon izvršavanja, sustav će ispisati vrijeme izvođenja, izlazne podatke i eventualne greške. Neće, međutim, ispisati podatke o točnosti izvođenja. Spremanje Natjecatelji imaju mogućnosti spremiti kopije svoje datoteka tijekom natjecanja na evaluator. Natjecatelj može napraviti do 100 kopija, a veličina jedne tako spremljene datoteke ne smije prelaziti 1 MB. Ukupna veličina svih spremljenih datoteka na evaluatoru ne smije prelaziti 10 MB. Prošireni rezultati Nakon slanja rješenja na evaluator, sustav će natjecatelju dojaviti rezultat izvođenja na primjerima test podataka zadanim u tekstu zadatka. U nekim slučajevima, autori zadataka mogu se odlučiti natjecateljima ponuditi "proširene rezultate". Na zadacima na kojima se nudi mogućnost proširenih rezultata natjecatelji će uz rezultat izvođenja na primjerima test podataka dobiti i združene rezultate izvođenja na nekim test podacima. Rezultati će biti združeni u nekoliko kategorija (točno, krivo, vremensko ograničenje) gdje će za svaku kategoriju pisati broj rezultata koji se nalaze u toj kategoriji. Moguće je ograničenje na broj slanja po zadatku na kojima se nude prošireni rezultati. KAMP 2012. 21 Završetak natjecanja 15, 5 i 1 minutu pred završetak natjecanja biti će izdano upozorenje o preostalom vremenu. Po završetku natjecanja, natjecatelj mora odmah prekinuti sve aktivnosti i čekati za stolom bez diranja računala, tipkovnice, miša i ostalih natjecateljskih materijala. Na objavu organizatora, natjecatelj će napustiti dvoranu prema uputama. Prevođenje rješenja Rješenja poslana na sustav prevodit će se sa sljedećim argumentima: • za C: gcc -o xyz xyz.c -std=c99 -O2 -s -static -lm -x c g++ -o xyz xyz.cpp -O2 -s -static -lm -x c++ • za C++: • za Pascal: fpc -O2 -XS -Sg xyz.pas Ocjenjivanje Svaki zadatak ima nekoliko grupa od jednog ili više test primjera. Svaka grupa nosi određen broj bodova, a bodovi za tu grupu dobit će se ako i samo ako svaki test primjer u njoj bude točno riješen i pritom poštuje zadana vremenska i memorijska ograničenja iz teksta zadatka. Broj bodova na zadatku bit će zbroj bodova po grupama test primjera tog zadatka. Ukupni broj bodova biti će zbroj bodova pojedinih zadataka. Bodovat će se samo oni zadaci koji su poslani i zadovoljili evaluaciju od strane evaluatora. Pravila ponašanja i varanje Svaki natjecatelj koji ometa druge, oštećuje opremu, pristupa drugim računalima, komunicira s drugim natjecateljima ili prepisuje tuđi kod podložan je diskvalifikaciji s natjecanja. Varanjem će se smatrati ako natjecateljev program pokazuje sljedeće karakteristike: • pristupa mreži • stvaranje novih procesa (fork()) • otvara i kreira datoteke • napada ili kompromitira sigurnost sustava ili servera • izvršava druge programe • mijenja prava pristupa datotekama • iščitava informacije datotečnog sustava • poziva sistemske procedure koje nisu vezane uz rješavanje zadataka Žalbe Nakon završetka natjecanja i objavljivanja rezultata, moguće je u roku od 30 minuta podnijeti žalbu pisanim putem. Znanstveni odbor će razmotriti žalbu i ukoliko je ustanovljena greška u sustavu evaluacije rješenja, sva predana rješenja za taj zadatak će se ponovo reevaluirati. Reevaluirana rješenja odnosit će se na sve natjecatelje. Nagrade i priznanja Svi sudionici će dobiti priznanja za sudjelovanje, a najbolji medalje i diplome. Osvajači medalja na JHIOu bit će dodatno nagrađeni pozivom na Zimsku školu informatike 2013. bez natječaja. U Zagrebu, lipanj 2012. 22 Znanstveni odbor 1. juniorske hrvatske informatičke olimpijade – JHIO 2012. KAMP 2012. RADIONICA: OLIMPIJCI JUNIORI Predavač: Nikola Dmitrović, prof. mentor Polaznici: 1. Robert Benić 2. Domagoj Bradač 3. Branimir Filipović 4. Marija Gegić 5. Vedran Kurdija 6. Vilim Lendvaj 7. Nikola Pintarić 8. Stjepan Požgaj PRIPREME ZA JHIO Značajna novost i dopuna programa ovogodišnjeg Kampa, bilo je održavanje 1. juniorske hrvatske informatičke olimpijade – JHIO 2012. Kako bi se sudionici 1. JHIO-a 2012. što bolje pripremili za ovo i buduća međunarodna natjecanja, tijekom Kampa su se organizirale pripreme i razne simulacije natjecanja. Pripreme su bile organizirane i planski vođene tijekom cijelog dana u posebnoj informatičkoj učionici kako bi se sudionici natjecanja zajednički družili i stjecali natjecateljsko iskustvo. Pripreme su bile podijeljene u tri dijela. Jutarnji i večernji dio sam osobno vodio, dok je organizacija i vođenje podnevnog dijela bila prepuštena članovima seniorskog olimpijskog tima koji su se tijekom Kampa pripremali za CEOI i IOI 2012 te prisutnim predavačima na Kampu. U jutarnjem terminu, koji je trajao od 9 do 11:30 sati, polaznici su u većini slučajeva rješavali zadatke s prošlih natjecanja. Zadaci su se rješavali na različite načine, pri čemu su polaznici razmjenjivali ideje i uz voditeljevu pomoć dolazili do optimalnih rješenja. Podnevni dio, koji je trajao od 11:30 do 14:30 (s pauzom za ručak), bio je rezerviran za teoretska predavanja te rješavanje tipičnih zadataka vezanih uz obrađivano područje. Nakon popodnevnog kupanja i odmora te večere, za natjecatelje su bila organizirana probna natjecanja, razne simulacije i natjecanja timova. Naravno, neke od ovih dionica su bile i drugačije organizirane, ovisno o trenutnoj situaciji i raspoloženju sudionika i voditelja. Pogledajmo detaljno (po terminima) program priprema koji su prošli sudionici 1. JHIO-a 2012. Dan 1. • upoznavanje s planom priprema, motivacijsko predavanje i uvodno zagrijavanje uz rješavanje jednostavnih zadataka; • u večernjem terminu je organizirano natjecanje u brzom rješavanju kratkih zadataka. Dan 2. • rješavanje drugih i trećih zadataka s HONI-ja 2011./2012.; • teoretsko predavanje o rekurzijama, voditelj priprema: Dominik Gleich; • zajedničko rješavanje zadatka Hitori s Državnog natjecanja 2012. za OŠ. KAMP 2012. 23 Dan 3. • simulacija natjecanja u trajanju od tri sata sa zadacima sa starih HONI-ja. Natjecanje je provedeno na HSIN-ovom evaluatoru u okruženju kakvo je bilo na samom JHIO-u; • teoretsko predavanje o geometriji, voditelj priprema: Matija Bucić; • svaki natjecatelj je trebao odabrati jedan zadatak koji je susreo na nekom od dosadašnjih natjecanja, a koji je imao veliki utjecaj na njegov natjecateljski razvoj. Marija Gegić i Domagoj Bradač su predstavili svoje odabrane probleme i nakon provedene diskusije o raznim rješenjima, predstavili svoja originalna rješenja. Dan 4. • analiza i predstavljanje rješenja zadataka koji su bili zadani na simulaciji prethodnog dana; • teoretsko predavanje o logaritamskoj strukturi, voditelj priprema: Domagoj Ćevid; • Organizirano je i provedeno timsko natjecanje u kome su natjecatelji bili podijeljeni u timove na osnovu rezultata simulacije iz prethodnog dana. Ovo timsko natjecanje je po svom obliku najbliže teniskom natjecanju Davis Cup. Naime, jedan natjecatelj u timu ima oznaku „prvog programera“, drugi ima oznaku „drugog programera“ dok preostala dva natjecatelja u timu imaju ulogu „parova“. Po uzoru na Davis Cup, natjecatelji iz suparničkih timova rješavaju zadatak, a pobjednik „meča“ je onaj koji prije točno riješi postavljeni problem. Dan 5. • rješavanje zadataka s državnog i županijskog natjecanja 2012. OŠ (Avioni, Mancala, Hittori, Othello) • teoretsko predavanje o grafovima i stablima, voditelj priprema: Matija Milišić; • slobodna večer za opuštanje uz organizirano praćenje nogometne utakmice Dan 6. • prvi JHIO ispit u trajanju od 120 minuta (2 zadatka) • slobodno vrijeme za odmor od natjecanja; • prezentacija rješenja zadataka s prvog dana, voditelji prezentacije: Matija Osrečki i Ivan Katanić. Dan 7. • kako su se pripreme primicale ključnom trenutku 1. JHIO-a, tako su i zadaci postajali sve teži; ovaj put su se rješavali zadaci sa županijskog natjecanja 2012. za srednje škole (M, Klingonci, Parlament) • rješavanje zadataka kroz koje je napravljen pregled raznih teoretskih ideja, voditelji priprema: Marin Tomić, Dominik Gleich; • rješavanje petih zadataka s HONI-ja 2011./2012. 24 KAMP 2012. Dan 8. • organizirano je drugo timsko pripremno natjecanje po uzoru na Davis Cup; • teoretsko predavanje o Dijkstrinom i sličnim algoritmima, voditelj priprema: Antun Razum; • motivacijsko predavanje i analiza pogrešaka učinjenih prvog dana natjecanja; slobodno vrijeme za odmor i pripremu prije drugog dana natjecanja. Dan 9. • drugi JHIO ispit u trajanju od 180 minuta (3 zadatka) i dodatno natjecanje za 2 učenika s istim brojem bodova u trajanju od 90 minuta (1 zadatak). • proglašenje hrvatskog informatičkog juniorskog tima za 2012. godinu. Nikola Dmitrović KAMP 2012. 25 NIKOLA DMITROVIĆ, prof. mentor RIJEČ JE O ZBILJA DOBROJ IDEJI Ove se godine prvi puta održala Juniorska hrvatska informatička olimpijada – JHIO 2012, a vi ste bili voditelj priprema olimpijaca juniora. Kako ste zadovoljni organizacijom? Definitivno, riječ je o jednom novom projektu u koji se Hrvatski savez informatičara upustio i vjerujemo da je to pravi način kako mlade snage koje dolaze iz osnovnih škola motivirati i pokrenuti da budu još uspješniji i da se bave ovim poslom zbog kojeg smo mi, prvenstveno, ovdje s njima. Trenutno je u konkurenciji na 1. juniorskoj hrvatskoj informatičkoj olimpijadi osam učenika koji su tokom ovih 9 dana izbornih priprema stekli nova znanja i iskustva. Možemo reći da su smireniji i da su vidjeli kako izgledaju prave natjecateljske situacije u kojima se trebaju nositi s dosta težim zadacima nego što to obično biva u njihovim karijerama. Mislite li da je dobro da se natjecanje održava za vrijeme Kampa ili bi se trebalo naknadno organizirati? Riječ je ipak o prvoj takvoj situaciji. Kad završi, sjest ćemo i analizirati sve, ali ovdje zasad nisam primijetio ništa posebno loše u ovakvom konceptu. Ekipa u jednoj opuštenoj atmosferi provede rad u druženju i učenju, a ovakvo natjecanje možda je manje stresno kad nije u nekom širem okruženju u koje su baš zbog toga došli. Ovako ih popodnevna kupanja malo opuste. Što očekujete u budućnosti od natjecatelja? Velike stvari. Definitivno riječ je o generaciji koja u ovom trenutku može i zna stvari koje su do prije 10 godina znali samo pravi olimpijci, posebno kad držimo pripreme s njima. Bivši olimpijci koji su nam bili u gostima, čudili su se kako objašnjavamo neke teme za koje su oni čuli tek u 3. ili 4. razredu na pripremama za velike olimpijce, a današnji klinci već mogu pratiti takve stvari. Među ovih osam ima 7-ih i 8-ih razreda, oni će sada ulaziti u sustav srednjih škola i, vjerujemo, zamjenjivati ove naše, trenutno aktivne, "velike" olimpijce. 26 KAMP 2012. Profesor-mentor ste u XV. gimnaziji i vodite pripreme za natjecatelje iz informatike. Kako se te pripreme razlikuju od ovih na Kampu? Pripreme su općenito koncipirane tako da najbolje odgovaraju pojedincu. Pokušavamo složiti skupine tako da u jednoj grupi svi imaju relativno jednako predznanje. Ovdje na Kampu se može dobiti jako nehomogena grupa u kojoj je netko jako istaknut, a netko se tek uhodava, ali želi čuti o algoritmima i sličnom. Na Kampu nekad treba razdvojiti grupu, pa jednima pričati niže stvari, a drugima više stvari, znači diferencirati rad, kao što smo to učinili na pripremama u XV. gimnaziji. Na Kampu su pripreme svakodnevne, određene teme se održavaju u zadano vrijeme, dok se u školi pripreme ostvaruju jednom tjedno po 2 sata. Pripreme se pojačavaju pred natjecanja kada se održavaju češće, po 3 ili 4 sata, a nekada traju i cijeli dan. Vodite li pripreme i za starije olimpijce? Ne, jako dobar posao s njima rade bivši olimpijci, Matija Osrečki i Ivan Katanić, s ekipom koja je jako motivirana, aktivna i željna raditi. Zanimljivo je da se u timu za IOI nalaze i natjecatelji koji idu na Svjetsku matematičku olimpijadu, pa se te pripreme kombiniraju. Na informatici se rade matematičke stvari, informatičke stvari na matematici. Jedna interdisciplinarnost je na djelu. Na Kampu također vodite i radionicu C++/Python na koju vam dolazi mnogo mladih osnovnoškolaca. Vidite li u njima neke buduće natjecatelje? Ima, ima potencijala definitivno. Općenito na Kampu, osoba koja dođe, dobije dodatnu volju za rad, ona je nakon Kampa prepuna ideja, prepuna motiva, prepuna želje da sama nešto istražuje i radi. Mi ovdje, u relativno kratkom vremenu, možemo pokazati osnove, motivirati i započeti tu priču, a oni, ako su zainteresirani, to onda nastave. U većini slučajeva to dobro ispadne, a nekad završi i s nekim medaljama na olimpijadama, što nije tako rijetko. A što se tiče ove grupe pokušali smo spojiti C++ i Python, pokazati kako osmisliti neku ideju i kako to realizirati u stvarnosti, objasniti koje su razlike između jezika C++ i Pythona. U kojem jeziku se može nešto brže, elegantnije napraviti. Jednostavno smo htjeli da shvate kako jednu stvar mogu napraviti na više različitih načina. Uz sve te pripreme imate li slobodnog vremena? Pored toga što sam voditelj radionica, voditelj sam i pedagoškog dijela za određen dio učenika i svaki dan se pobrinem da odemo na plažu. Kako su velike vrućine zavladale baš u vrijeme kad smo mi došli, što je s jedne strane pozitivno, a s druge je najveća vrućina baš onda kada smo mi trebali ići na plažu, sve smo to malo pomakli prema večeri tako da smo svaki dan uspjeli doći na plažu. Plivanje, picigin, kupanje, to nam je ispunjavalo dan. Posebno se ova ekipa JHIO-vaca zajedno držala i pokušavao sam ih motivirati i davati im savjete kako se nositi s tremom koja je definitivno prisutna kod nekih natjecatelja. Budući da je to njima prvo veliko natjecanje, mislite li da su ga dovoljno ozbiljno shvatili, ili možda još ne razumiju koliko je to veliko? Neki ga čak shvaćaju i preozbiljno. Kod nekih je trema prisutna puno više nego što bi trebala, ali to sve treba pripisati neiskustvu i njihovoj mladosti, no ozbiljno su to shvatili. Shvaćaju to prilikom da se dokažu i da se sve ono što su zadnjih nekoliko godina, kao natjecatelji, radili i postigli naplati putovanjem u drugu zemlju gdje će se natjecati sa svojim vršnjacima iz drugih zemalja. Tako da je motiv definitivno prisutan. Imate li nekakva očekivanja za razvoj ovog natjecanja? Ovih 10 dana mi je dalo dojam da je riječ o zbilja dobroj ideji. Okupiti najbolje natjecatelje mlađe od određenog broja godina, kako to međunarodna pravila zahtijevaju, je jako korisno i ne samo za njih kao pojedince, već i za naš sustav, da ga možemo kroz vrijeme oplemenjivati i obogaćivati s novim ljudima da taj sustav ne bi negdje stao, prestao postojati i ugasio se kad neki od ovih naših "velikih" olimpijaca izađu iz te priče. Razgovor vodila: Helena Mikulić KAMP 2012. 27 POPIS POLAZNIKA PO RADIONICAMA ALGORITMI POČETNI – Matija Bucić R. br. Ime i prezime Škola, Općina / Grad Razred 1. Josip Klepec I. osnovna škola Vrbovec 6. 2. Petar Orlić OŠ J. Račića, Zagreb 8. 3. Martin Rosenzweig OŠ I. Filipovića, Zagreb 8. 4. Mario Vuzem Srednja škola Krapina, Krapina 2. 5. Mislav Gucunski III. gimnazija, Osijek 3. 6. Ivan Šego XV. gimnazija, Zagreb 1. 7. Luka Barišić XV. gimnazija, Zagreb 1. 8. Helena Mikulić XV. gimnazija, Zagreb 2. 9. Pavao Jerebić III. gimnazija, Split 1. 10. Ivan Lazarić Gimnazija, Pula 1. 11. Marko Lazarić OŠ Centar, Pula 7. 12. Ivana Žužić Gimnazija A. Mohorovičića, Rijeka 1. 13. Tonko Sabolčec XV. gimnazija, Zagreb 1. ALGORITMI NAPREDNI – Marin Smiljanić R. br. 28 Ime i prezime Škola, Općina / Grad Razred 1. Mislav Gucunski III. gimnazija, Osijek 3. 2. Filip Keri XV. gimnazija, Zagreb 2. 3. Ivan Lazarić Gimnazija, Pula 1. 4. Mihael Liskij XV. gimnazija, Zagreb 1. 5. Zvonimir Medić XV. gimnazija, Zagreb 3. 6. Neven Miculinić Udruga darovitih informatičara Rijeke, Rijeka 3. 7. Tonko Sabolčec XV. gimnazija, Zagreb 1. 8. Kristijan Vulinović Gim. A. Mohorovičića, Rijeka 2. 9. Ivan Šego XV. gimnazija, Zagreb 1. 10. Luka Barišić XV. gimnazija, Zagreb 1. 11. Ivana Žužić Gim. A. Mohorovičića, Rijeka 1. KAMP 2012. BASIC početni – Mislav Balunović R. br. Ime i prezime Škola, Općina / Grad Razred 1. Marko Žužić OŠ F. K. Frankopana, Vrh 5. 2. Jakov Depikolozvane OŠ F. K. Frankopana, Vrh 5. 3. David Brusić OŠ F. K. Frankopana, Malinska 4. 4. Ivana Milčetić OŠ F. K. Frankopana, Malinska 4. 5. Josip Zrilić OŠ F. K. Frankopana, Malinska 4. 6. Filip Crnčić OŠ F. K. Frankopana, Dobrinj 4. 7. Anto Avgustinović OŠ F. K. Frankopana, Malinska 4. 8. Elena Lukić OŠ F. K. Frankopana, Malinska 4. 9. Maria Elena Hržić OŠ F. K. Frankopana, Malinska 4. 10. Zoja Nekić OŠ F. K. Frankopana, Krk 4. 11. Benjamin Marić OŠ F. K. Frankopana, Krk 4. BASIC napredni – Marijan Jurešić, dipl. ing. / Mislav Balunović R. br. Ime i prezime KAMP 2012. Škola, Općina / Grad Razred 1. Karlo Sintić OŠ F. K. Frankopana, Krk 6. 2. Fran Vasilić OŠ F. K. Frankopana, Krk 6. 3. Marina Samblić OŠ F. K. Frankopana, Krk 6. 4. Lucija Žužić OŠ F. Frankovića, Rijeka 6. 5. Luka Braut OŠ F. K. Frankopana, Krk 5. 6. Lorenzo Šamanić OŠ F. K. Frankopana, Krk 5. 7. Luka Gabriel Rošić OŠ F. K. Frankopana, Vrh 5. 8. Nikica Stijepić OŠ F. K. Frankopana, Vrh 5. 29 LOGO početni – Helena Mikulić R. br. Ime i prezime Škola, Općina / Grad Razred 1. Elena Lukić OŠ F. K. Frankopana, Malinska 4. 2. Maria Elena Hržić OŠ F. K. Frankopana, Malinska 4. 3. Anto Avgustinović OŠ F. K. Frankopana, Malinska 4. 4. David Brusić OŠ F. K. Frankopana, Malinska 4. 5. Zoja Nekić OŠ F. K. Frankopana, Krk 4. 6. Filip Crnčić OŠ F. K. Frankopana, Dobrinj 4. 7. Benjamin Marić OŠ F. K. Frankopana, Krk 4. 8. Josip Zrilić OŠ F. K. Frankopana, Malinska 4. 9. Ivana Milčetić OŠ F. K. Frankopana, Malinska 4. LOGO napredni – Mihael Liskij R. br. Ime i prezime Škola, Općina / Grad Razred 1. Ivan Jambrešić ZRS / Udruga programera S VIJUGOM, Zagreb 3. 2. Lorenzo Šamanić OŠ F. K. Frankopana, Krk 5. 3. Luka Braut OŠ F. K. Frankopana, Krk 5. 4. Marko Lazarić OŠ Centar, Pula 7. 5. Lucija Žužić OŠ F. Franković, Rijeka 6. 6. Dorijan Lendvaj RIK Popovača 2. 7. Luka Gabriel Rošić OŠ F. K. Frankopana, Vrh 5. 8. Nikica Stijepić OŠ F. K. Frankopana, Vrh 5. PHP – Gordan Nekić R. br. Ime i prezime 30 Škola, Općina / Grad Razred 1. Fran Vasilić OŠ F. K. Frankopana, Krk 6. 2. Karlo Sintić OŠ F. K. Frankopana, Krk 6. 3. Josip Klepec I. osnovna škola Vrbovec 6. 4. Pavao Jerebić III. gimnazija, Split 1. 5. Marko Lazarić OŠ Centar, Pula 7. 6. Dino Ilić SŠ za elektr. i rač., Rijeka 2. KAMP 2012. Početnici – Diana Lendvaj, dipl. ing. R. br. Ime i prezime Škola, Općina / Grad Razred 1. Mia Šimić OŠ F. K. Frankopana, Malinska 2. 2. Sven Ahčin PŠ Strmec Samoborski 3. 3. Filip Ahčin PŠ Strmec Samoborski 1. 4. Matej Ban - - 5. Tomislav Franov OŠ F. K. Frankopana, Krk 2. 6. Filip Braut OŠ F. K. Frankopana, Krk 3. 7. Renato Braut OŠ F. K. Frankopana, Krk 3. 8. Vanesa Morić OŠ F. K. Frankopana, Krk 3. 9. Patrik Bajčić OŠ F. K. Frankopana, Malinska 2. 10. Renato Šutić OŠ F. K. Frankopana, Krk 3. 11. Marin Geljić OŠ F. K. Frankopana, Krk 3. 12. Damjan Klobučar OŠ F. K. Frankopana, Krk 2. 13. Lurda Kauzlarić OŠ F. K. Frankopana, Malinska 2. PROGRAMSKI JEZICI PYTHON / C++ – Nikola Dmitrović, prof. R. br. Ime i prezime KAMP 2012. Škola, Općina / Grad Razred 1. Helena Mikulić XV. gimnazija, Zagreb 2. 2. Mario Vuzem Srednja škola Krapina, Krapina 2. 3. Petar Orlić OŠ J. Račića, Zagreb 8. 4. Martin Rosenzweig OŠ I. Filipovića, Zagreb 8. 5. Dorijan Lendvaj RIK Popovača 2. 6. Josip Klepec I. osnovna škola Vrbovec 6. 7. Lucija Žužić OŠ F. Frankovića, Rijeka 6. 8. Karlo Sintić OŠ F. K. Frankopana, Krk 6. 9. Fran Vasilić OŠ F. K. Frankopana, Krk 6. 10. Marina Samblić OŠ F. K. Frankopana, Krk 6. 11. Marko Lazarić OŠ Centar, Pula 7. 31 VISUAL BASIC / SQL SERVER – Marijan Jurešić, dipl. ing. / Gordan Nekić R. br. Ime i prezime Škola, Općina / Grad Razred 1. Ivana Žužić Gimnazija A. Mohorovičića, Rijeka 1. 2. Pavao Jerebić III. gimnazija, Split 1. 3. Dino Ilić SŠ za elektr. i rač., Rijeka 2. 4. Fran Vasilić OŠ F. K. Frankopana, Krk 6. 5. Karlo Sintić OŠ F. K. Frankopana, Krk 6. 6. Kristijan Vulinović Gimnazija A. Mohorovičića, Rijeka 2. OLIMPIJCI JUNIORI – Nikola Dmitrović, prof. R. br. Ime i prezime Škola, Općina / Grad Razred 1. Robert Benić ZRS/Udruga informatičara Božo Težak, Zagreb 7. 2. Domagoj Bradač OŠ Otok, Zagreb 8. 3. Branimir Filipović XV. gimnazija, Zagreb 1. 4. Marija Gegić OŠ Retkovec, Zagreb 8. 5. Vedran Kurdija OŠ Mladost, Zagreb 7. 6. Vilim Lendvaj RIK Popovača 6. 7. Nikola Pintarić OŠ I. G. Kovačića, Sv. Juraj na Bregu 8. 8. Stjepan Požgaj OŠ Belica, Belica 8. OLIMPIJCI SENIORI – Matija Osrečki R. br. Ime i prezime 32 Škola, Općina / Grad Razred 1. Mislav Balunović Gim. M. Mesića, Sl. Brod 2. 2. Domagoj Ćevid V. gimnazija, Zagreb 3. 3. Dominik Gleich XV. gimnazija, Zagreb 2. 4. Matija Milišić XV. gimnazija, Zagreb 4. 5. Antun Razum XV. gimnazija, Zagreb 4. 6. Marin Tomić V. gimnazija, Zagreb 3. 7. Tomislav Tunković Gim. L. Vranjanina, Zagreb 4. KAMP 2012. R A D I O N I C E KAMP 2012. 33 OSNOVNA ŠKOLA "FRAN KRSTO FRANKOPAN" Osnovna škola u Gradu Krku djeluje kao posebno područno razredno odjeljenje u sklopu OŠ "Fran Krsto Frankopan" Krk, najveće otočne škole u Primorsko-goranskoj županiji. Ona obuhvaća još šest osmogodišnjih i jednu četverogodišnju školu u mjestima: Omišalj, Malinska-Dubašnica, Vrh, Punat, Dobrinj, Vrbnik i Baška, sa zajedničkom upravom smještenom u krčkoj školi koja je ujedno i matična škola svim ostalima. Osnovna škola "Fran Krsto Frankopan" u Gradu Krku nalazi se na sjeveroistočnom rubu staroga grada omeđenog srednjovjekovnim gradskim bedemom. 34 KAMP 2012. RADIONICE LOGO početni Predavač: Helena Mikulić Polaznici: 1. Elena Lukić 2. Maria Elena Hržić 3. Anto Avgustinović 4. David Brusić 5. Zoja Nekić 6. Filip Crnčić 7. Benjamin Marić 8. Josip Zrilić 9. Ivana Milčetić Pohvaljeni: David Brusić i Ivana Milčetić Na radionici LOGO – POČETNI sudjelovali su učenici 4.-ih razreda s otoka Krka. Oni su u školi već odradili jednu godinu rada s Logom pa smo radionicu započeli ponavljanjem i utvrđivanjem naučenog gradiva. Nakon što su svi polaznici imali utvrđeno određeno predznanje započeli smo s novim gradivom. Prije nego što smo počeli raditi naredbe, radili smo malo matematike i svojstva mnogokuta (učili smo kutove, da je zbroj kutova u trokutu 180...) kako bismo što lakše radili zadatke koji su slijedili. Započeli smo rad jednostavnim naredbama CIRCLE i ARC (ARC2) za crtanje kruga i kružnog luka. Naučili smo pobojati unutrašnjost lika, te promijeniti boju olovke i imenovati dijelove zadatka naredbom LABEL. Naučili smo nove načine kretanja kornjače pomoću naredbe SETPOS LIST. Naposljetku smo se prebacili u edall gdje smo se naučili koristiti varijablama te smo naučili naredbu raščlanjivanja, IF. Mnogi zadaci koje smo radili činili su se teški na prvi pogled, ali uz malu pomoć (uglavnom oko kutova) sve smo uspjeli riješiti. KAMP 2012. 35 RADIONICE Ovo nam je bio najdraži zadatak: Srećko stoji pred liftom u shoping centru. Nije sasvim siguran želi li ići gore ili dolje. Pomozi Srećku tako da nacrtaš znakove za gore ili dolje. Napiši program LIFT :d :br koji će nacrtati crtež kao na slici. Duljine dužina strelica označene su na slici. Ako se upiše broj 0 uključit će se strelice prema gore, a ako se upiše broj 1 strelice se trebaju crtati prema dolje. Položaj slike na ekranu nije bitan. Rješenje: to cs if :d pu rt fd lift :d :br :br=0 [rt 60 fd :d rt 60 fd :d lt 120 lt 60 fd :d/4 lt 180 fd :d/2 pd 60 fd :d rt 60 fd :d lt 120 fd :d/4 lt 60 :d lt 60 fd :d lt 60 fd :d/4] fd :d/4 lt 60 if :br=1 [rt 180 rt 60 fd :d rt 60 fd :d lt 120 fd :d lt 60 fd :d lt 60 fd :d/4 pu lt 180 fd :d/2 pd rt 60 fd :d rt 60 fd :d lt 120 fd :d/4 lt 60 fd :d lt 60 fd :d lt 60 fd :d/4] end fd :d lt 60 fd fd :d/4 lt 60 Helena Mikulić 36 KAMP 2012. RADIONICE LOGO napredni Predavač: Mihael Liskij Polaznici: 1. Ivan Jambrešić 2. Lorenzo Šamanić 3. Luka Braut 4. Marko Lazarić 5. Lucija Žužić 6. Dorijan Lendvaj 7. Luka Gabriel Rošić 8. Nikica Stijepić Pohvaljeni: Ivan Jambrešić, Lucija Žužić i Dorijan Lendvaj Na radionici LOGO napredni sudjelovali su mlađi polaznici nego inače i sa različitim nivoima znanja. Zajedno su se na radionici našli državni natjecatelji i oni koji još nisu u potpunosti upoznati s logom. Iz tog razloga program je bio podijeljen u dvije skupine. Državni natjecatelji su prvo dobili raznolike zadatke kako bi se vidjelo koji im tipovi zadataka ne idu, te se tada radilo na njihovom poboljšavanju u tim područjima. Za to se vrijeme s ostalim polaznicima radilo na svladavanju osnova loga kao što su naredbe: MAKE, IF, FOR, REMAINDER, te rad sa listama. Naglasak tijekom svih predavanja je bio na korištenju ugrađenog INDEXA (popisu i objašnjenu svake naredbe) u logu. Polaznici su bili potaknuti da sami pokušaju dokučiti nove naredbe, te iz konteksta zaključiti kako raditi s njima. Također su uz svaku novu naredbu bili zadani slični zadatci kako bi se savladala novostečena naredba. Primjeri lakših zadataka: Zadatak 1: Napiši funkciju VECI :l :br koja prima listu brojeva :l i jedan broj :br. Ispiši sve brojeve iz liste koji su veći od :br. Rješenje: to veci :l :br for [i 1 [count :l] 1][ if (item :i :l)>:br [pr (item :i :l)] ] end KAMP 2012. 37 RADIONICE Zadatak 2: Napiši funkciju NEPARNI :l :br koja prima listu brojeva :l i jedan broj :br. Ispiši sve neparne brojeve iz liste. Rješenje: to neparni :l :br for [i 1 [count :l] 1][ if (remainder (item :i :l) 2) = 0 [pr (item :i :l)] ] end Komentar: Rješenje oba zadatka je da pomoću for petlje obiđemo cijelu listu te na svaki element primijenimo zadanu provjeru te ga ispišemo ako ona prolazi. Ovakvi zadatci su dobri za početnike kako bi mogli isprobati nove naredbe kao FOR i ITEM, te REMAINDER. Primjeri težih zadataka: Zadatak 1: Napiši program TO ZGRADE :l koji treba nacrtati obris zadanih zgrada. Zgrade su opisane kao podliste liste :l koje imaju oblik [pozicija širina visina], te je oblik same zgrade pravokutnik. Zgrade se crtaju na ravnoj crti koja je paralelna sa dnom ekrana. Pozicija zgrade se računa od ishodišta ekrana i nikad se dvije zgrade ne će preklapati. Rješenje: to zgrade :l rt 90 fd 1000 for [i 1 [count :l] 1][ make "trZgrada (item :i :l) setxy (item 1 :trZgrada) ycor lt 90 fd (item 3 :trZgrada)-ycor rt 90 fd (item 2 :trZgrada) if not :i=(count :l) [ if (not (item 1 :trZgrada)+(item 2 :trZgrada)=(item 1 (item :i+1 :l))) [ setxy xcor 0 ] ] ] setxy xcor 0 end Komentar: Obično rješenje ovog zadatka ne zahtjeva poznavanje koordinatnog sustava (ali se pomoću njega puno elegantnije riješi) već samo poznavanje FOR petlja i naprednije poznavanje crtanja na ekran. Algoritam za rješavanje ide ovako: 1) Pomakni kornjaču na početnu poziciju zgrade 2) Pomakni kornjaču na točnu visinu zgrade (u ovom koraku se nacrta lijeva strana zgrade) 3) Pomakni kornjaču za širinu zgrade (gornja strana zgrade) 4) Provjeri da li se sljedeća zgrada nastavlja na trenutnu, ako ne – spusti kornjaču natrag na “pod“ i time nacrtaj desni rub zgrade, a u suprotnom ostavi kornjaču gdje je jer će se trenutna zgrada spojiti sa sljedećom 38 KAMP 2012. RADIONICE Primjeri: cs zgrade [[100 50 30][150 50 100][210 30 30][240 80 40][320 50 20]] cs zgrade [[-200 50 50][-150 40 60][-110 30 70][-80 30 120][0 50 70][50 20 20][80 40 60]] Zadatak 2: Napiši funkciju ZAMJENA :l koja prima listu čiji su elementi brojevi ili iste takve liste. Zamijeni sve brojeve u listi s njihovim brojem pojavljivanja u svim listama i podlistama. Rješenje: to rek :l localmake "l2 [] for [i 1 [count :l] 1][ ifelse listp(item :i :l) [ make "l2 lput rek (item :i :l) :l2 ][ make "l2 lput switch (item :i :l) :lista :l2 ] ] op :l2 end to switch :num :l localmake "zbr 0 for [i 1 [count :l] 1][ ifelse listp(item :i :l) [ make "zbr :zbr+switch :num (item :i :l) ][ if (item :i :l)=:num [make "zbr :zbr+1] ] ] op :zbr end KAMP 2012. 39 RADIONICE to zamjena :l make "lista :l show rek :lista end Komentar: Zadatak je riješen korištenjem rekurzivne REK :l i pomoćne funkcije SWITCH :num :l . Funkcija REK je zadužena da napravi rekurzivni obilazak po listi :l i da svaki broj na koji naiđe zamjeni sa rezultatom funkcije SWITCH. Funkcija SWITCH, također s rekurzivnim obilaskom, prebroji broj pojavljivanja proslijeđenog elementa te ga vrati kao rezultat. Funkcija ZAMJENA služi samo da stvori globalnu listu :l nazvanu :lista, te da pokrene funkciju REK i ispiše njen rezultat. Primjeri: zamjena [1 1 1 2 2 2 3 3 3 3] Izlaz:[3 3 3 3 3 3 4 4 4 4] zamjena [1 2 3 [ 1 [ [1] 2 ] 3 ] 4] Izlaz: [3 2 2 [3 [[3] 2] 2] 1] zamjena [1 7 34 [56 7 7 [1]] 32 [1 [1] 56] 7 1] Izlaz: [5 4 1 [2 4 4 [5]] 1 [5 [5] 2] 4 5] Zadnjih nekoliko dana radionice bili su predviđeni za utvrđivanje i istovremeno primjenjivanje svega naučenog. Od zadataka su rješavani zadatci sa prošlih županijskih natjecanja kako bi polaznici mogli iskusiti težinu pravih zadataka sa natjecanja. Svi polaznici su, sukladno svojem nivou znanja, usvojili novo gradivo i uspješno primijenili na rješavanju zadataka. Najbolji su dobili pohvale za isticanje i zalaganje tijekom radionice. Mihael Liskij 40 KAMP 2012. RADIONICE BASIC početni Predavač: Mislav Balunović Polaznici: 1. Marko Žužić 2. Jakov Depikolozvane 3. David Brusić 4. Ivana Milčetić 5. Josip Zrilić 6. Filip Crnčić 7. Anto Avgustinović 8. Elena Lukić 9. Maria Elena Hržić 10. Zoja Nekić 11. Benjamin Marić Pohvaljeni: Marko Žužić, Jakov Depikolozvane i Josip Zrilić Učenici koji su pohađali ovu radionicu imali su vrlo malo predznanja iz programskog jezika BASIC. Cilj ove radionice bio je naučiti polaznike osnovama programiranja u programskom jeziku BASIC kako bi kasnije sami mogli nastaviti kôdirati u njemu i kako bi se zainteresirali za programiranje općenito. Nakon uvodnog predavanja koje se temeljilo na teoretskom objašnjavanju principa programiranja, kôdiranja i izvršavanja programa, prva tema je bila upoznavanje sa sučeljem BASIC-a i osnovnim elementima za početak samostalnog rada. Započeli smo sa vrlo jednostavnom sintaksom i počeli smo rješavati laganije zadatke. Grupa je napredovala podjednakom brzinom što je olakšavalo predavanje. Na početku radionice polaznici su učili kako se snalaziti na ekranu i općenito dobiti dojam o tome kako se izvodi program. Primjer takvog zadatka bi bio: "Napiši program koji u prvom redu ispisuje jednu riječ, u drugom dvije riječi, a u trećem redu jednu riječ." Rješenje: CLS PRINT "prvi" PRINT "drugi red"; PRINT "treći" Nastavili smo s pojmom varijable i nakon nekoliko provježbanih zadataka, krenuli smo na ozbiljniji pristup. Objašnjena im je i if-else provjera. To su svi shvatili iz prve i moglo se brže preći na for-petlju. Kroz radionicu su polaznici učili i sintaksu programskog jezika BASIC, ali i to da se zadaci mogu riješiti na drugačije načine, bolje načine. Primjer zadatka na kojemu su to mogli točno vidjeti je: „Napišite program koji učitava prirodan broj n i ispisuje sve neparne prirodne brojeve manje ili jednake od n.“ KAMP 2012. 41 RADIONICE Prvo rješenje: CLS INPUT n FOR i = 1 TO n IF i MOD 2 = 1 THEN PRINT i END IF NEXT i Drugo rješenje: CLS INPUT n FOR i = 1 TO n STEP 2 PRINT i NEXT i Treće rješenje: CLS INPUT n FOR i = 1 TO n / 2 PRINT i * 2 – 1 NEXT i Razlika između prvog i drugog rješenja je u tome što je drugo rješenje duplo brže od prvoga – for petlja čini duplo manje koraka. Što se brzine tiče, između drugog i trećeg rješenja nema razlike, ali radili smo treće rješenje kako bi polaznici vidjeli da se zadatak može riješiti na različite načine, ovisno o tome što im se u tom trenutku čini kao bolja opcija. Pred kraj radionice radili smo nešto napredniju temu – stringovi. Polaznicima su objašnjene osnovne naredbe i općenito pojam stringa. Podatak tipa string sastoji se od znakova (maksimalno do 255 znakova). Prilikom rada sa stringovima moramo naglasiti da je neka varijabla tipa string. To ćemo učiniti tako da iza imena varijable stavimo znak "$". Kad s tipkovnice učitavamo vrijednost na varijablu tipa string, računalo očekuje znak, a ne broj, tako da ukoliko i upišemo neki broj računalo će ga tretirati kao bilo koji drugi specijalni znak ili slovo. Za one naprednije polaznike objašnjena je i veza između brojeva i znakova, te funkcije koji mogu raditi pretvorbe – znakovni tip može se pretvoriti u numerički tip i obratno. VAL() – funkcija koja znak pretvara u broj Npr. VAL(“123”) 123 VAL(“TETE” 0 jer se riječ TETE ne može pretvoriti u broj STR$() – funkcija koja brojeve pretvara u znakove (stringove) Npr. STR$(89) “89” 42 KAMP 2012. RADIONICE PRINT STR$(89)+STR$(100) PRINT VAL(“89”)+VAL(“100”) “89100” 189 Određivanje podnizova zadanog stringa LEFT$(A$,n) – uzima prvih n znakova u stringu A$ RIGHT$(A$,n) – uzima zadnjih n znakova u stringu A$ MID$(A$,m,n) – uzima n znakova stringa A$ počevši od m-tog znaka Primjer: Napiši program koji za učitano ime i prezime osobe ispiše njezine inicijale. CLS PRINT “UNESI IME:” INPUT IME$ PRINT “UNESI PREZIME” INPUT PREZIME$ INIME$=LEFT$(IME$,1) INPREZ$=LEFT$(PREZIME$, 1) PRINT INIME$;”.”;INPREZ$;”.” Na kraju radionice uputio sam polaznike na zadatke s bivših školskih, županijskih i državnih natjecanja kako bi što bolje utvrdili znanje stečeno na radionici. Zadnji sat rješavali smo test sa primjerima zadataka iz svih obrađenih područja. Najbolji polaznici su, za svoje zalaganje i izniman trud, dobili pohvalu. Završni ispit 1. 2. 3. 4. Ispiši sve parne brojeve do 10 Ispiši sumu brojeva do nekog zadanog broja N Ispiši produkt brojeva do nekog zadanog broja N Ispiši svaki n-ti broj do 100. Primjer: Ulaz: 5 Izlaz: 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 5. Napravi program koji će za N upisanih učenika i njihovih ocjena, ispisivati one učenike koji imaju ocjenu nedovoljan tj. 1 6. Ispiši sve parne brojeve od 0 do 101 pa zatim sve neparne brojeve silazno od 100 do 20. 7. Za 5 upisanih ocjena izračunaj prosječnu ocjenu 8. Ispiši tablicu množenja (dvije for petlje jedna u drugoj!) 9. Za tri upisana broja provjeri da li čine niz. Brojevi čine niz ako su jedan za drugim, npr. 4,5,6 čine niz, dok 4,5,9 ne čini niz. 10. Košarkaška ekipa ima 5 igrača. Svaki igrač može dati koš koji vrijedi 2 ili 3 boda. Ulazni podaci su imena 5 igrača i broj koševa od 2 i od 3 boda za svakog igrača. Treba ispisati: a. Ime igrača koji je dao najviše koševa od 3 boda b. Ime igrača koji je postigao najviše bodova c. Koliko je ukupno bodova postigla ekipa Ako ima više igrača s istim brojem koševa ili bodova dovoljno je ispisati jednog. Mislav Balunović KAMP 2012. 43 RADIONICE BASIC napredni Predavač: Marijan Jurešić, dipl. ing. Polaznici: 1. Karlo Sintić 2. Fran Vasilić 3. Marina Samblić 4. Lucija Žužić 5. Luka Braut 6. Lorenzo Šamanić 7. Luka Gabriel Rošić 8. Nikica Stijepić Pohvaljeni: Marina Samblić, Lucija Žužić i Luka Braut Radionica BASIC napredni bila je namijenjena učenicima i natjecateljima koji su se već susreli s BASICom u svom radu. Razina znanja polaznika bila je vrlo heterogena, pa je pristup bio više individualan. Na samom početku provedena je kratka anketa koliko učenici znaju o BASICu. Uspostavilo se da jedan dio njih ne zna niti naredbe grananja niti petlje, što je zahtijevalo da radionica započne s IF naredbom. Budući da je ova naredba izuzetno važna za bilo kakav nastavak programiranja, posvećena su joj 2 predavanja. Tijekom ta dva predavanja rješavani su različiti zadaci u kojima je težište stavljeno na grananje, od onih vrlo jednostavnih do zadataka težine županijskog natjecanja. Sljedeća obrađivana tema bile su petlje (for, do-while). Petlje su isto tako esencijalne za programiranje, no i nešto kompliciranije od naredbi grananja te im je posvećeno ukupno 3 predavanja. Nakon petlji uslijedila su polja (jednodimenzionalna i dvodimenzionalna) te svi standardni algoritmi s poljima: unos, ispis, pretraživanje, brisanje elementa, dodavanje elementa, spajanje dvaju sortiranih polja (merge), sortiranje te na kraju nekoliko zadataka s natjecanja kod kojih je težište stavljeno na polja. Na polja je utrošeno 2 predavanja. Nakon polja bili su obrađeni stringovi, standardne BASICove funkcije za rad sa stringovima (LEN, LEFT$, RIGT$, MID$,...). Obrađeni su standardni algoritmi: okretanje stringa, spajanje stringova, prebrojavanje znakova, palindrom,... Za ovu temu potrošeno je jedno predavanje. Pred kraj radionice, rješavali smo zadatke s prijašnjih državnih natjecanja iz informatike. Neki su od zadataka bili vrlo jednostavni za riješit nakon što je predstavljena ideja i algoritam, a neki su zahtijevali i više kôdiranja. Tako je polaznicima prikazano, da uz samo programiranje, zadatke treba i algoritamski analizirati. 44 KAMP 2012. RADIONICE Primjeri algoritamskih zadataka: Zadatak MIRELA (DMIH 2008.) Mala Mirela se zaljubila u šesterokute. Ona ih voli crtati u krug, te je primijetila da u svakom sljedećem krugu koji nacrta ima šest šesterokuta više nego u prethodnome. Mirela prvo nacrta jedan šesterokut, zatim oko njega šest novih, te nastavi crtati nove šesterokuta oko onih koje je već prije nacrtala (vidi sliku). U prvom koraku nacrta samo jedan šesterokut, a u svakom sljedećem koraku crta sloj šesterokuta oko prije nacrtanih. Na slici je brojem unutar pojedinog šesterokuta označeno u kojem koraku je taj šesterokut nastao. Nakon što Mirela napravi N koraka crtanja, zanima ju koliko šesterokuta je ukupno nacrtala. Ulazni podaci: Izlazni podaci: Primjeri: RB Ulaz Izlaz 1. 3 19 2. 7 127 prirodan broj N (1 ≤ N ≤ 70) ukupan broj nacrtanih šesterokuta. Objašnjenje Mirela je prilikom prva tri koraka crtanja nacrtala 19 šesterokuta, to su oni šesterokuti sa slike koji imaju u sebi broj 1,2 ili 3. Ukupan broj šesterokuta na slici. Rješenje: Ovo je primjer jednostavnog rješenja nakon što se shvati i detaljno analizira zadatak. INPUT a PRINT a * (a - 1) * 3 + 1 Zadatak PORUKA (DMIH 2008.) Ivica i Marica su u vezi već dva tjedna i otada su nerazdvojni. Kako idu u isti razred ne mogu izdržati, a da za vrijeme nastave ne razgovaraju. Nedavno ih je učiteljica upravo zbog toga i razmjestila te više ne sjede zajedno. Oni su tome doskočili pa pišu poruke na komadićima papira te ih dobacuju jedno drugome. Međutim, drugi učenici su ljubomorni na njihovu vezu pa se nerijetko dogodi da takav papirić dođe do nekog učenika u razredu koji onda tu poruku glasno pročita pred cijelim razredom, dovodeći na taj način Ivicu i Maricu u neugodnu situaciju. Stoga su odlučili šifrirati poruke. Poruke šifriraju na sljedeći način: prvo naprave indeks riječi. U indeksu riječi nalazi se svaka riječ iz poruke točno jednom, a riječi su poredane onim redoslijedom kojim se riječi pojavljuju u poruci. Nadalje poruku šifriraju na način da kad se neka riječ prvi puta pojavi u poruci, onda ju zapišu, a kod svakog njenog daljnjeg pojavljivanja umjesto te riječi unutar vitičastih zagrada pišu njen redni broj unutar indeksa riječi. Primjerice, poruka Marice moja Marice ti si samo moja Marice, bit će šifrirana kao: Marice moja {1} ti si samo {2} {1}. Marica zna dešifrirati poruku, ali joj teško ide šifriranje pa te moli za pomoć. Pomogni Marici i napiši program koji će šifrirati poruku koju želi poslati Ivici. Ulazni podaci: KAMP 2012. tekstualna datoteka poruka.txt koja se sastoji od jednog ili više redaka teksta, broj redaka neće biti veći od 10. U svakom retku nalazi se jedna ili više riječi poruke, broj znakova u jednom retku neće biti veći od 200. Svaka se riječ sastoji od velikih slova engleske abecede i riječi su međusobno odvojene točno jednim razmakom. 45 RADIONICE Izlazni podatak: tekstualna datoteka sifra.txt koja ima isti broj redaka kao i poruka.txt, a u svakom se retku nalazi šifrirane riječi odgovarajućeg retka datoteke poruka.txt. Primjeri: Ulaz Izlaz poruka.txt sifra.txt MARICE MARICE MOJA MARICE TI SI SAMO MOJA MARICE JAKO SAM SRETAN S TOBOM MARICE {1} MOJA {1} TI SI SAMO {2} {1} JAKO SAM SRETAN S TOBOM RB 1. 2. Objašnjenje Riječ MARICE je prva u indeksu, i svako njeno pojavljivanje zamijenit će se s {1}, dok je riječ MOJA druga u indeksu i svako njeno pojavljivanje zamijenit će se s {2},… Sve riječi su različite Rješenje: CLS OPEN "poruka.txt" FOR INPUT AS #1 OPEN "sifra.txt" FOR OUTPUT AS #2 DIM sif(1000) AS STRING used = 0 DO WHILE NOT EOF(1) INPUT #1, s$ last = 1 l = LEN(s$) FOR i = 1 TO l IF MID$(s$, i, 1) = " " THEN a$ = MID$(s$, last, i - last) last = i + 1 naso = 0 FOR j = 1 TO used IF sif(j) = a$ THEN PRINT #2, "{" + MID$(STR$(j), 2) + "} "; naso = 1 END IF NEXT j IF naso = 0 THEN used = used + 1 sif(used) = a$ PRINT #2, a$ + " "; END IF END IF NEXT i a$ = MID$(s$, last, l - last + 1) naso = 0 FOR j = 1 TO used IF sif(j) = a$ THEN PRINT #2, "{" + MID$(STR$(j), 2) + "}" naso = 1 END IF 46 KAMP 2012. RADIONICE NEXT j IF naso = 0 THEN used = used + 1 sif(used) = a$ PRINT #2, a$ END IF LOOP CLOSE #1 CLOSE #2 Na kraju, zadnje je predavanje bilo posvećeno potprogramima. Kroz nekoliko različitih primjera učenici su upoznati s osnovnim svojstvima potprograma, prednostima upotreba potprograma i slično. Učenici nisu imali završnu provjeru znanja upravo zbog velike heterogenosti grupe, ali su u globalu svi savladali predavano gradivo. Marijan Jurešić Mislav Balunović KAMP 2012. 47 RADIONICE PROGRAMSKI JEZICI PYTHON / C++ Predavač: Nikola Dmitrović, prof. mentor Polaznici: 1. Helena Mikulić 2. Mario Vuzem 3. Petar Orlić 4. Martin Rosenzweig 5. Dorijan Lendvaj 6. Josip Klepec 7. Lucija Žužić 8. Karlo Sintić 9. Fran Vasilić 10. Marina Samblić 11. Marko Lazarić Pohvaljeni: Martin Rosenzweig, Josip Klepec i Lucija Žužić Nakon što se dvije godine uzastopno na radionicama u sklopu Kmpa mladih informatičara poučavao programski jezik Python, ove se godine organizirala radionica koja je za cilj imala usporedbu Pythona i C++, jezika koji dolazi i jezika koji je već dobro poznat u natjecateljskim krugovima. Polaznici radionice su, ovisno o trenutnoj razini znanja pojedinog jezika, rješavali razne algoritamske probleme, te kroz implementacije rješenja tih problema upoznavali sličnosti i razlike navedenih programskih jezika. Prvi dan na radionici, učenici su proveli instalirajući editore koji će im omogućiti rad u Pythonu i C++. Nakon toga, polaznici su rješavali prve zadatke s HONI-ja 2011./2012. Ovisno o tome poznaju li već neki od programskih jezika, polaznici su navedene zadatke rješavali ili su samo riječima opisivali korake koji vode rješenju navedenih zadataka. 48 KAMP 2012. RADIONICE Drugi dan, polaznici su upoznati s osnovnim karakteristikama Pythona, naredbom odlučivanja i s onim stvarima koje su karakteristične za taj jezik, a odstupaju od uobičajenih programerskih navika. S tim osnovnim znanjem, svi polaznici su bez problema mogli implementirati rješenja zadataka zadanih proteklog dana. Treći dan je protekao u upoznavanju polaznika s naredbama ponavljanja i načinima njihovih implementacija u Pythonu. S tim znanjem su se rješavali oni zadaci s ovogodišnjeg HONI-ja čije je rješenje zahtijevalo poznavanje naredbi ponavljanja. Posebno je obrađen problem kreiranja novog broja koji se dobije okretanjem znamenki zadanog broja. Nakon što su se polaznici upoznali s osnovama Pythona, prešlo se na upoznavanje osnovnih karakteristika C++ uz obavezno isticanje sličnosti i razlika između dva jezika. Posebna se pažnja obratila na naredbu ponavljanja (for) kod koje ima najviše razlike u sintaksi i mogućnostima. S ovim znanjem, polaznici su bili u mogućnosti ponovno riješiti sve zadatke zadane proteklih dana. Napredniji polaznici su imali priliku kroz timski rad u oba jezika rješavati zadatke koji su se pojavili na prvom danu JHIO-a 2012. Složeni tipovi podataka u C++ (nizovi, stringovi) te strukture u Pythonu (liste, rječnici, N-torke) su bile predmet poučavanja u posljednjim danima radionice. Polaznici su rješavali zadatke u Pythonu i C++ koji su zahtijevali poznavanje navedenih tipova i struktura. Ovaj dio radionice je završio malim natjecanjem u kome su polaznici trebali osmisliti i u oba jezika riješiti zadatke Password i Parlament (Županijsko natjecanje 2012.) Posljednjeg dana radionice, napredniji polaznici su imali priliku upoznati pojam objektno orijentiranog programiranja i kako to izgleda u praksi u navedenim programskim jezicima. Ovaj dio je bio motivacijske prirode te je trebao zainteresirati polaznike za općenito naprednije korištenje programskih jezika. Odabrati pohvaljene sudionike radionice nije bilo lako jer je većina polaznika kvalitetno i s puno entuzijazma pristupala postavljanim problemima. Uz usvojeno znanje korištenja i sintaksi programskih jezika Python i C++, polaznici su vježbali i naučili neke nove algoritme koji će im zasigurno pomoći u budućim natjecanjima. Nikola Dmitrović KAMP 2012. 49 RADIONICE POČETNICI Predavač: Diana Lendvaj, dipl. ing. Polaznici: 1. Mia Šimić 2. Sven Ahčin 3. Filip Ahčin 4. Matej Ban 5. Tomislav Franov 6. Filip Braut 7. Renato Braut 8. Vanesa Morić 9. Patrik Bajčić 10. Renato Šutić 11. Marin Geljić 12. Damjan Klobučar 13. Lurda Kauzlarić Pohvaljeni: Tomislav Franov, Filip Braut, Renato Šutić i Damjan Klobučar U radionici POČETNICI imali smo polaznika koji još nije krenuo u školu (Matej Ban) te učenika prvih, drugih i trećih razreda. Cilj je da djeca tog uzrasta na lak i njima razumljiv način steknu osnovno znanje rada na računalu i da se upoznaju s osnovama programiranja (LOGO). Teme radionice: I. WINDOWS • Osobno računalo (dijelovi računala; uključivanje i isključivanje računala; mediji za pohranu podataka; uporaba miša i tipkovnice) • Radna površina – Desktop (ikone; promjena radne površine) • Rad s mapama i datotekama (stvaranje mape s njihovim imenom u mapi Moji dokumenti (My Documents)) • Crtanje slika – Bojanje-Paint) (otvaranje programa, služenje s alatima za crtanje i naredbama kopiraj i zalijepi, spremanje crteža na računalo u mapu Moji dokumenti. Zadatak učenicima za bolje savladavanje gradiva bio je nacrtati tortu sa svjećicama tako da su 1. svjećicu na torti kopirali više puta i tako rasporedili po torti. 50 KAMP 2012. RADIONICE II. MICROSOFT WORD • Rad s programom MS Word • Izgled i elementi prozora • Rad s tekstom • Umetanje simbola, slika • Spremanje dokumenta III. INTERNET • Pojam internet • Upotreba tražilice • Pregledavanje web stranice Na kraju prvog dijela radionice polaznici su imali zadatak za uvježbavanje. Trebali su, služeći se internetom, naći tekstove i slike o gradu Krku, kopirati to u MS Word, tamo oblikovati tekst i spremiti sve u mapu sa svojim imenom. IV. LOGO Na kraju radionice počeli smo učiti nešto novo. Prve korake u programiranju u programskom jeziku Logo. Naučili su osnovne naredbe za crtanje. naredba za kretanje naprijed (forward) FD_broj naredba za kretanje unatrag (back) BK_bro j obriši zaslon (clearscreen) CS okretanje ulijevo za određeni kut (left) LT_broj okretanje udesno za određeni kut (right) RT_broj olovku digni(pen up) PU olovku spusti(pen down) PD uzmi gumicu(pen erase) PE ponovno crtanje(pen paint) petlja ponavljanja PPT (ponavlja naredbu u zagradi n puta) KAMP 2012. REPEAT 51 RADIONICE Primjeri: 1. Šešir fd fd fd fd lt 120 rt 90 120 rt 90 120 rt 90 120 rt 90 90 fd 40 bk 200 Zatim smo upotrijebili naredbu repeat koja pojednostavljuje i skraćuje gornji dio kôda. repeat 4[fd 120 rt 90] lt 90 fd 40 bk 200 2. INA Treba nacrtati pravokutnik s kružnicom unutar njega. repeat 2 [fd 180 rt 90 fd 80 rt 90] fd 140 rt 90 pu fd 40 pd circle 20 3. zadatak je bio napisati riječ LOGO, gdje slova o pišemo kao pravokutnike fd 200 bk 200 rt 90 fd 80 pu fd 50 pd lt 90 repeat 2[fd 200 rt 90 fd 80 rt 90 ] rt 90 pu fd 130 pd lt 90 fd 200 rt 90 fd 80 rt 90 fd 30 bk 30 rt 90 fd 80 lt 90 fd 200 lt 90 fd 80 lt 90 fd 100 lt 90 fd 25 bk 25 lt 90 fd 100 lt 90 pu fd 50 pd lt 90 repeat 2 [fd 200 rt 90 fd 80 rt 90] Diana Lendvaj 52 KAMP 2012. RADIONICE VISUAL BASIC / SQL SERVER Predavači: Marijan Jurešić, dipl. ing. Gordan Nekić Polaznici: 1. Ivana Žužić 2. Pavao Jerebić 3. Dino Ilić 4. Fran Vasilić 5. Karlo Sintić 6. Kristijan Vulinović Pohvaljeni: Dino Ilić, Karlo Sintić i Kristijan Vulinović Visual Basic je radionica gdje se učenici susreću s nekim znanjima koja im neće koristiti u samim natjecanjima, ali su ta znanja danas primjenjiva. Učenici se upoznaju s tehnologijama koje su danas standard i na taj način dobivaju osjećaj da rade nešto što bi mogli primijeniti. Obrađene teme: • • • • • • • • • • • • • Izrada Windows forms aplikacije Postavke formi i kontrola Sintaksa koda Button kontrola CheckBox kontrola ListBox kontrola Label kontrola TextBox kontrola Progressbar kontrola Globalne varijable Funkcije i sub-ovi Moduli SQL Server i SQL baza Tijekom prvog dijela radionice učenici su se upoznali sa sučeljem Visual Basica, načinom kreiranja projekta, spremanje projekta,... Isto tako, velika je pažnja posvećena objektima grafičkog korisničkog sučelja. Objašnjeno je da svaki od tih objekata ima svoja nekakva svojstva te radnje koje se nad objektima mogu izvršavati. Naglašeno je da se ovdje radi o dosta drugačijem obliku programiranja, od onoga s kojim su se učenici susreli. Radi se o programiranju gdje je zapravo "program" odgovor na neki događaj, tzv. programiranje upravljano događajima (event-driven programming). Za vrijeme čitavog trajanja radionice inzistirano je na pojmovima objekt, svojstvo i metoda jer je to upravo ono na čemu se bazira današnje programiranje. Kako se je radilo o uglavnom mlađim polaznicima nije se ulazilo u dubinu objektno orijentiranog programiranja već se je o objektima govorilo samo kroz elemente grafičkog korisničkog sučelja. KAMP 2012. 53 RADIONICE Tijekom radionice učenici su kreirali jednostavan program za rad s tekstualnim datotekama (pisanje teksta, spremanje, otvaranje, oblikovanje,...) kroz ovaj primjer upoznali su osnovne elemente grafičkog korisničkog sučelja (okvir za tekst, padajući izbornik, izbornik, dijaloškim prozorima,...). Drugi dio radionice bilo je upoznavanje s bazama podataka. U tom dijelu bilo je obrađeno kreiranje tablica u MS Accessu, jednostavni upiti (INSERT, SELECT, DELETE, UPDATE) te nešto kompliciraniji upiti gdje se selektiraju podaci iz dviju tablica. U naprednijem dijelu radionice naučili su kako povezati bazu podataka s Visual Studiom na primjeru programa za vođenje podataka o polaznicima, voditeljima i radionicama na Kampu. Prvo smo osmislili i kreirali bazu podataka sa svim tim podacima, a zatim smo kreirali program s višestrukim formama koji je implementirao osnovne funkcionalnosti (dodavanje polaznika, dodavanje predavača, pretraživanje polaznika, dodjeljivanje polaznika u grupu,...). Po završetku trajanja radionice bila je provedena provjera znanja, gdje su učenici trebali kreirati bazu podataka s proizvodima te jednostavnu aplikaciju za dućan. Svi učenici su kreirali bar osnovnu funkcionalnost programa. Svi su polaznici upoznati s osnovama rada te vjerujem da će mnogi od njih nastaviti s radom aplikacija u Visual Basicu-u. Marijan Jurešić 54 KAMP 2012. RADIONICE PHP Predavač: Gordan Nekić Polaznici: 1. Fran Vasilić 2. Karlo Sintić 3. Josip Klepec 4. Pavao Jerebić 5. Marko Lazarić 6. Dino Ilić Pohvaljeni: Fran Vasilić, Josip Klepec i Dino Ilić Radionicu “PHP” pohađali su učenici različitih uzrasta i predznanja. Vidjevši da je većini polaznika to bio prvi susret s PHP-om, u nekoliko dana obrađene su sve osnovne pojedinosti PHP-a i neke napredne funkcije kao što je spajanje na MySQL bazu podataka. Obrađene teme: • • • • • • • • • • • PHP otvaranje tagova u html-u i PHP naredba echo If-grananje, for petlja, while petlja Include funkcija Kako napraviti vlastite funkcije GET, POST, Session, Cookies Mail, Rand, Date, funkcije MySql Baza i Osnove PhpMyAdmin Spajanje PHP-a i MySQL-a Login funkcija koja je otporna na SQL napade (sigurnost) Registracijska funkcija s automatskim generiranjem lozinke Administrator panel za upravljanje stranicom Realizacija radionice: Radionica je započela uvodom u “PHP” uz objašnjenje osnovnih naredba. Sljedeći dan započeli smo sa samostalnim projektom tako da je svaki polaznik radio svoju vlastitu web stranicu. Treći dan objasnili smo osnove MySQL baze te spajanje PHP-a na MySQL bazu. Upravo su ta novostečena znanja polaznici iskoristili u izradi vlastitog projekta. Preostale dane polaznici su samostalno razvijali svoj projekt. Kako je napredovala kompleksnost projekta, tako smo učili nove stvari. Nakon objašnjene pojedine teme, polaznici su to trebali ukomponirati u svoj projekt. KAMP 2012. 55 RADIONICE Primjer kôda (implementacija spajanja na bazu): //Spajanje na bazu $db_host="localhost"; $db_user="korisnik"; $db_pass="lozinka"; $db_name="Imebaze"; $db_id = mysql_connect($db_host, $db_user, $db_pass) or die("Ne mogu se spojiti na Bazu."); mysql_select_db($db_name, $db_id) or die("Baza nije pronađena."); // kraj koda Sljedeći dan napravili smo stranicu na kojoj su se korisnici mogli registrirati. Skripta bi korisnike automatski zapisala u bazu i poslala random (nasumičnu) lozinku korisniku na e-mail. Peti dan polaznici su s lakoćom shvatili MySQL naredbe te su uz moju pomoć uspješno napravili funkciju za prijavu korisnika. Obradili smo i temu kako se možemo zaštititi od SQL napada kao, također, i XSS napada te ostalih sigurnosnih prijetnji. Šesti dan polaznici su preradili stranicu tako da su samo registrirani korisnici imali sve mogućnosti. Na kraju su svi dobili zadatke kako bi se provjerilo njihovo znanje po završetku radionice. Evo što su rekli neki od polaznika radionice: "Na PHP-u smo nakon ponovljenih osnova HTML-a krenuli s teorijom PHP-a, a nakon toga smo se dohvatili samog Web programiranja. Krenuli smo od samih osnova kao što su instaliranje XAMPPa, a nakon toga smo i napravili i konfigurirali MySQL bazu. Tu bazu smo koristili za spajanje preko PHP-a. Kao krajnji projekt napravili smo Chat koji smo mogli koristiti međusobno unutar lokalne mreže tako da se spojimo na računalo od jednog korisnika te tako izmjenjujemo poruke. Gordan Nekić se kao predavač pokazao izrazito stručan, a radionice su bile vrlo zanimljive i pune praktičnih primjera. Jako smo se dobro zabavili, a nadam se da ćemo i slijedeće godine raditi jednako dobro." - Dino Ilić Svi su polaznici upoznati s osnovama rada te vjerujem da će mnogi od njih nastaviti s izradom web stranica u PHP-u. Gordan Nekić 56 KAMP 2012. RADIONICE ALGORITMI POČETNI Predavač: Matija Bucić Polaznici: 1. Josip Klepec 2. Petar Orlić 3. Martin Rosenzweig 4. Mario Vuzem 5. Mislav Gucunski 6. Ivan Šego 7. Luka Barišić 8. Helena Mikulić 9. Pavao Jerebić 10. Ivan Lazarić 11. Marko Lazarić 12. Ivana Žužić 13. Tonko Sabolčec Pohvaljeni: Petar Orlić, Martin Rosenzweig i Mislav Gucunski Obrađene su teme: • Brzo potenciranje • Ideja dinamičkog programiranja • Binarno pretraživanje • Traženje konvkesne ljuske • Pretraživanja po grafu (BFS,DFS) • Sweep line • Razni algoritamski zadaci: o Pauci i muhe o Obrni redoslijed niza Svi polaznici pokazali su iznimnu sposobnost i volju za radom. Na radionici se uglavnom fokusiralo na objašnjavanje algoritama te razne metode implementacije istih. Kôdiralo se u C++ programskom jeziku te se pokušavalo učenike same dovesti do ideje pojedinih algoritama kroz niz podpitanja i podproblema koji polako vode učenika prema ideji algoritma koji je demonstriran. Zbog mnoštva tema i različitih predznanja učenika koji su pohađali radionicu nisu sve gore navedene teme bile predavane svim učenicima već su učenici birali po jednu od nekoliko tema koje su se obrađivale na svakom predavanju i to po svome izboru dok su neki učenici ponekad slušali i više tema u jednom predavanju. Ideja brzog potenciranja je iznimno važna kako bi se prikazala korisnost i mogućnost optimizacije algoritama te radi razumijevanja termina složenosti. Osim toga, ovaj algoritam je dobar primjer kako se može minimizirati duljina potrebnog kôda te samim time i mogućnost za pogrešku u kôdu. KAMP 2012. 57 RADIONICE Dinamičko programiranje je jedna od iznimno korisnih ideja koja se koristi na natjecanjima. Predavanje se fokusiralo na način razmišljanja koji koristi te na shvaćanje prednosti dinamičkog razmišljanja pred ad-hoc algoritmima, kao i na shvaćanje da dinamika najčešće provjerava sve moguće slučajeve te samim time ostavlja dokaz ispravnosti algoritma trivijalnim. Binarno pretraživanje još je jedan algoritam od velike važnosti te je polaznicima predstavljen kroz niz povezanih problema gdje se u svakom sljedećem tražilo od polaznika da poboljša trenutni algoritam kako bi uvidio povezanost između potrošnje memorije i brzine algoritma. Traženje konveksne ljuske bilo je predavanje samo za one polaznike koji su već savladali BFS algoritam i spada u možda nešto kompleksnije algoritme. Međutim, polaznici su pokazali zavidnu sposobnost i razumijevanje ovog algoritma. Ovaj algoritam je važan za rješavanje mnogih problema u ravnini te ima mogućnost postepenog unaprjeđivanja složenosti i kompleksnosti kôda. Pretraživanja po grafu od kojih je obrađen BFS (Breadth first search), a DFS (Depth first search) samo predstavljen kao ideja, značajni su algoritmi i nužni su za rješavanje cijelog niza, što jednostavnih, što kompleksnijih, problema. Polaznici su nizom laganih problema bili navođeni na ideju u pozadini ovog algoritma. Sweep line algoritam je često povezan s dinamičkim programiranjem te je ovdje prikazan samo kao ideja kroz nekoliko zadataka. Zadaci koji su se rješavali su: "November rain" i "Skyscrappers", oba sa SPOJ online judge-a. Razni algoritamski zadaci su se rješavali sa ciljem razvijanja sposobnosti za smišljanje algoritama koji nisu prije naučeni i uglavnom su ograničeni na manji broj zadataka, ali uvelike pomažu razvijanju načina razmišljanja i pristupanja zadacima na natjecanjima. Algoritamski zadaci: Zadatak "Pauci i muhe" bio je interaktivnog tipa i glasi: Dana je tablica n puta n. Na njoj se nalazi k pauka i 1 muha na slučajnim početnim pozicijama. Korak se sastoji od toga da se muha pomakne za jedno polje u jednom od 4 smjera gore dolje lijevo desno, a zatim i pauci (dozvoljeno je da ostanu na istom mjestu). Ako se neki pauk nalazi na istoj poziciji kao i muha, pauci pobjeđuju. Zadatak je ispisati željeni broj pauka i zatim upravljati paucima kako bi oni ulovili muhu. 58 KAMP 2012. RADIONICE Naravno više bodova dobiva algoritam koji koristi manje pauka. Rješenje: Lako se može pokazati da jedan pauk neće biti dovoljan da može nužno uloviti muhu. Međutim, već za dva pauka postoji algoritam kako je mogu uloviti. Pauke nazovemo x i y. Na početku pauk x pokušava izjednačiti x-koordinatu s muhom tako da se pomiče samo u x smjeru te se time u svakom potezu pauk, ili približi po x-koordinati, ili ostaje na jednakoj udaljenosti no na istoj udaljenosti može ostati maksimalno n koraka za redom tako da u maksimalno n2 koraka pauk može izjednačiti svoju x-koordinatu s muhom. Istovremeno drugi pauk radi istu stvar u y-smjeru tako da nakon maksimalno n2 koraka nužno možemo imati po jednog pauka na svakoj od osi izjednačenog s muhom. Sada možemo primijetiti da svakim korakom, ako se muha ne kreće prema onom kutu ploče gdje nema pauka, da pauci mogu smanjiti udaljenost, ali muha ima maksimalno 2n poteza u kojima to može osigurati tako da će nužno biti uhvaćena kroz sljedećih 2n koraka. Ovaj je zadatak bio dio 3. zadatka na Srpskoj matematičkoj olimpijadi i kao takav pokazuje povezanost matematičkih i informatičkih natjecanja. Za zadaću je bilo zadano da učenici razmisle o istom problemu u 3 dimenzije. Dakle, umjesto tablice, u kocki. Zanimljivo je da je u 3 dimenzije potrebno jednako mnogo pauka kao i u dvije. Zadatak "Obrni redoslijed niza" nedavno se pojavio na Bubblecup natjecanju, dok je izvorno došao s britanskog izbornog natjecanja za matematičku olimpijadu. Zadatak izvrsno ilustrira koliko ponekad brute force algoritam može pomoći u smišljanju mnogo elegantnijeg i bržeg rješenja. Većina polaznika ove radionice je iskazala veliki interes i sposobnost u shvaćanju i primjenjivanju algoritama koji su se radili tijekom radionice. Pored unaprijed planiranih algoritama, polaznici su iskazivali želju za dodatnim radom te su neki algoritmi spomenuti i ukratko teorijski obrazloženi prema njihovim željama. Odabrati pohvaljene sudionike radionice nije bilo lako jer je većina polaznika kvalitetno i s puno entuzijazma radila na zadanim algoritmima. Uvjeren sam da će svim polaznicima koristiti stečeno znanje. Matija Bucić KAMP 2012. 59 RADIONICE ALGORITMI NAPREDNI Predavač: Marin Smiljanić Polaznici: 1. Mislav Gucunski 2. Filip Keri 3. Ivan Lazarić 4. Mihael Liskij 5. Zvonimir Medić 6. Neven Miculinić 7. Tonko Sabolčec 8. Kristijan Vulinović 9. Ivan Šego 10. Luka Barišić 11. Ivana Žužić Pohvaljeni: Ivan Lazarić, Ivan Šego i Luka Barišić Radionica naprednih algoritama održana je učenicima do 3. razreda srednje škole koji se nisu plasirali na Olimpijadu, no pokazuju velik potencijal i volju za radom. S obzirom da su polaznici bili vrlo dobro upoznati s teoretskim osnovama, naglasak radionice je bio na rješavanju zadataka. Glavni su izvori zadataka bili online evaluatori SPOJ i z-trening, kao i prošla HSIN-ova natjecanja. Obrađivali su se zadaci iz sljedećih područja: • dinamičko programiranje • algoritmi na grafovima • kombinatorika • strukture podataka s naglaskom na tournament stablo • network flow • ad hoc zadaci Dinamičko je programiranje vrlo vjerojatno najvažnija tema na informatičkim natjecanjima, stoga je na radionici velik naglasak bio upravo na rješavanju zadataka iz tog područja. Sasvim općenito, dinamičko je programiranje primarno tehnika optimizacije, iako može biti lako modificirana za rješavanje problema s prebrojavanjem ili vjerojatnošću. Suština tehnike je razbijanje problema na manje potprobleme koji se rješavaju rekurzivno i iskoristiti ograničen broj potproblema. Objašnjavali su se općeniti principi rješavanja, kao i rješenja mnogih zadataka, različitih težina. Rješavali su se zadaci s prebrojavanjem, u koje se dobro uklapa kombinatorika, kao i klasični optimizacijski problemi. Grafovi predstavljaju jednu od grana informatike koja se vrlo intenzivno koristi u stvarnim problemima, problemima kakvi se susreću pri izradi softwarea. Upravo zato, područje je prilično dobro istraženo te se često pojavljuje na natjecanjima. 60 KAMP 2012. RADIONICE Teorija grafova je također jedno od područja koje promatra diskretna matematika. Često se mnogi problemi na natjecanjima mogu dočarati grafovima. Probleme je u tome obliku lakše analizirati te riješiti algoritmom odgovarajuće složenosti. Network flow ili mrežni protok spominjemo u teoriji grafova. Temu smo obradili zato što ona proširuje naša dosadašnja znanja iz teorije grafova. Mrežni protok promatra specifičan oblik grafa (usmjereni graf) s bridovima određenog propusta. Najintuitivnji način na koji možemo shvatiti mrežni protok jest – najveća količina vode koju možemo provesti u jednoj sekundi od izvora do krajnjeg korisnika, koristeći postojeći cjevovod s ograničenjima na propusnost određene cijevi. Zadaci iz ovoga područja su prilično teški, iako je ponekad očito da rješenje koristi ovu teoriju, izraditi model mreže često je prilično teško. Kombinatorika je iznimno važna grana matematike, a na informatičkim natjecanjima vjerojatno i najvažnija. Većinom su se objašnjavale formule vezane uz prebrojavanje, kao i mogućnost brzog računanja binomnih koeficijenata uz pomoć poznatih činjenica iz teorije brojeva. Nadalje, kombinatorika se dobro uklapa u zadatke s dinamičkim programiranjem, stoga je bilo riječi i o tome. Tournament stablo, ukratko, za određeni niz u složenosti O(log N) daje odgovore na upite o najmanjem/najvećem elementu u intervalu, ili pak sumi. Razmatrale su se naprednije operacije na tournament stablima, a naglasak je bio na proučavanju elegantne i efikasne implementacije. Ad hoc zadaci su takvi zadaci koji ne koriste nijedan poznati algoritam i općenito ne mogu biti svrstani ni u koju kategoriju. Obrađivalo se zadatke s iznimno lijepim i korisnim idejama, a posebice se objašnjavao način razmišljanja koji vodi do istih. Iz ove se grupe zadataka rješavao i jedan olimpijski (Sails, IOI 2007). Uz navedene teme, objašnjena je i implementacija prioritetnog reda (priority queue), a znatan je dio vremena radionica posvećen samostalnom radu polaznika, kada su međusobno izmjenjivali ideje i rješavali zadatke. Posebno treba istaknuti zalaganje polaznika Nevena Miculinića koji je često dobrovoljno izlagao svoja rješenja i ideje i tako djelovao inspirativno. Marin Smiljanić KAMP 2012. 61 RADIONICE OLIMPIJCI SENIORI Predavač: Matija Osrečki Polaznici: 1. Mislav Balunović 2. Domagoj Ćevid 3. Dominik Gleich 4. Matija Milišić 5. Antun Razum 6. Marin Tomić 7. Tomislav Tunković Kao i prošlih godina, u sklopu ovogodišnjeg Kampa se održavala radionica Olimpijci. Ova radionica je prvenstveno namijenjena pripremama hrvatskog tima za međunarodna natjecanja (CEOI i IOI). Primarni način priprema na ovoj radionici bile su simulacije natjecanja. Voditelj bi pažljivo odabrao nekoliko zadataka olimpijskog tipa i olimpijske težine, najčešće tri ili četiri (jer se na CEOI-u u jednom danu natjecanja rješavaju tri, a na IOI-u četiri zadatka) te bi ih onda olimpijci u danom vremenu od nekoliko sati rješavali. Nakon rješavanja voditelj bi evaluirao (bodovao) sva poslana rješenja, a potom bi se razgovaralo o rješenjima zadataka – algoritmima koji se koriste na danim zadacima, važnim idejama, bitnim detaljima i raznim ostalim finesama te bi se iz danih zadataka na taj način mnogo naučilo. Ako polaznik neke zadatke nije uspio riješiti za vrijeme simulacije, kasnije ih je, poučen o rješenju od voditelja radionice i od svojih kolega, bez problema riješio. Na taj smo način iz dana u dan pokazivali napredak: ideje, koje prije radionice nismo imali, smo usvojili i tako napredovali u rješavanju zadataka koje isprva nismo znali riješiti. Bitno je napomenuti da jedna ideja, jedan algoritam, ne rješavaju samo taj, konkretan zadatak na kojem smo ih naučili, već otvaraju vrata desecima drugih zadataka koji se rješavaju na sličan način, i zato je svaki od zadataka na kojem smo nešto naučili vrijedio kao barem deset zadataka. To, naravno, podrazumijeva dobar odabir zadataka, za što se voditelj radionice pobrinuo. Izvori rješavanih zadataka bila su razna respektabilna prijašnja natjecanja, od poznate američke olimpijade USACO pa do HSIN-ovih zadatka s bivših HIO-a, Izbornih priprema te VRSIH-a – studentskih natjecanja (sve to je, naravno, dostupno na www.hsin.hr). 62 KAMP 2012. RADIONICE Dvije radionice bile su posvećene teorijskim predavanjima koje je održao Frane Šarić, dipl. ing., nekadašnji uspješni natjecatelj i nosioc informatičkih medalja s međunarodnih natjecanja. Na predavanjima su ponovljeni neki već poznati algoritmi, ali naučeni i novi: • Bellman-Fordov algoritam • 0-1 BFS • Implementacija balansiranih binarnih stabala • Pretraživanje stringova (Knuth-Morris-Prattov algoritam) • Hashing • Trie • Ternarno pretraživanje Primjeri dva teža zadatka koja su polaznici rješavali na radionici olimpijci: Island (Poljska olimpijada 2008/2009, 3. etapa) U zadatku je zadana mapa gradova koji su posloženi u konveksan poligon tako da je grad 1 dolje lijevo, grad N dolje desno, a gradovi između njih su sortirani po rednim brojevima. Potrebno je odrediti najkraći put između gradova 1 i N, pri čemu je dozvoljeno kretati se samo po cestama i smije se prelaziti s jedne na drugu ako se one sijeku. Primijetimo da je dovoljno za svaki grad uzeti u obzir samo cestu prema gradu s najvećim indeksom. Tako možemo krenuti od grada 1 i njegove ceste te redom dodavati ostale ceste i graditi put čiji će oblik izgledati kao dio konveksne ljuske. Kako pri dodavanju nove ceste možemo brisati samo zadnje dodane ceste praktično je koristiti stack koji će nam garantirati linearnu složenost. Dakle, glavni algoritam je složenosti O(N), dok se zbog pojedinih sortiranja radi pripreme podataka (koje se može izbjeći) složenost povećava na O(N log N). U nastavku se nalazi jedno od mogućih rješenje: #include #include #include #include <cstdio> <vector> <cmath> <algorithm> using namespace std; const long double eps = 1e-10; struct point { long double x, y; point( long double _x = 0, long double _y = 0 ) { x = _x; y = _y; }; }; struct line { long double A, B, C; // Ax + By = C line( long double a, long double b, long double c ) { A = a; B = b; C = c; }; line( const point &P, const point &Q ) { A = P.y - Q.y; B = Q.x - P.x; C = A*P.x + B*P.y; }; }; int ccw( const point &A, const point &B, const point &C ) { long double p = ( B.x-A.x )*( C.y-A.y ) - ( B.y-A.y )*( C.x-A.x ); return p < -eps ? -1 : p > eps; } long double dist( const point &A, const point &B ) { return sqrt( ( B.x-A.x )*( B.x-A.x ) + ( B.y-A.y )*( B.y-A.y ) ); } point presjek( const line &P1, const line &P2 ) { KAMP 2012. 63 RADIONICE long double d = P1.A*P2.B - P2.A*P1.B; return point( (P2.B*P1.C - P1.B*P2.C )/d, (P1.A*P2.C - P2.A*P1.C)/d ); } const int MAXN = 100005; vector< int > E[MAXN]; point a[MAXN]; int v1[MAXN], v2[MAXN]; point presjek( int x, int y ) { line l1 = line( a[ v1[x] ], a[ v2[x] ] ); line l2 = line( a[ v1[y] ], a[ v2[y] ] ); return presjek( l1, l2 ); } int main( void ) { int n, m; scanf( "%d %d", &n, &m ); for( int i = 0; i < n; ++i ) { int x, y; scanf( "%d %d", &x, &y ); a[i] = point( x, y ); } for( int i = 0; i < m; ++i ) { int a, b; scanf( "%d %d", &a, &b ); --a, --b; if( a > b ) swap( a, b ); E[a].push_back( b ); } m = 0; int c = 0; for( int i = 0; i < n; ++i ) { sort( E[i].begin(), E[i].end() ); int l = n-1; for( int j = E[i].size()-1; j >= 0; --j, --l ) if( E[i][j] != l ) break; if( l <= c || l <= i ) continue; while( m >= 2 && ccw( a[i], presjek( m-2, m-1 ), a[l] ) <= 0 ) --m; v1[m] = i, v2[m++] = l; c = l; } long double ans = 0; point last = a[0]; for( int i = 0; i+1 < m; ++i ) { point p = presjek( i, i + 1 ); ans += dist( last, p ); last = p; } ans += dist( last, a[n-1] ); printf( "%.10Lf", ans ); return 0; } Powerful Array, Codeforces Zadan je niz ai duljine N. Za zadani podniz aL, aL+1, ..., aR potrebno je izračunati vrijednost sljedećeg izraza: S = b1K12 + b2K22 + ... + bkKk2 gdje je b1, b2, ..., bk skup različitih članova zadanog podniza, a Ki broj pojavljivanja broja bi u tom podnizu. Potrebno je odgovoriti na Q takvih upita. N, Q <= 100000, ai <= 1000000 Rješenje se temelji na tome da ćemo izračunati rezultat za jedan upit, a onda ga proširiti ili skratiti do sljedećeg upita. Tako obrađujemo sve upite po redu. 64 KAMP 2012. RADIONICE Primijetimo da, ukoliko trenutni obrađeni podniz proširimo ili skratimo za jedno polje, rješenje za novi podniz možemo izračunati u konstantnoj složenosti. Naime, kod takve transformacije mijenja se učestalost samo jednog elementa, za točno jedan, pa rezultat lagano ispravljamo. Budući da upite možemo obrađivati u proizvoljnom poretku, možemo odabrati takav poredak da je ukupan broj promjena reda veličine O( (N + Q)*sqrt N ). Podijelit ćemo upite s obzirom na njihove početke u blokove veličine sqrt( N ). Unutar svakog bloka upite sortiramo po desnome kraju, u rastućem poretku. Ovakvom podjelom garantiramo da će za svaki upit popravljanje lijevog kraja biti napravljeno u najviše sqrt( N ) koraka, dok će za cijeli jedan blok ukupan broj popravljanja desnog kraja biti najviše N. Kako blokova ima sqrt( N ), a transformacija upita Q, ukupna složenost je O( (N + Q)*sqrt( N ) ). Podjelu na blokove činimo na način da sve upite sortiramo po blokovima, pa po desnome kraju. Dodatnu optimizaciju možemo napraviti tako da parne blokove sortiramo uzlazno po kraju, a neparne silazno. #include #include #include #include #include <cstdio> <cstdlib> <cstring> <cmath> <algorithm> using namespace std; typedef long long ll; #define MAX 200004 #define VALUE 1000004 int niz[MAX]; int A[MAX], B[MAX], block[MAX]; int Q[MAX]; int N, M, sqrtN; int X, Y; int cnt[VALUE]; ll sol[MAX]; ll result; inline bool cmp( int x, int y ) { return block[x] < block[y] || block[x] == block[y] && ( block[x] & 1 ? B[x] > B[y] : B[x] < B[y] ); } inline void ADD( int x ) { result += (2 * (++cnt[niz[x]]) - 1) * (ll)niz[x]; } inline void DEC( int x ) { result -= (2 * (--cnt[niz[x]]) + 1) * (ll)niz[x]; } inline void while ( X while ( X while ( Y while ( Y } move( int nx, int ny ) { > nx ) ADD( --X ); < nx ) DEC( X++ ); < ny ) ADD( ++Y ); > ny ) DEC( Y-- ); int main(void) { scanf("%d%d", &N, &M); sqrtN = (int)(sqrt( N ) + 1); for ( int i = 1; i <= N; ++i ) scanf("%d", niz + i); for ( int i = 0; i < M; ++i ) { scanf("%d%d", A + i, B + i); block[i] = A[i] / sqrtN; Q[i] = i; } KAMP 2012. 65 RADIONICE X = Y = 1; ADD( 1 ); sort( Q, Q + M, cmp ); for ( int k = 0; k < M; ++k ) { move( A[Q[k]], B[Q[k]] ); sol[Q[k]] = result; } } for ( int i = 0; i < M; ++i ) printf("%I64d\n", sol[i]); return 0; Hrvatski srednjoškolski tim u sastavu: Dominik Gleich, Antun Razum, Marin Tomić i Tomislav Tunković zastupat će Hrvatsku na 19. srednjoeuropskoj informatičkoj olimpijadi 2012 – Central European Olympiad in Informatics – CEOI 2012 u Mađarskom gradu Tati, od 7. do 13. srpnja 2012. godine, a u sastavu Dominik Gleich, Antun Razum, Marin Tomić i Domagoj Ćevid nastupit će na 24. međunarodnoj informatičkoj olimpijadi – International Olympiad in Informatics – IOI 2012 u gradu Sirmione, Italija, od 23. do 30. rujna 2012. godine. Smatram da su intenzivnim radom na Kampu, olimpijci dobro usvojili i provježbali potrebno gradivo koje se pojavljuje na međunarodnim natjecanjima. Nadamo se dobrim rezultatima! Matija Osrečki 66 KAMP 2012. RADIONICE PRILOG ZADACI I OPISI ALGORITAMA S 1. JUNIORSKE HRVATSKE INFORMATIČKE OLIMPIJADE – JHIO 2012. KAMP 2012. 67 RADIONICE 68 KAMP 2012. RADIONICE KAMP 2012. 69 RADIONICE 70 KAMP 2012. RADIONICE KAMP 2012. 71 RADIONICE 72 KAMP 2012. RADIONICE KAMP 2012. 73 RADIONICE 74 KAMP 2012. RADIONICE KAMP 2012. 75 RADIONICE 76 KAMP 2012. RADIONICE OPISI ALGORITAMA Zadatak BOMBONI Rješenje zadatka je jednostavno pokušati napraviti svaku moguću zamjenu neka dva susjedna bombona te uzeti najbolju. Kada napravimo zamjenu, trebamo naći najdulji niz uzastopnih bombona iste boje. To možemo naći prolaskom kroz svaki redak i svaki stupac. U tom prolasku kroz redak (ili stupac) u svakom trenutku nam je poznata duljina niza uzastopnih bombona koji završavaju trenutnim bombonom i rješenje tog retka (stupca) je jednostavno uzeti najveću od tih vrijednosti. Kako mogućih zamjena ima oko 2*N2 ukupna složenost rješenja je O(N4). Potrebno znanje/kategorija: jednostavne operacije nad nizovima i matricama. Zadatak ČOKOLADA Problem rezanja table čokolade veličine N redaka i M stupaca se rješava svođenjem na potproblem, odnosno dinamičkim programiranjem. Ako su N i M jednaki onda je rješenje 1, a ukoliko nisu, primijetimo da možemo napraviti N-1 horizontalnih i M-1 vertikalnih rezova. Ako radimo horizontalan rez preostaju nam nove dvije table čokolade veličina (N-R, M) i (R, M), a ukoliko radimo vertikalan rez onda (N, M-S) i (N, S). Pritom R označava red gdje radimo horizontalan rez (1 ≤ R ≤ N), a S stupac gdje radimo vertikalan rez (1 ≤ S ≤ M). Koji god rez smo napravili preostaju nam dvije table čokolade koje riješimo na isti način kao i za tablu veličine (N, M). Cilj je minimizirati rješenja nad svim mogućim rezovima kako bi dobili konačno rješenje. Ovo treba napraviti za O(N·M) = O(N2) različitih veličina tabli za koje treba isprobati O(N+M) = O(N) rezova, prema tome vremenska složenost je O(N3). Kako bi se postiglo ubrzanje da bi program radio sa N do 1000, potrebno je primijetiti da je rješenje za (N, M) isto kao i za (M, N), prema tome treba rješavati samo pola potproblema. Također, zbog te simetrije ne treba isprobavati svih N-1 horizontalnih, odnosno M-1 vertikalnih rezova već samo pola (sa 1 ≤ 2·R ≤ N i 1 ≤ 2·S ≤ M). Gore rečeno se može implementirati ili rekurzijom s memoizacijom ili direktno popunjavajući matricu dinamičkog programiranja. Potrebno znanje/kategorija: dinamičko programiranje. Zadatak POSAO Prva stvar koju treba uočiti je da poslove treba obavljati redom po sporednim dijagonalama (onim koje idu od lijevo dole prema gore desno). To se intuitivno može zaključiti uz malo promatranja i simulacije. U prvoj sekundi možemo riješiti samo zadatak u polju (1, 1), odnosno u prvom retku i prvom stupcu. U drugoj možemo riješiti zadatak u poljima (1, 2) i (2, 1), tj. drugu sporednu dijagonalu. U trećoj sekundi možemo riješiti (1, 3), (2, 2) i (3, 1), tj. treću sporednu dijagonalu itd. Sve to vrijedi pod pretpostavkom da imamo dovoljno računala. Ukoliko imamo računala najmanje koliko i sporednih dijagonali (odnosno 2N-1), onda je broj sporednih dijagonala ujedno i rješenje problema. KAMP 2012. 77 RADIONICE Pretpostavimo da je K < 2N - 1, kao na gornjoj slici gdje K iznosi 5, a N iznosi 10. U tom slučaju znamo da će nam za prvih K i zadnjih K sporednih dijagonala trebati 2K sekundi (na slici tamno sivo), koliko god brzo riješili poslove između tih dijagonala. Preostaje izračunati broj sekundi za riješiti poslove između prvih i zadnjih K sporednih dijagonala. Broj tih poslova je N*N - K*(K+1), prema tome potrebno vrijeme je (N·N - K·(K+1)) / K zaokruženo na veće cijelo. Konačno rješenje je prema tome ⌈2·K + (N·N - K·(K+1)) / K⌉ . Konačno rješenje je vremenske složenosti O(1), dok je rješenje vremenske složenosti O(N2) nosilo 72% bodova. To rješenje se svodi na cirkularno korištenje računala i obrađivanje poslova redom po sporednim dijagonalama. Pritom za računala treba paziti kad su zadnji put korištena, dok za poslove treba paziti kad su riješeni poslovi u poljima gore i lijevo od tog posla. Kad uparimo neko računalo i neki posao treba uzeti najveći od ta tri vremena i dodati jednu sekundu kako bi se dobilo rješenje za to polje. Potrebno znanje/kategorija: matematika, ad-hoc. Zadatak TEGLE Treba primijetiti kako red rušenja tegli nimalo ne utječe na ishod. Zbog toga i možemo pohlepno riješiti ovaj problem. Jedini način da prva tegla bude srušena je ako je Martin sam sruši prema tome to može napraviti u prvom koraku. U sljedećem koraku srušimo prvu od preostalih tegli i tako dalje dok nema više tegli. Broj koraka je prema tome i rješenje problema. Traženi algoritam zahtjeva efikasno rješavanje rušenja svih tegli desno od preostale. Iterirajući slijeva na desno rušimo tegle ako one već nisu srušene. Za neku teglu znamo da je srušena ako je već srušena neka tegla koja dijeli broj s teglom koja nas zanima. Prema tome za svaki mogući broj treba pamtiti postoji li takva tegla. Kad obrađujemo neku teglu, testiramo vrijednost za sva tri broja, po potrebi sami rušimo teglu (i povećavamo rješenje) te označavamo tri broja kao srušena. Potrebno znanje/kategorija: pohlepan algoritam (greedy). 78 KAMP 2012. RADIONICE Zadatak TRATINČICE Budući da su koordinate tratinčica dovoljno male za svaku x koordinatu možemo konstruirati niz tratinčica koji su na njoj (sortirane po y koordinati), te isto to učinimo i za svaku y koordinatu. Sada možemo simulirati pomake, kada smo na nekoj tratinčici sljedeća tratinčica u nekom smjeru bit će susjedna trenutnoj u odgovarajućem x ili y nizu. Na primjer, želimo li pronaći prvu lijevu tratinčicu, tada će to biti prethodnica trenutne u y nizu (jer se y koordinata ne mijenja, a x se smanjuje). Potrebno znanje/kategorija: manipulacija nizovima. Zadatak ŽIVICA Prva stvar koju je potrebno primijetiti je da se minimalna apsolutna razlika D dva susjedna elementa u nizu može binarno pretraživati. Sada nam je preostalo osmisliti funkciju koja će za neki D vratiti minimalan broj poteza potreban da se ona postigne, ukoliko je taj broj veći od T, rješenje je veće od D, a u suprotnom je manje ili jednako D. Jedan mogući algoritam te funkcije je uzeti najmanji stupac te njegove susjede smanjiti dok razlike ne postanu manje ili jednake D i ponavljati postupak dok razlike svih susjednih elemenata ne budu manje ili jednake D. Algoritam radi jer trenutno najmanji stupac (koji do sad nije riješen) nam se nikako ne isplati smanjivati pa možemo smanjivati samo njegove susjede kako bi postigli cilj. Funkciju na taj način možemo implementirati korištenjem prioritetnog reda pa dobivamo složenost O(N log N). Uz binarno pretraživanje složenost cijelog rješenja postaje O(N log2 N) što je bilo dovoljno za sve bodove. Postoji i rješenje spomenute funkcije u linearnoj složenosti koje ostavljamo čitateljima za vježbu. Potrebno znanje/kategorija: binarno pretraživanje, korištenje prioritetnog reda ili neke druge odgovarajuće strukture podataka. KAMP 2012. 79 22. KAMP MLADIH INFORMATIČARA HRVATSKE Krk, 19. - 29. lipnja 2012. BILTEN Autori priloga i fotografija Sudionici Kampa 2012. Urednica Vlasta Šeparović, dipl. ing. [email protected] Tehnički urednik Aron Bohr Likovno rješenje korica Ivo Šeparović, dipl. ing. Aron Bohr Izdavač Hrvatski savez informatičara Zagreb, Dalmatinska 12, tel./fax 01/48 48 770 www.hsin.hr, e-mail: [email protected] Za izdavača odgovara Ivo Šeparović, dipl. ing., tajnik HSIN-a [email protected] Naklada 100 primjeraka Tisak Hrvatski savez informatičara
Similar documents
Bilten s 15. zimske škole informatike - Krapina 2010
Izvor: www.ss-krapina.skole.hr
More information