Doživjeti stotu

… ne godinu, nego objavu, naravno! Ovo je stota objava (iliti post) na Blogaritmu.

Kad već brojimo objave, možemo brojiti i ovce, želimo li brže zaspati. Ovo je slika ovaca iz našeg (HSIN-ovog) izvještaja s Međunarodne informatičke olimpijade 2013. održane u Australiji:

Na našim natjecanjima bilo je više zadataka s tematikom ovaca:

  • Najlakši je zadatak Ovce za osnovnu školu.
  • Onda ima i zadatak Ovce za srednju školu.
  • Onda ima i zadatak Klonovi u kojemu se Simona bavi uzgojem ovaca.
  • Ima i zadatak Vode gdje se ovce i koze tuku za pašnjak.
  • Naposljetku je tu i (najteži od navedenih) zadatak Pastiri.

Osim brojenja ovaca, ovce se u našem jeziku javljaju još u nekim frazama. Ponekad se za ljude koji slijepo slijede nešto ili nekoga kaže da su ovce, a onaj tko to kaže obično doda “ja nisam ovca” ili “neću biti ovca”. (Zanimljivo je da nitko ne kaže da je on jedna od tih ovaca, iako bi zapravo “ovce” u tom značenju trebale činiti većinu.) Onda imamo zanimljiv izraz: vuk u ovčjoj koži. Imamo, naravno, i kurac od ovce.

Tu su i neke ljepše metafore: izgubljena ovca u biblijskom smislu, recimo. Imamo u istom kontekstu i dobrog pastira. Ne zaboravimo i Malog princa koji na samom početku, u prvoj svojoj rečenici, prije pozdrava, traži od još nepoznatog prijatelja da mu – nacrta ovcu. A ovaj mu, u bljesku inspiracije, nacrta običnu kutiju:

Image for post

… objašnjavajući da je “ovca koju želiš unutra” – što je malog princa oduševilo. Ali znate već, čitali ste.

Toliko od jubilarne objave, čitajte me i dalje, očekujte nešto pametno, razočarat ću gotovo svaki put.

(posvećeno crnoj ovci)

Kategorizacija blogaritamskih objava

(Ovaj je blog pun digresija; u skladu s time, evo jedne digresije i na početku ove objave – koja, zapravo, ne bi trebala sadržavati digresije jer je njezin smisao u tome da ljudi vide gdje je što. Svejedno, odvucimo i ovdje malo pažnje u nepovrat! Dakle: dosad sam pisao riječ post (u kontekstu blog posta), znajući da je riječ objava pomalo neobična i sadrži (ovdje sasvim nepotrebne) religijske asocijacije. Sad ću ipak u duhu jezika pisati objava, ljepše je. Valjda me i ono malo čitatelja neće zbog toga napustiti.)

Blog sam pokrenuo na prvi april 2018. godine (je li taj datum bio slučajan ili nije, valjda je vrijeme već pokazalo). Krenuo sam pišući o konkretnim zadatcima s informatičkih natjecanja i savjetima za njihovo rješavanje pa su tako nastale kategorije objava poput Tip of the day, Tema dana, Zadatak dana i slično. S vremenom su se pojavile i općenitije objave pa sam napravio i kategorije Razno, Matematika i Natjecanja. Na blogu je sve manje bilo korisnih, stručnih savjeta, a sve više metasavjeta, svakakvih zanimljivosti, filozofije i zajebancije; blog se pretvarao u ispušni ventil mojih misli, kao i svaka dobra umjetnost. (Da, ovo zadnje je šala.) Postojeće kategorije postale su nekako neprikladne: često nema bitne razlike između Teme dana, Zadatka dana i Tip of the day (koji pokriva svašta, od stručnih do metasavjeta), dok su više filozofske objave rasute po kategorijama koje ih dobro ne opisuju.

Odlučio sam stoga napraviti bolju kategorizaciju i podijeliti objave prema novim kategorijama kao u donjem popisu, gdje su objave u svakoj kategoriji poredane kronološki. Podjela, naravno, nije savršena i neke objave su na rubu, tj. mogle su biti i tamo i vamo. Nove kategorije u trenutku pisanja ovog teksta još nisu implementirane u sam blog u svrhu filtriranja objava i slično, ali vjerojatno će biti u nekom trenutku, a i ovaj popis možda ću povremeno ažurirati poveznicama na nove objave. Ako neka poveznica slučajno ne radi ili vodi na krivu objavu, slobodno mi javite, bit ću jako zahvalan.

Algoritmi i zadatci
Put među permutacijama
Tip of the day: Odaberi srednji
Nepotpuno stablo
Kružni intervali
Zadatak dana: Cow School
Tip of the day: disjunktne maske
Tip of the day: logaritamska++
Tema dana: pseudošuma
Zadatak dana: kineski poštar
Zadatak dana: GTA
Tema dana: (m)nogometni problemset
Tip of the day: tablica je bipartitan graf
Tip of the day: permutacija == ciklusi
Zadatak dana: ABCD
Tema dana: podijeli pa vladaj
Tema dana: duguljaste matrice
Tip of the day: if manji if veći
Tema dana: mravlji problemset
Zadatci sa studentskog 2018.
HONI i rješenje kao niz zamjedbi
Dva analogna zadatka
Tip of the day: granice intervala
Tema dana: konstrukcijski zadatci
Dvije stablaste fore
Tip of the day: AB prebrojavanje
Logaritamska struktura i tournament stablo
Tip of the day: broj najkraćih putova i Dijkstrin DAG
Svako stoblo je stablo, ali nije svako stablo stoblo
Kaj su rješavali naši stari
Tema dana: glazbeni problemset
Tema dana: teorija brojeva
Pandemijski problemset
Tema dana: neočekivani graf
Neočekivani graf u još dva zadatka sa stringovima
Tema dana: riješi offline
Tema dana: skakanje po neboderima (ili: Ne pokušavajte ovo kod kuće)

Natjecateljsko programiranje i produktivnost
Uvodni post
Tip of the day: upsolving
Adhocness level
Tip of the day: Codeforces blogovi
Tip of the day: pravilno tipkanje
Tema dana: clear thinking
Tip of the day: CSES Problem Set
Tip of the day: atomske navike
Tip of the day: code review
Tip of the day: YouTube kanali o natjecateljskom programiranju
Kako efikasno vježbati?
Tip of the day: Stjepanovi snippeti
Nabrijavanje za HONI, prvi dio
Nabrijavanje za HONI, drugi dio
Top pet novogodišnjih optimizacija
Algoritmi u Pythonu
Tip of the day: Linux
Iza kulisa HONI-ja
Tip of the day: testiranje zadataka sa HSIN-a
Tip of the day: testiranje na pythonovski
Tip of the day: testiranje
Tip of the day: stari bilteni
Kako vježbati?
Top dvije novogodišnje optimizacije produktivnosti

