Dnes V portugalskom meste Porto sa bude konať finále medzinárodnej programátorskej súťaže ICPC 2019. Zúčastnia sa ho zástupcovia ITMO University a ďalších tímov z univerzít z Ruska, Číny, Indie, USA a ďalších krajín. Povedzme si to podrobnejšie.
icpcnews /Flickr/ CC BY / Fotografie z finále ICPC-2016 v Phukete
Čo je ICPC
ICPC je medzinárodná súťaž v programovaní medzi študentmi. Konajú sa už viac ako 40 rokov - prvé finále bol som ešte v roku 1977. Výber sa uskutočňuje v niekoľkých etapách. Univerzity sú rozdelené podľa regiónov (Európa, Ázia, Afrika, Amerika atď.). V každom z nich sa konajú medzistupne, najmä semifinále severnej Eurázie sa konala na našej univerzite. Finále sa zúčastňujú víťazi krajských etáp.
Na ICPC sú trojčlenné tímy požiadané, aby vyriešili množstvo problémov pomocou jedného počítača (bez pripojenia na internet). Okrem programátorských zručností sa teda testujú aj schopnosti tímovej práce.
Počas súťaže tímy dostane jeden počítač pre tri osoby. Beží na ňom Ubuntu 18.04 a má predinštalované vi/vim, gvim, emacs, gedit, geany a kate. Programy môžete písať v jazykoch Python, Kotlin, Java alebo C++.
Keď tím vyrieši problém, pošle ho na testovací server, ktorý vyhodnotí kód. Účastníci nevedia, aké testy stroj vykonáva. Ak sú všetky úspešné, tím získava bonusové body. V opačnom prípade sa vygeneruje chyba a študenti sú poslaní opraviť kód.
Podľa pravidiel ICPC vyhráva tím, ktorý vyrieši najviac problémov. Ak je takýchto tímov niekoľko, víťaza určí najmenší trestný čas. Za každý vyriešený problém dostanú účastníci trestné minúty. Počet minút sa rovná času od začiatku súťaže do prijatia úlohy testovacím serverom. Ak tím nájde riešenie, dostane ďalších dvadsať minút trestu za každý nesprávny pokus o prihrávku.
icpcnews /Flickr/ CC BY / Fotografie z finále ICPC-2016 v Phukete
Vzorové problémy
Ciele šampionátu si vyžadujú tímovú koordináciu a koncentráciu. Okrem toho testujú znalosti jednotlivých matematických algoritmov. Tu je príklad úlohy, ktorá bola ponúknutá účastníkom ICPC 2018:
V typografii existuje pojem „rieka“ - ide o postupnosť medzier medzi slovami, ktorá sa skladá z niekoľkých riadkov textu. Istý odborník na rieky (naozaj) chce vydať knihu. Chce, aby sa na stránke pri tlači s jednoliatym písmom „vytvorili“ najdlhšie typografické rieky. Účastníci museli určiť šírku polí, pri ktorých bude táto podmienka splnená.
Na vstupe program dostal celé číslo n (2 ≤ n ≤ 2 500), ktoré určuje počet slov v texte. Ďalej bol zadaný text: slová na jednom riadku boli oddelené jednou medzerou a nemohli pozostávať z viac ako 80 znakov.
Na výstupe mal program ukázať šírku polí, na ktorých sa tvorí najdlhšia „rieka“ a dĺžku tejto rieky.