Veliki finale 2014 je za nami!

V soboto, 11. 10. 2014, je potekalo finalno kolo Univerzitetnega programerskega maratona 2014. Letos je bil finale v Kopru, saj ga je gostila Univerza na Primorskem. Ker so bile po tretjem kolu vodilne ekipe zelo tesno skupaj, smo zaključni spopad vsi nestrpno pričakovali. Prišlo je do brezkompromisnega boja za prvo mesto s številnimi preobrati. Na koncu je bil vrstni red na samem vrhu vendarle tak kot po 3. kolu. Neuradne rezultate si lahko ogledate tukaj.

Najboljše tri ekipe v skupnem seštevku so:

  1. Programatorji
    (v sestavi Patrik Zajec, Matej Aleksandrov in Vid Kocjan)
  2. Pitoni++
    (v sestavi Jure Slak, Maks Kolman in Žiga Gosar)
  3. The A Team
    (v sestavi Sven Cerk, Veno Mramor in Martin Šušterič)

Prvaki posameznih univerz so:

  • Univerza v Ljubljani: Programatorji (Patrik Zajec, Matej Aleksandrov in Vid Kocjan)
  • Univerza na Primorskem: TopCoder (Vladan Jovičić, Marko Palangetić in Roman Solodukhin)
  • Univerza v Mariboru: LeoDeservesAnOscar (Dragana Božović, Martin Duh in Gregor Pirš)

Pa si na kratko poglejmo, kaj se je dogajalo na letošnjem finalu. Prva rešitev je na sodniški sistem prispela že 9 minut po začetku – ekipa Programatorji je oddala rešitev naloge Sosedski odnosi (v C++). Rešitev je bila seveda pravilna. Sedem minut kasneje je ekipa Pitoni++ oddala rešitev naloge Mravlje (v jeziku Python), ki pa žal ni bila pravilna. Zatem sta rešitev naloge Sosedski odnosi poslali še ekipi Muzik.bot.nu (v Pythonu 3) in NullPointer (v Javi) – obe rešitvi sta prekoračili časovno omejitev (TLE). Tri minute po njihovem prvem poskusu je ekipa Pitoni++ ponovno oddala rešitev naloge Mravlje (v jeziku Python), ki pa je bila v drugo pravilna; s tem so se približali ekipi Programatorji na le eno točko zaostanka. Sledil je naval na nalogo Sosedski odnosi, saj so rešitev omenjene naloge manj kot pol ure po začetku kola oddale že številne ekipe, vendar je bila v večini primerov naloga zavrnjena. Številne ekipe so implementirale algoritem s časovno zahtevnostjo O(n2) namesto O(n). Druga pravilna rešitev prej omenjene naloge (v C++) je prišla od ekipe Pitoni++. S tem so Pitoni++ prehiteli Programatorje in se povzpeli na prvo mesto. Nato so se oddaje nalog Sosedski odnosi in Mravlje kar usule na strežnik. Po 49 minutah od začetka kola, je ekipa MC++ oddala rešitev naloge Domače naloge (v C++), ki pa ni bila pravilna. Dobro uro po začetku je ekipa NullPointer napadla nalogo Eggstremna ornitologija (v Javi). Žal je bil tudi njihov poskus neuspešen. Eno uro in 18 minut po začetku je ekipa The A Team (ki je imela že dve pravilno rešeni nalogi) napadla nalogo Rimska zmešnjava (v Pythonu 3). Njihov prvi poskus ni bil uspešen, jim je pa uspelo rešitev v 8 minutah popraviti. S tem so prevzeli vodilno mesto v skupnem seštevku. Dobrih 10 minut kasneje so pravilno rešitev naloge Rimska zmešnjava (v C++) oddali še Pitoni++ in se ponovno zavihteli na prvo mesto. V tem trenutku so bili Programatorji na tretjem mestu z dvema rešenima nalogama. Pet minut za Pitoni++ so še Programatorji rešili nalogo Rimska zmešnjava (v C++) in 15 minut kasneje še nalogo Izštevanka (v C++). S tem so ponovno prevzeli vodstvo v skupnem seštevku in ga ohranili do konca.

Na letošnjem finalu štirih nalog (od skupaj 8) v času tekmovanja ni uspelo rešiti nobeni ekipi. Nalogo Izštevanka sta pravilno rešili le dve ekipi, ki si zaslužita pohvalo: to sta ekipi Stack Overflow in Programatorji. Letos smo podelili Oskarja za vztrajnost (posebno nagrado) tisti ekipi, ki je imela pri eni od nalog največ nepravilnih oddaj, preden jim je uspelo oddati pravilno rešitev naloge. Prejela jo je ekipa LeoDeservesAnOscar, ki je za rešitev naloge Sosedski odnosi potrebovala 12 poskusov. Ena od ekip je bila na tekmovanju diskvalificirana, ker je oddala naslednjo zlonamerno programsko kodo (ki je poskušala ugasniti sodniški sistem):

try {
    Runtime.getRuntime().exec("SHUTDOWN");
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

Sodniškega sistema jim ni uspelo ugasniti, so pa po drugi strani sodniki uspešno ugasnili računalnik te ekipe.

Namenimo en odstavek za statistiko: Skupno so tekmovalci oddali na sodniški sistem 238 rešitev, od tega 45 OK (sprejetih), 100 WA (napačen odgovor), 59 TLE (prekoračen čas) in 34 RTE (program se sesuje). Skupno količina oddane programske kode je znašala 399 kB. Poglejmo si še skupno število oddaj po posameznih programskih jezikih (v oklepajih je število sprejetih oddaj v tem jeziku):

  • C: 4 (0 OK)
  • C++: 135 (20 OK)
  • Java: 37 (8 OK)
  • Python 2: 27 (6 OK)
  • Python 3: 35 (11 OK)
 
 

 

Jezikov Pascal in C# na letošnjem finalu presenetljivo ni uporabljala nobena ekipa. Bolj zanimivo je dejstvo, da je Python 3 postal bolj popularen kot Python 2 – še lansko leto je bilo obratno. Zaznali smo tudi padec priljubljenosti jezika Java in porast priljubljenosti C++.

Prosojnice z rešitvami nalog, ki jih je po tekmovanju predstavil Tomaž Hočevar, so dostopne tukaj. Posnetek predstavitve nalog in rešitev bo v kratkem objavljen na portalu VideoLectures.

Na slavnostnem zaključku sta nas s svojim obiskom počastila izred. prof. dr. Klavdija Kutnar (dekanja Fakultete za matematiko, naravoslovje in informacijske tehnologije) in prof. dr. Dragan Marušič (rektor Univerze na Primorskem). Nekaj modrih misli sta izrekla še asist. dr. Gregor Jerše (vodja tekmovanja UPM) in prof. dr. Andrej Brodnik (predsednik društva ACM Slovenija), študente pa je pozdravila tudi njihova vrstnica Nastja Slokar (predstavnica Študentske organizacije Univerze na Primorskem).

Vsem udeležence iskrene čestitke! Organizatorji upamo, da vam je bilo tekmovanje v veselje in da se prihodnje leto ponovno vidimo. Posebna zahvala gre tudi našim sponzorjem!

Kot vedno smo tudi tokrat tekmovalce ujeli v fotografski objektiv. Galerijo slik si lahko ogledate pod novico.