Iskustva s natjecanja i ostala sjećanja
EJOI 2018. počinje!
Poluosvrt na EJOI 2018.
IOI, IPSC i nestandardni zadatci
Izvor svih zadataka
Digresija: potapanje brodova
Poluosvrt na izborna natjecanja
HONI je bio odličan
Informatika i dopamini
Kako organizirati natjecanje u doba korone
Poluosvrt na vrijeme kada je natjecanje bilo offline
Kako to ide
Doživjeti stotu
Natjecanje je više od natjecanja
Državno i tako dalje

Matematičke, algoritamske i slične zanimljivosti
Matematika i (neki) matematičari
Digresija: Dedekindovi brojevi
Dokaz ostavljamo čitateljici za vježbu
Izazov godine: kvinijska križaljka
Zadatak dana: kazaljke sata – ili – kad se sve poklopi
Tip of the day: svi su oni isti
AISports i zaigrani botovi
Zadatak dana: Easter eggs ili Čudnovate permutacije uskršnjih jaja
Kampovske igre – članak iz 2011.
Digresija: taksi dijalog
Znanost i algoritmi
Matura, rang liste i College Admissions Problem
Digresija: matematičko-književne preporuke
Ljetna poslastica: dvadeset i jedan (“židovski”) matematički zadatak
Statistika i (neki) statističari
Everybody’s gangsta until you invert
Znanost i algoritmi, drugi dio
Komunikacijska složenost – ili – kako zakodirati partiju šaha
Refreshaj koliko hoćeš
Koliko sam dobro trčao (prvi dio)

Filozofija?
Digresija: i nula je broj
Digresija: Matematički radio
Može li računalo misliti?
Male tajne velikih brojeva
Jezik i umjetna inteligencija
Digresija: suvišnost matematike i jedna nova igra
Knjiga koja se čita godinama
Beskonačno mnogo vremena
Argument u prilog postojanju dobrog i lošeg ukusa
Slavko Kolar i različite varijante (ne)ispijanja ljubavnog napitka
Dilema istraživanja i iskorištavanja

Ovaj popis sadrži svih dosadašnjih 98 objava. Da, tek sad sam uočio da je ovo devedeset deveta objava. Bilo bi mnogo bolje da je stota. Jebiga.

Kako to ide

Mali pogled petnaestak godina unatrag (uključujući i sve te godine).

U vitrini svoje osnovne škole gledao sam neku pohvalnicu za nečije davno sudjelovanje na regionalnom natjecanju iz matematike. Bio mi je to pojam, sveti gral kojemu sam hrlio. I natjecao sam se iz matematike. U šestom razredu došao sam do tog regionalnog natjecanja, poslije još dalje, bilo mi je to tada najvažnije na svijetu. Gledao sam stare rang liste, razmišljao o opasnoj konkurenciji kojoj sam znao samo imena, pogledavao ih po hodnicima ovog ili onog natjecanja. Polako sam ih upoznavao, mašta je postajala stvarnost, mitska imena postajala su poznata lica, legende su postajale obični ljudi udaljeni tek metar ili dva, normalni i nesavršeni, ni izdaleka onako nepobjedivi kao na starim rang listama. Krenuo sam u Petu gimnaziju, upoznao ih još više, družio se sa sebi sličnijima. Famozni Pjer Mladinić čije sam čitao knjižice i članke u Matki sada mi je, glavom i bradom, predavao matematiku. Legendarni stariji natjecatelj Goran Dražić držao nam je matematičku grupu. Svijet – planet – skupljao se, postajao mi bliži. Svijet matematike i njezinih lica, na početku rasutih po tablicama, a sada bliskih. Od prvih županijskih natjecanja, preko matematičke gimnazije, do olimpijada, i tako dalje…

Kroz gimnaziju to se sve malo i izmiješalo: pojavila se informatika, a i neki drugi interesi. Mijenjao sam raspoloženja i natjecanja bi mi možda sve manje značila da nije bilo međunarodnih olimpijada, novog izvora motivacije. Na tim sam izletima upoznavao strane natjecatelje, od slabijih do najtrofejnijih: igrali smo mafiju i nogomet, pričali o glupostima, svijet se skupljao još više. Najviše se, zapravo, skupio u Kaliforniji gdje smo, već kao studenti druge-treće godine fakulteta, radili na tromjesečnim ljetnim praksama (internship) u tamošnjim softverskim firmama poput Facebooka. Jer tamo, gdje je atmosfera bila zaista divna, u blizini (što firme, što Stanford) našlo se zaista mnogo poznatih lica s matematičkih i informatičkih olimpijada s kojima sam se ponovno imao priliku družiti. Bio sam na vrhu, ima li dalje?

Naravno da se od nekog trenutka stvar prestaje penjati i poprima rjeđe i tiše tonove. Na fakultetu su natjecanja manje važna, postaje ljepše sastavljati zadatke za njih, ali tu se svijet već lagano rasipa. Znanost bi, naravno, mogla postati novo i mnogo važnije natjecanje – ali znanost je drugačija, njome se bavi svatko u svojem laboratoriju, u znoju svoje samoće, više i ne znajući što rade njegovi poznanici. Postoje konferencije, ali tu je socijalni element daleko manji, nije to više to: ljudi su odrasli, grade svoje živote, neki već imaju i obitelj i ne zapljuskuju ih toliko valovi vanjskog svijeta. Znanci iz ove ili one priče gube se po svijetu, po raznim kontinentima, sveučilištima i firmama, više ne pratiš ni one koji su ti bili bliski, a ni one s kojima sada radiš u istoj zgradi. Ego blijedi, radiš svoj posao ili doktorat, ostaje ti vlastiti život i sve manje ljudi koji ti u njemu igraju ikakvu ulogu. U središte dolazi privatni život, na mreži vidiš nekadašnje kolege suparnike kako se udaju/žene, dobivaju djecu, nastanjuju u svoje malene kutke svijeta, čudno ti je da ste se nekad iz nečega natjecali. Svijet koji se prije skupljao sada se rasipa, postaje nevažan, vraćamo se kući.

Komunikacijska složenost – ili – kako zakodirati partiju šaha

Na IOI-u 2010. prvi put smo se susreli s tipom zadatka u kojemu treba poslati neku informaciju u što manje bitova. Zadatak se zvao Saveit i trebalo je, za zadani graf, najkraće udaljenosti (između zadanih posebnih vrhova do svih ostalih) poslati kao bitovni niz iz jednog programa (encoder) u drugi program (decoder) koji će taj niz znati protumačiti, tj. iz binarnog niza rekonstruirati tražene udaljenosti. Trebalo je, naravno, napisati oba programa.

