pondělí 10. března 2014

Zase sem se nasral

Minulý týden jsem se zúčastnil olympiády v programování. Docela mě pobavilo, že přijelo pár lidí z vedlejšího města, a hned se tomu říkalo "okresní kolo". No, každopádně, už jsem tam byl minulý rok, takže jsem tak trochu věděl, co mě čeká - jak co se týče úloh (to potěšilo), tak co se týče lidí (to nepotěšilo).

Ta banda z vedlejšího města si s sebou zase přivezla toho hnusnýho dědulu. Minule strávil přibližně půlku olympiády tím, že jim napovídal a diktoval zdrojový kód (díky čemuž se jeden jinak zcela vygumovaný student od nich umístil čtvrtý). Tentokrát už mu to asi přišlo blbý, tak jenom hudroval "hlavně aby měli internet u sebe na noteboocích, aby z něj mohli kopírovat". To je totiž znamením správného programátora - umět rychle okopírovat něčí kód z internetu... No a na konci pomáhal s opravováním, takže svým studentům nadržoval co se do nich vešlo, a nás se snažil nachytat na každé hovadině. Nepotěší, trávit nekolik hodin ve sklepě plnym smradlavejch nerdů a pak mít polovinu bodů strhnutou proto, že sem z jiný školy než pan opravující...

Jazyk jsme si mohli zvolit jaký jsme chtěli. Já psal v Javě, většina naší školy v C# a vetřelci v Pythonu. Právě Python jim to spolu s podváděním nejspíš vyhrál. Jedna z úloh využívala nalezení všech kombinací z určitých prvků a práci s nimi, což jsme my museli pracně psát. Ne tak pythoňáci - pohodlně sáhli po knihovně itertools, kde už je kombinatorika naprogramovaná, a vesele tak obešli celý algoritmus. Hlavně že mi ten jejich dědek málem vynadal, když viděl, že můj package na Eratosthenovo síto se jmenuje 'eratosthenes' a usoudil, že jsem použil existující javovský balík.

Je mi jasný, že programovací olympiáda by mohla být férová jenom kdyby všichni psali ve stejnym jazyku a neměli přístup k internetu ani k vlastnímu počítači, ale přecejenom, když má jazyk knihovny řešící veškerou práci za soutěžícího, tak je to trochu nefér. To by se rovnou mohly psát testy z angličtiny se slovníkem.

Každopádně, jedno plus to má - když jsem studoval zdrojové kódy ostatních, Python se mi hrozně zalíbil. Ten kód vypadá hrozně přehledně, jazyk je to poměrně výkonný a různé výpočty v něm jdou psát moc hezky. Budu se na něj muset podívat trochu víc. A taky si napsat vlastní kombinatorickou knihovnu do Javy.

Na závěr, kdyby sem zabloudil nějaký čtenář (nepravděpodobné) a měl zájem, přikládám seznam úloh:

  1. Taylorův polynom funkce sinus
  2. Eratosthenovo síto
  3. Minové bludiště (Matice 10x10, náhodně rozmístěné miny a člověk má mezi nimi najít cestu na druhou stranu, přičemž má k dispozici pouze omezený počet příkazů k prověření políček.)
  4. Transportní problém (Ve skladu je nějaký počet beden s různými hmotnostmi a různým množstvím zlatých cihel. Máme auto s určitou nosností a musíme zjistit, které bedny odvézt, abychom dostali maximum zlatých cihel a auto je uvezlo. Hmotnost bedny nesouvisí s množstvím cihel uvnitř, prostě jsou nějaké bedny ze železa a nějaké z papíru...)
  5. Dobré období (Hospodaření firmy reprezentuje řada kladných a záporných čísel symbolizujících zisky a výdaje za každý měsíc, máme najít období s nejvyšším ziskem - část řady, kdy byl součet nejvyšší.)