Naivno je rješenje svaku udaljenost poslati kao binaran broj, što rezultira prevelikim ukupnim brojem bitova. Ključna ideja bila je iskoristiti činjenicu da, ako su X i X’ susjedi u grafu, udaljenost(X, Y) razlikuje se od udaljenosti(X’, Y) najviše za 1. Zato je za ovu drugu udaljenost, pod pretpostavkom da smo već poslali prvu, dovoljno poslati samo razliku (-1, 0 ili 1) što možemo dvama bitovima. Ili, još bolje, konstruiramo ternarni niz koji prije slanja pretvorimo u binarni. Detalje ostavljamo čitateljici za vježbu, a cijelo rješenje imate npr. ovdje (napisala ga je moja malenkost, doduše poslije natjecanja).

Tako se na IOI-u pojavila nova tema, koju smo u Hrvatskoj ponekad zvali komunikacijskom složenošću jer se radi o veličini poruka između dvaju programa. Riječ je još i o zadatcima Parrots iz 2011., Supper iz 2012. i Stations iz 2020., a i na CEOI-u 2016. pojavio se zadatak Trick.

Ima to veze i s kompresijskim algoritmima, npr. onima koji smanje veličinu datoteka kad ih zipate, ali za razliku od tih algoritama koji su prilično generički (ne tumače sadržaj datoteka), u ovim problemima traži se kompresija specifična za dani problem. Tako mi je palo na pamet sljedeće pitanje: kako zakodirati partiju šaha, u smislu poteza koji su odigrani? Naravno, pitanje je prilično beskorisno budući da tekstualni zapis šahovske partije nije uopće velik, vjerojatno ste ga i vidjeli (riječ je o Portable Game Notation – PGN), primjerice:

1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3 O-O 9. h3 Nb8 10. d4 Nbd7 11. c4 c6 12. cxb5 axb5 13. Nc3 Bb7 14. Bg5 b4 15. Nb1 h6 16. Bh4 c5 17. dxe5 Nxe4 18. Bxe7 Qxe7 19. exd6 Qf6 20. Nbd2 Nxd6 21. Nc4 Nxc4 22. Bxc4 Nb6 23. Ne5 Rae8 24. Bxf7+ Rxf7 25. Nxf7 Rxe1+ 26. Qxe1 Kxf7 27. Qe3 Qg5 28. Qxg5 hxg5 29. b3 Ke6 30. a3 Kd6 31. axb4 cxb4 32. Ra5 Nd5 33. f3 Bc8 34. Kf2 Bf5 35. Ra7 g6 36. Ra6+ Kc5 37. Ke1 Nf4 38. g3 Nxh3 39. Kd2 Kb5 40. Rd6 Kc5 41. Ra6 Nf2 42. g4 Bd3 43. Re6 1/2-1/2

Ali čemu tražiti svrhu, ni većina drugih informatičkih zadataka nije u ovom smislu korisna. Najbolje stvari su beskorisne. Razmislimo onda kako bismo zakodirali ovakav niz poteza u što manju (binarnu ili tekstualnu) datoteku. Želite li se sami zabaviti razmišljajući o tome, slobodno ovdje prestanite čitati…

Na prvi pogled nije lako jako nadmašiti gornji PGN zapis, ali neke redukcije možemo smisliti relativno brzo. Primjerice: nema potrebe navoditi redni broj poteza; moguće je izostaviti i razmake; ne trebaju nam znakovi x (za jedenje) i + (za šah). Moguća su i sitnija poboljšanja: rezultat na kraju može se zapisati samo jednim znakom, a ponekad (npr. u slučaju mata ili pata) on nije ni potreban jer slijedi iz pozicije; rokadu je moguće prikazati jednim znakom; neka jedenja od strane pješaka (npr. hxg5) dovoljno je pisati kao običan potez (g5) ako ne može doći do zabune, tj. ako u tom trenutku ne postoje dva pješaka koji mogu jesti na g5. Tu ideju možemo proširiti i na druge figure pa pisati npr. e1 umjesto Ke1 ako u tom trenutku samo kralj može odigrati na e1. Nisu ta poboljšanja nimalo loša, ali… zasad smo još uvijek vrlo bliski PGN formatu; i dalje nam trebaju 2-3 znaka po potezu. Ako je jedan znak jedan bajt, riječ je o približno 20 bitova po prosječnom potezu. To je nekoliko puta manje od originalnog PGN zapisa, ali može i bolje!

Dobra je ideja odustati od tekstualnog zapisa, od znakova, jer 8 bitova za jedan znak nije dobar deal. Ono što zapravo zapisujemo polja su šahovske ploče, a njih je 64 = 26, što znači da je za zapis jednog polja dovoljno samo 6 bitova. Zapisujemo li potez kao par (početno polje, završno polje), dovoljno je 12 bitova po potezu – mnogo bolje od tekstualnog zapisa! Ipak, postoje i posebni potezi koje nije moguće tako zapisati: mala/velika rokada, završetak partije (kao predaja bijelog/crnog ili dogovoreni remi) ili izvlačenje nove figure gdje treba precizirati izvlači li se kraljica ili nešto drugo. Srećom, možemo se izvući tako da svaki od tih nekoliko posebnih poteza zapišemo kao neki potez koji je inače nemoguć. Recimo, mala rokada može biti zapisana kao da je riječ o potezu a1-b8, velika kao a1-c8, predaja bijelog kao a1-d8, itd. I dalje smo na 12 bitova po potezu!

Slijedi zamjedba da je umjesto početnog polja (6 bitova) bolje zakodirati figuru koja odigrava potez, jer budući da igrač ima samo 16 figura, svaka može biti određena 4-bitnim kodom. Posebne poteze i ovdje možemo zakodirati kao poteze koji su inače nemogući (npr. za bijelog pješak na a1, b1…, a za crnog pješak na a8, b8…). Već smo na 10 bitova po potezu!

Prethodni odlomci navode nas na pomisao da kompresija još uvijek nije optimalna jer postoji nemogući potezi. Ali ne samo potezi koji su uvijek nemogući, poput bijelog pješaka na prvi red ploče ili bjelopoljnog lovca na crno polje, nego i mnoštvo poteza koji su nemogući u danom trenutku partije. Pozicija na ploči, u bilo kojem trenutku, dopušta samo vrlo ograničen skup poteza i nema potrebe koristiti cijeli skup od 210 šahovskih poteza da bismo zapisali što je u tom trenutku odigrano. Drugim riječima, većina kodova uopće ne opisuje dozvoljene poteze i to je očit znak da smo još uvijek rastrošni. To je pogotovo jasno, recimo, na početku partije kada se mogu micati samo pješaci i skakači, ili u završnici kad većine figura više i nema na ploči. Ako je u nekom trenutku samo desetak dozvoljenih poteza, ne bi li nam četiri bita trebala biti dovoljna?

Kako ostvariti tu ideju? Evo kako. Za trenutačnu poziciju odredimo sve dopuštene poteze, sortiramo ih “abecedno” (ili bilo kojim drugim kriterijem), pronađemo onaj indeks u tom nizu na kojem se nalazi potez koji je zaista odigran, i zakodiramo taj indeks. Našao sam na webu podatak (dobiven empirijski) da je prosječan broj dopuštenih poteza u nekoj poziciji približno 31. To znači da bi prosječno 5 bitova trebalo biti dovoljno. Na prvi pogled može biti nejasno kako to iskoristiti jer broj dopuštenih poteza može, naravno, biti i veći – poznata je pozicija iz stvarne partije gdje je taj broj bio 79, a teoretski se on može popeti i do 218 pa nam može zatrebati i 8 bitova. Treba li nam onda neki “separator” koji će dijeliti broj s manje bitova od onog s više bitova? Ne, jer dekoder u svakom trenutku – ako prati poziciju – može znati koliko je dopuštenih poteza, a time i koliko idućih bitova treba pročitati da bi odredio indeks odigranog poteza u tom nizu. Na primjer, ako je 14 dopuštenih poteza, pročitat će četiri iduća bita da otkrije indeks odigranog (makar on bio i 0000).

Dakle, prosječno samo 5 bitova po potezu! Mana je ovog rješenja što i enkoder i dekoder moraju biti programi koji znaju igrati šah, ili barem znaju njegova pravila, jer moraju znati odrediti dopuštene poteze (te ih sortirati po istom kriteriju). Ali čini se da bolje rješenje ne postoji: uočite da svaki proizvoljno dug niz bitova (bio on i slučajan), osim pri samom kraju gdje mu može “nedostajati” bitova, opisuje neku legalnu partiju – što za prijašnja rješenja ni izdaleka ne vrijedi. Ne može bolje! Ili?

Imam i nedovršenu ideju za bolje rješenje. Dosjetka je u tome da, iako pozicija nudi 30ak mogućih poteza, nisu svi jednako vjerojatni: postoje dobri i loši potezi te, što je potez bolji, veća je vjerojatnost da je odigran. To vrijedi i za partije potpunih amatera: u svakoj poziciji postoji značajan broj zbilja besmislenih poteza koje nitko normalan neće odigrati. Kako to iskoristiti? Ovdje nam, nažalost, nije dovoljno da enkoder i dekoder znaju igrati šah. Za ovo rješenje oni bi morali dobro igrati šah, procjenjujući (na jednak način) koliko je koji potez dobar. Pa dobro, to nije neostvarivo, mogu koristiti isti šahovski engine. No što dalje? Umjesto da sortiramo dopuštene poteze po abecedi, sortirat ćemo ih po kvaliteti poteza. Tako će bolji potezi (koji se češće igraju) imati manji indeks pa će za njihov zapis trebati manje bitova. Tako, as a side effect, kvalitetu igrača možemo mjeriti duljinom zapisa njegovih poteza.

No ovdje se javlja problem koji sam natuknuo u jednom od prethodnih odlomaka. Ako postoje, recimo, 32 dopuštena poteza (5 bitova), a odigran je šesti potez po kvaliteti, želimo iskoristiti činjenicu da je indeks mali i zapisati ga koristeći 3 bita. Ali kako će dekoder znati da treba pročitati samo iduća 3 bita, a ne 5? Treba nam, možda, neki separator, ali i on mora biti binaran, i ne smije zauzeti previše bitova… Ako netko ima pametnu ideju kako ovo riješiti, neka napiše u komentar.

Top dvije novogodišnje optimizacije produktivnosti

Na osnovi vlastitog iskustva i raznih tekstova o produktivnosti koje sam vidio po webu ili u knjigama, zaključio sam da su ključna samo dva savjeta.

  1. Do the most important thing first each day.” Za svaki dan (ujutro ili večer prije) odluči koja je najvažnija stvar koju ćeš napraviti toga dana i onda tu stvar napravi odmah ujutro.
  2. Izdrži pet minuta. Kad mi se ne da započeti neki posao, nešto što ću morati raditi satima ili čak danima, onda mi se… well, ne da. Tu je, međutim, prisutna iluzija da će taj osjećaj “ne da mi se” potrajati sve to vrijeme, da ću se sve te sate ili dane morati boriti protiv njega kao što se borim sada na početku. Ali to je uglavnom, kao što sam rekao, iluzija! Jer, čim teškom mukom krenem raditi i izdržim pet minuta, muka najčešće nestaje jer se naprosto ufuram u posao i poslije, dok sam uronjen u posao, ne samo da je osjećaj “ne da mi se” davno nestao nego mi je čak teško stati, toliko da ponekad odgađam ručak ili nešto slično, samo da ne prekinem nit posla koju sam ulovio. Kad napravim posao, bude mi žao što sam prije toga toliko prokrastinirao, što sam toliko odgađao nešto što je zapravo lakše nego što se čini. Poanta glasi: ako ti se ne da, taj će osjećaj najčešće trajati samo prvih pet minuta rada. Izdrži pet minuta!

Kad sam ovo počeo pisati, imao sam na umu tri savjeta (top tri, jel, tko je vidio top dva?), ali zaključio sam da su ova dva dovoljna. Manje je više! Ipak, ako želite više (a tko ne želi više?), proguglajte “calendar blocking”. I ako želite unaprijed isplanirati 2021. godinu, ispunite planer za 2021. godinu s bloga Tee Zavacki o produktivnosti (TeaTime) koji toplo preporučujem. I pogledajte moj sličan post od prije godinu dana.

Poluosvrt na vrijeme kada je natjecanje bilo offline

Prije dvije godine napisao sam Poluosvrt na EJOI 2018. Ako je to bio poluosvrt, dakle pola osvrta, gdje je onda druga polovica? Napisat ću onda sada poluosvrt na EJOI 2017. u Bugarskoj gdje sam bio stručni voditelj. Iako je od tada prošlo više od tri godine, ali eto, slučajno sam naišao na ove fotografije i došlo mi je da se prisjetim kako je to bilo kad natjecanja nisu bila online. (Pola osvrta na EJOI 2018. i pola osvrta na EJOI 2017. daju jedan osvrt na… ne znam što.)

EJOI 2017. bila je prva europska juniorska olimpijada. Ondje sam na nekom bugarskom placu kupio stanovitu frulu s dvije cijevi, dvojanku:

Kupio sam je za dvadeset eura od nekog tipičnog “plac trgovca” koji nije znao engleski pa mi je na bugarskom objašnjavao da je to ozbiljan instrument, da voli Hrvatsku i da je bio u Splitu i na Korčuli. Kako god bilo, kupio bih taj egzotični instrument i da je bio dvostruko skuplji. To je bilo na nekom izletu; pokušavao sam odmah skužiti kako se frula svira i je li slična blok-flauti. Zapitkivao sam okolo ljude jesu li išli u glazbenu školu i mogu li čuti je li interval između dvaju tonova mala ili velika sekunda kad im odsviram. U busu sam uspio približno odsvirati melodiju iz uvoda pjesme Lipe cvatu (ne onu prvu nego onu drugu, normalniju). Nervirao sam ljude, netko me zamolio da prestanem.

EJOI 2017. bilo je jedino natjecanje na kojemu sam se ošišao. Zašto ne, pomislio sam; imao sam vremena i kosa mi je bila zrela za šišanje. Uspio sam se nekako sporazumjeti s frizerkom; ondje iz nekog razloga traže fotografiju kako da te ošišaju. Ošišao sam se vrlo kratko jer je to najbolja strategija kad ne znaš koliko je frizer sposoban. Potom sam u šetnji otkrio predivnu zgradu:

Kad sam je obišao da je bolje pogledam, još sam se više oduševio:

Poslije sam na mobitelu mjerio frekvencije tonova dvojanke. Lijeva cijev nema rupa i daje uvijek isti ton frekvencije oko 485 Hz. Desna cijev ima šest rupa naprijed i jednu iza, a daje tonove frekvencija redom oko 426, 485, 527, 570, 629, 685, 757, 813 Hz pri čemu su mjerenja vrlo neprecizna jer variraju i ovise o jačini daha. Dakle, lijeva cijev kao dron daje osnovni ton, od kojeg s desnom cijevi možemo otići “jedan niže” ili “do šest više”. Međutim, iz frekvencija se vidi da ti tonovi ne odgovaraju našim standardnim tonovima, a ni intervali nisu standardni – omjer frekvencija susjednih tonova te “ljestvice” kreće se otprilike između 1.08 i 1.10, što je točno između male i velike sekunde (1.06 i 1.12), s iznimkom prvog intervala (onog “jedan niže”) koji je oko 1.14. Nema nigdje ni oktave. Precizno sviranje standardnih melodija, dakle, nije moguće, ali zato su moguće drugačije melodije na koje nismo navikli. Druga logika!

Ovdje sam pisao više o stvarima, a manje o ljudima: o druženju, našim i stranim natjecateljima, voditeljima, organizatorima, djevojkama koje su nas vodile uokolo (tzv. gajdice) i slično. O njima neću ništa napisati, dovoljno je podsjetiti da su ljudi još zanimljiviji od frule i zgrada. (U genijalnom tekstu ABBA-ine pjesme The Day Before You Came, pjevačica u detalje opisuje trivijalne sitnice koje su se dogodile prije nego što je došao taj netko, i iako o toj osobi i tom događaju nema ni jedne riječi, o njemu je zapravo cijela pjesma.)

A samog natjecanja i rezultata više se i ne sjećam. Natjecanje je važno, i važne stvari motiviraju život, ali sačinjavaju ga one nevažne, offline sitnice sa strane.

Znanost i algoritmi, drugi dio

Prije nekoliko mjeseci u postu Znanost i algoritmi pisao sam o nekim znanstvenim radovima u kojima glavnu ulogu igraju algoritmi ne toliko različiti od onih na natjecanjima. U međuvremenu sam se sjetio još dvaju dobrih primjera u kojima glavnu ulogu igraju naši algoritmaši. Za početak spomenimo članak u kojem su naši bivši uspješni natjecatelji (Goran Žužić i Filip Pavetić) objavili efikasan algoritam računanja sličnosti stringova. A o drugom primjeru treba napisati nešto više, pa krenimo.

Na 1. kolu HONI-ja 2012. postavio sam zadatak Mars. U njemu je riječ o potpunom binarnom stablu u kojemu možemo proizvoljno zamijeniti lijevo i desno podstablo bilo kojeg vrha – ili, ekvivalentno, odabrati permutaciju listova u kojoj svako podstablo i dalje pokriva uzastopan podniz – tako da zbroj “odbojnosti” susjednih listova (koja je definirana za sve parove u ulaznim podatcima) bude što manji.

Zanimljivo je da sam poslije naišao na znanstvene radove koji rješavaju isti problem. Ovaj članak rješava isti problem za PQ-stablo i primjenjuje ga na poznati problem trgovačkog putnika (Travelling Salesman Problem ili TSP). U ovom članku problem se rješava za K-arna stabla (u binarnom stablu je K = 2) i primjenjuje u bioinformatici za sortiranje gena. Algoritmi i jednog i drugog članka svode se na O(n^3) za binarno stablo, što je i složenost mog rješenja u zadatku Mars.

Ali to nije najbolja moguća složenost! Kao što pokazuje ovaj članak Urlika Brandesa, problem za binarna stabla moguće je riješiti u O(n^2 \log_2 n). Zanimljivo je da je jedan natjecatelj na samom natjecanju pronašao takvo, brže rješenje (o kojem je, dakle, netko prethodno napisao znanstveni rad) – to je bio Luka Kalinovčić na COCI natjecanju. Nakon što sam proučio njegovo rješenje, opisao sam ga (uz vlastito) u službenim rješenjima, tada još ne znajući za cijelu ovu priču. Svaka čast Luki!

Spomenimo i da navedeni Brandesov članak navodi još neke primjene ovog problema kao što je sortiranje piksela u svrhu sažimanja slika, te je predloženi algoritam zbog memorijske složenosti od O(n) bolji od algoritma iz članka koji se izvorno bavi tim praktičnim problemom.

Argument u prilog postojanju dobrog i lošeg ukusa

Poznata je rečenica O ukusima se ne raspravlja. Kao što ću ispod objasniti koristeći i neke matematičke alate, mislim da nije baš tako.

Krenimo s jednostavnijom tvrdnjom, onom o ljudskoj ljepoti. Ljepota je subjektivna, ljepota je u oku promatrača. Ne, nije: istraživanja pokazuju da se ljudi u velikoj mjeri slažu oko toga koja su lica lijepa, a koja nisu. To znači da postoji “definicija” ljepote koja nam je u velikoj mjeri zajednička. Idemo li tu ljepotu dublje istraživati (što za ovaj argument i nije potrebno), vjerojatno ćemo doći do određenih pravilnosti, simetrija i proporcija koje čine tu ljepotu. Naravno da postoje “protuprimjeri” gdje je nekome lijepo/ružno što drugima nije, ali živimo u praktičnom svijetu i ima smisla reći da je netko lijep ako se većina ljudi oko toga slaže.

Ovaj argument ne možemo tako lako proširiti na ukus, gdje ne postoji slično slaganje i veća su razilaženja među ljudima. Ta činjenica mogla bi nas čak navesti na suprotni zaključak: za razliku od ljepote, “dobar ukus” ne postoji. Ali pokušat ću ovdje iznijeti malo finiji argument u prilog dobrom ukusu, barem u kontekstu umjetnosti (poput književnosti i glazbe), motiviran intuicijom koja mi kaže da tako nešto postoji, da određeni ljudi s više iskustva primjećuju više i bolje i često se slažu oko vrijednosti (ili njenog nedostatka) umjetničkih djela. Iako je filozofski možda lakše braniti stavove koji negiraju postojanje nečega (objektivnog morala, slobodne volje, svijesti, dobrog ukusa…), u mnogim slučajevima takve pozicije propuštaju ili gube iz vide neki stvaran fenomen koji (ako i nije egzaktan) postoji i važan je.

Umjesto dobrog ukusa možda je lakše govoriti o kvaliteti; to nisu sinonimi, ali mislim da se u svojoj suštini ne razlikuju izjave “postoje dobar i loš ukus” i “postoji ono što je objektivno kvalitetno i ono što nije”, barem u kontekstu umjetnosti. Sada ću pokušati definirati kvalitetu na način koji smatram dobrim. Radi jednostavnosti i bez smanjenja općenitosti, ograničimo se na književnost i definirajmo kvalitetnog pisca. I to na sljedeći način:

Kvalitetni pisci su oni ljudi za koje drugi kvalitetni pisci kažu da su kvalitetni pisci.

Znam, ovo na prvi pogled nema smisla, definiram kvalitetu koristeći kvalitetu. (To me podsjeća na definiciju ceste iz autoškole, koja je počinjala otprilike ovako: “Cesta je svaka javna cesta…”). Ali ne, izraziti iks pomoću iks nije nužno besmislica. Što je, recimo, s jednadžbom x=x^2-2? To je ono na što ciljam: gornja definicija zapravo je matematička jednadžba koja ima svoje rješenje. (Zato i ovaj post jest na Blogaritmu.)

Ta jednadžba u suštini je PageRank, algoritam koji Google koristi da bi rangirao stranice po važnosti samo na temelju poveznica. Ideja je da na važne stranice upućuje mnogo drugih stranica, pri čemu poveznica s važnije stranice vrijedi više. Na donjoj slici, veličina svakog lica proporcionalna je ukupnoj veličini onih lica koja na nju pokazuju. Tako su, recimo, zelena lica malena jer na njih nitko ne pokazuje, dok su ostala lica veća jer primaju više poveznica. Žuto lice znatno je veće od plavog (iako primaju skoro jednak broj poveznica) jer žuto lice prima poveznice od većih izvora (npr. od plavog lica) nego što ih prima plavo lice. Gornje crveno lice prima samo jednu poveznicu, ali je relativno veliko jer ta poveznica dolazi od velikog žutog lica. Dakle, slično našoj definiciji kvalitetnog pisca, velika lica su ona lica za koja druga velika lica kažu da su velika.

Naglasimo da veličina lica u ovom primjeru nije nigdje unaprijed zadana, nego su zadane samo poveznice, a veličina iz njih onda sama proizlazi – primjerice, rješavanjem odgovarajućeg sustava jednadžbi. Tako i kvaliteta iz naše definicije sama proizlazi iz preferencija svih onih koji imaju neko mišljenje o književnosti, pri čemu nitko nije unaprijed odabran kao kvalitetan.

Kao ilustraciju, uzmimo skup takvih (živućih) ljudi i zamislimo anketu u kojoj svaki od njih bira 50 (ili proizvoljno mnogo) subjekata iz tog istog skupa koje smatra kvalitetnim piscima. Da bismo iz tih preferencija izračunali kvalitete, svakom subjektu inicijalno dajmo, recimo, 100 bodova i neka se njegovi bodovi potom ravnomjerno rasporede piscima koje je on odabrao. Nismo još gotovi: zasad smo samo dobili popularnost, jer će pisci koji su najviše puta odabrani imati najviše bodova. No sada će ponovno svaki subjekt (istodobno) svoje bodove ravnomjerno rasporediti svojim favoritima. I ponovno, i ponovno… Tako preferencije pisaca postaju važnije jer oni imaju više bodova od običnih čitatelja. Recimo, ako u prvom koraku najviše bodova dobije J. K. Rowling, u drugom koraku ona će tu gomilu bodova podijeliti piscima koji su njoj kvalitetni, oni će ih dalje dijeliti svojim favoritima itd. Intuitivno, bodovi se slijevaju najboljima. Treba napomenuti da se u svakom koraku određeni manji postotak bodova (damping factor) svakog subjekta mora ravnomjerno rasporediti po cijelom skupu da bi subjekti koji nisu ničiji favoriti (nego su obični čitatelji) i dalje imali svoj bodovni utjecaj. E sad, važna matematička činjenica jest da nakon velikog broja ponavljanja situacija postaje stabilna. Recimo, nakon tisuću koraka bodovi pojedinog pisca više neće varirati, tj. svaki pisac dobivat će konstantan broj bodova u svakom idućem koraku. Taj broj odgovara njegovoj kvaliteti. (Upravo sam ugrubo skicirao iterativni algoritam računanja PageRanka, a precizniji detalji mogu se pronaći u linkanom članku ili na Wikipediji.)

Netko bi mogao prigovoriti da ovo rješenje nije egzaktno, nego ovisi o neprecizno definiranim podatcima i promjenom samo jedne preferencije mijenja se sustav jednažbi, a onda i njegovo rješenje. Slažem se da ovako definirana kvaliteta nije egzaktna, ali to je i slučaj i s mnogim stvarnim fenomenima za koje se slažemo da postoje (popularnost, uspjeh, inteligencija, ljepota, dobrota…). Što se tiče promjene jedne preferencije, važno je da sustav nije (u matematičkom smislu) kaotičan: ako promjene nisu velike, ni rješenje se značajno ne mijenja, i to ga čini realnim.

Moguće je napasti i samu gore napisanu definiciju kvalitete pa reći da je ona proizvoljna, da je kvalitetu moguće definirati na tisuću drugih načina i da je baš zbog toga ona i dalje subjektivna. Naravno, sve je moguće drugačije definirati. Ali kvaliteta iz gornje definicije u skladu je sa stvarnim pojavama, njeni brojevi neće ispasti nasumični, jer preferencije nisu raspoređene nasumično, nego se slijevaju prema najboljima. Dobiveni bi se rezultati vjerojatno dobro poklopili s ukusom onih koji se tom umjetnošću bave, vjerojatno bi “isplivali” upravo oni pisci u kojima uživaju, recimo, književna kritika i drugi priznati pisci. Nazovimo to kako hoćemo, ali it’s a real thing.

Za one koji još nisu uvjereni u takav ishod, ovaj argument u najmanju je ruku (matematičkim rječnikom) nekonstruktivan: dokazuje da neki entitet postoji, a da ga eksplicitno ne pronalazi. Ostalima on daje uvid u značenje kvalitete: ako vas zanima što je objektivno kvalitetno, krenite od onoga koga osobno smatrate kvalitetnim i pitajte njega, pa pitajte onoga koga on smatra kvalitetnim, i tako dalje. Kvalitetni jedni druge vole.

Beskonačno mnogo vremena

[Ova priča objavljena je 2016. godine na portalu Kultipraktik kada je ušla u konkurenciju za nagradu Prozak. U međuvremenu je taj portal ugašen pa sam priču odlučio objaviti ovdje. Matematičarima ona može biti zanimljiva i kao jedan pogled na staru raspravu o potencijalnoj i aktualnoj beskonačnosti.]

*

Ovaj zapis govori o slučaju koji još nije riješen, a tiče se zagrobnog života izvjesnog gospodina Slavka M. Taj čovjek na Zemlji nije nikamo žurio: živio je usporeno kao da života ima u izobilju. Govorili su da je lijen, ali to što je studirao deset godina, uvijek kasnio na posao i uzimao stanke za ručak u trajanju od po tri sata, po njegovim riječima nije bilo problematično. Objašnjavao je (onima koji su htjeli slušati njegov polagani govor, isprekidan povremenim odlascima u šetnju) da je njegovo ponašanje odraz svjetonazora koji donosi unutarnji mir i sprječava srčane i mnoge druge bolesti; on je stoga zapravo bio itekako odgovoran čovjek. Poginuo je na autocesti, u pedesetoj godini, u automobilskoj nesreći za koju je očevid utvrdio da joj je glavni uzrok bio prespora vožnja dotičnog Slavka M.

Nakon smrti stigao je u sobicu kamo svi kad-tad pristižu i sjeo za stol s Bogom, vragom i mršavim zapisničarom. Na sastanku je Slavko M. uspio isposlovati da ne ode u pakao na cijelu vječnost, nego samo na konačno mnogo vremena, nakon čega će otići u raj gdje će ostati zauvijek. Nezgodno je bilo što će trajanje vremena provedenog u paklu odrediti vrag, i to potpuno proizvoljno. Slavko će svakako jednom izaći iz pakla, ali kada će se to dogoditi – na vragu je bila odluka.

Slavko M. mirno se zaputio u pakao, znajući da nema tog vremena koje on ne bi mogao provesti u čekanju. On nije bio glup čovjek pa je bio svjestan da će vrag odabrati golem broj godina, veći od svake Slavkove predodžbe. Ali koliko god to vrijeme trajalo, ono je ništavno prema vječnosti koju će Slavko potom provesti u raju; tamo će od izobilja vremena kad-tad zaboraviti da je ikada i bio u paklu.

Slavko M., nažalost, nije znao da vrijeme nadmašuje sve njegovo strpljenje. Možda i nije teško u paklu proboraviti mjesec dana, godinu, pa čak i pet godina. Ali trideset godina, cijeli život, dva života, deset života? Slavku je prekipjelo već nakon pet života – to je već nekoliko stoljeća! – ali nakon toga je dalje čekao tisućljeće, dva tisućljeća, milijun godina, milijardu godina, starost Zemlje, starost svemira – a i to je bila tek sitnica prema onome što ga je čekalo.

Nakon nekoliko tridecilijardi godina Slavko M. rekao je sam sebi da više ovako ne može i odlučio se na žalbu. Nazvao je Boga (morao je čekati čak dvije minute dok se ovaj nije javio) i iznio mu svoj izračun prema kojemu je u paklu proboravio više života nego što ima atoma u svemiru; vrag očito krši dogovor i nikada ga neće pustiti. 

“Hm…” promrmljao je Bog, “tko si ono ti?” 

Slavku je trebalo čak pet minuta objašnjavanja dok se Bog nije napokon sjetio njega i dogovora koji je sklopljen. Tada se javio vrag koji je prisluškivao razgovor.

“Hoću, pustit ću ga, ali još nije došlo vrijeme.”

“Eto vidiš, sve je u redu”, odgovara Bog i poklapa slušalicu. Slavko se pognute glave vratio u pakao psujući Boga i vraga: u beskraju vremena bio je već smislio dugačke psovke čiji je izgovor trajao i po nekoliko tjedana.

Nakon nekog vremena Slavku je postalo jasno da, koliko god eona provede u paklu, ni u jednom trenutku neće znati je li prošlo makar jedan posto od vremena koje mu je vrag predodredio. S tim je mislima ponovno nazvao Boga i rekao mu da je načuo da ga vrag uopće ne namjerava pustiti. Vrag je mirno odgovorio da za to nema nikakvih dokaza. Bogu je čitava stvar postala sumnjiva pa su se u sobici ponovno sastali on, vrag, Slavko M. i mršavi zapisničar. Slavko je Bogu iznio svoju optužnicu.

“Vrag je očito odlučio da me nikada neće pustiti. To je u suprotnosti s dogovorom koji je sklopljen.”

“Slažem se”, odgovara Bog kimajući glavom. Vrag se na to prestane ljuljati na stolcu, uspravi se i htjedne odgovoriti, no Slavko ga preduhitri.

“Ali on će se uvijek izvući! Kad god ga optužim da krši dogovor, vrag će samo odgovoriti da će me pustiti u budućnosti i da je stoga sve po dogovoru. Ne mogu nikada dokazati da me zapravo neće pustiti.”

“Dakle, nema dokaza!” sa smiješkom ustaje vrag. “Ne znam zašto uopće raspravljamo.”

“Zanimljivo”, reče Bog Slavku, ignorirajući vraga koji je ponovno sjeo. “Tvrdiš dakle da je vrag u zavidnoj poziciji: u mogućnosti je istodobno kršiti i ne kršiti dogovor.”

“Upravo tako”, odgovara Slavko, dodajući riječi “napokon si shvatio” sebi u bradu koja je već padala gotovo do poda.

“Molim?” pita Bog.

“Ništa, ništa…”

“Predlažem sljedeće rješenje”, obznani Bog, a zapisničar se prihvati posla. “Vrag mora odmah odlučiti o broju godina koje ćeš provesti u paklu i šapnuti ga meni. Tako ćemo biti sigurni da će dogovor biti ispoštovan.”

Nakon što je vrag teška srca to učinio, Slavko M. sretno se zaputio natrag u pakao, napokon siguran da će kad-tad izaći: njegov je dan izlaska fiksiran i svakim mu je danom bio bliže za točno jedan dan. Ali stvari nisu išle dobro: nemoguće je i zamisliti koliko je Slavko nakon toga čekao. Sve ono vrijeme prije drugog sastanka u sobici jedva da je činilo milijunti dio vremena koje je Slavko potom proveo u paklu ne dočekavši oslobođenje. Shvatio je da ni sada ne zna je li prošlo makar jedan posto, ili čak tisućiti dio, od vremena koje mu je vrag predodredio – štoviše, vjerojatno nije. Nakon što je i njemu, strpljivom i sporom čovjeku, čak septilijun puta prekipjelo, Slavko M. zatražio je novi sastanak s Bogom i vragom u istoj sobici. 

Slavkov je prijedlog bio sljedeći: vrag će ga odmah pustiti i otići će u raj. Ondje će, međutim, provesti konačno mnogo vremena, koliko on sam poželi, nakon čega se vraća u pakao na cijelu vječnost. 

Bio je to neobičan prijedlog, simetričan početnom dogovoru. Vrag je zaključio da je Slavko M. glup čovjek, ali baš iznimno glup čovjek, jer bi po starom dogovoru on u paklu proveo samo konačno mnogo vremena i poslije se ne bi vraćao, a po novome prijedlogu kad-tad će se vratiti u pakao na cijelu vječnost. Vragu je to odgovaralo pa je prijedlog bio prihvaćen, mršavi je zapisničar u spise dodao novu bilješku, a Slavko se zaputio u raj.

A tamo je, naravno, provodio na tisuće puta više vremena nego što je prethodno bio proveo u paklu i nije mu bilo ni na kraj pameti da uskoro izađe. Vrag, budući da ni on nije bio glup, shvatio je da Slavko može u nedogled boraviti u raju na isti način kao što je vrag prethodno odugovlačio njegov boravak u paklu.

“Onaj idiot krši dogovor i neće nikada izaći”, požalio se vrag Bogu.

“Hoću, izaći ću”, iz ležaljke odgovara Slavko M. “Prema dogovoru, moram izaći, ali onda kada sam odlučim.”

Vrag je podivljao. “Ovo je prevara i podvala! On može čitavu vječnost biti u raju i uvijek odgovarati da ipak nije prekršio dogovor jer će, tobože, jednom u budućnosti izaći. Ponovno imamo isti problem.”

“U redu”, odgovara Bog. “Slavko, evo ti komad papira. Bit će velik koliko god poželiš da bude. U skladu s vlastitim prijedlogom, moraš odlučiti koliko ćeš godina ostati u raju – taj broj, naravno, ne smije biti beskonačan – i napisati ga na ovaj papir. Tako ćemo znati da će tom vremenu doći kraj.”

Češkajući obraslu glavu, Slavko je uzeo olovku razmišljajući što će napisati. Nažalost, koji god broj napisao, u usporedbi s vječnošću je ništavan. Također, koji god broj napisao, uvijek može napisati još veći pa je odluka gotovo nemoguća. 

Nakon nekog vremena sine mu ideja i on počne pisati broj: jedan, nula, nula, nula, nula, i tako dalje, dakle: 1000000000000000000000000… Dopisivao je nule i nule, papir se sam od sebe povećavao, a Slavko je nule dopisivao danima, tjednima, mjesecima, godinama, životima. Vrag je shvatio da će ga još jako dugo čekati, ali ipak mirno ode spavati znajući da će nulama na papiru kad-tad doći kraj jer zapisani broj ne smije biti beskonačan.

Slavko M. konačno je došao na svoje: eonima je pisao nule na papiru, ne čineći ništa drugo i pitajući se zašto je u zemaljskom životu radio išta drugo kad je ispunjavanje praznoga papira nulama najlakši, najljepši i najopuštajući posao. Papir se povećavao i dosegnuo širinu četrdeset svemira. Videći kamo to ide, vrag se ponovno javi.

“Onaj vucibatina neće nikada završiti zapisivanje tog prokletog broja godina. Njegov broj je beskonačan, a to je protivno dogovoru.”

“Nije tako!” odgovara Slavko grickajući olovku. “Moj broj je konačan i završit ću s njegovim zapisivanjem jednom u budućnosti.”

Nakon još nonilijun kvintilijuna godina, vrag se u raju pojavio sav crven. 

“Dosta je bilo ovoga cirkusa! Već treći put imamo isti paradoks: onaj smrdljivac krši dogovor pišući beskonačno mnogo znamenaka, a istodobno ga ne krši jer bilo kada može reći da će uskoro završiti. Želim garanciju da će pisanje kad-tad završiti!”

“Opet vas dvojica”, odgovara Bog uz duboki uzdah. “U redu: moramo biti sigurni da će Slavko završiti s pisanjem. Zato nam, Slavko, moraš obznaniti koliko još dana planiraš zapisivati te silne znamenke.”

“Pisat ću ih još mnogo dana”, mirno će Slavko. “Ja volim pisati.”

“Moramo znati točan broj dana”, ponovno će Bog brišući znoj sa čela. “Evo, napiši ga ovdje da to napokon riješimo”, reče i pruži mu novi papir.

Slavko M. uzeo je olovku i zamislio se. Potom je polako počeo pisati broj: jedan, nula, nula, nula, nula, nula, nula, nula, nula, nula, nula, nula, nula, nula, nula, nula, nula, nula, nula…

Knjiga koja se čita godinama

Govori se ovih dana o novom nobelovcu, fizičaru Rogeru Penroseu. Moj susret s njim dogodio se (i još se događa) kada mi je Ante Đerek povodom obrane doktorata poklonio njegovu knjigu The Road to Reality. Način da nekoga upoznamo, da uđemo u tuđi um i izravno čujemo njegove riječi, to su knjige. Oblik komunikacije, kao i blogovi i chat poruke, samo dulje i rjeđe. (Znam da je neobično objašnjavati što su knjige, ali možda je dobro.) Spomenuta The Road to Reality Penroseova je chat poruka od preko tisuću stranica u kojoj on, praktički od nule, pokušava objasniti svemir i sve njegove fundamentalne formule. Ovo je moj primjerak:

Prvu trećinu knjige čini sama matematika koja je potrebna za fiziku u ostatku knjige. Jedva čekam da dođem do fizike, jer matematika je pomalo naporna; već dugo sam stao na ovom mjestu jer (razumljivo) baš mi se i ne da:

Nedostaje mi samo malo discipline; nekoliko stranica dnevno i brzo bih prešao dosadne dijelove. Nema žurbe, to je projekt u kojemu se uživa godinama. Kao i poezija za koju sam nedavno naučio da ne treba čitati više od jedne pjesme dnevno – te su pjesme (neovisno o duljini) često mnogo “sporije” od matematike. Kad je Dylan pitao Cohena koliko mu je trebalo da napiše pjesmu Hallelujah, odgovor je bio dvije godine, iako kažu da mu je zapravo trebalo pet godina. Ja ću je možda razumjeti za deset. Penrose je ovu knjigu (The Road to Reality) pisao osam godina. Da je pisao brže, možda bi napisao više knjiga, ali one bi bile lošije. Manje je više (less is more) i vrijeme treba ispuniti (bolje rečeno isprazniti) jednostavnim ritualima: gašenjem konekcije, malim kavama s mlijekom koje se dugo ispijaju, stranicama koje se dugo i polako čitaju. Trebale su nam tisuće godina za razumijevanje svemira (i nismo još gotovi), a sada to znanje imamo na tisuću stranica jedne knjige. Stoga ako i cijeli život čitamo samo tu knjigu, vrijedno je. Iz te perspektive sljedeći vic u sebi nosi duboku mudrost: kad je Mujo pitao Hasu što želi za rođendan, želi li možda knjigu, Haso je odgovorio da već ima jednu.