2013 m. liepos 22 d., pirmadienis

Pusmečio apžvalga (2013 pirmoji pusė)

Šį semestrą universitete teko pasimokyti nedaug dalykų. Tačiau buvo ir tokių, kuriuose reikėjo programuoti.
Viename dalyke reikėjo naudotis žiniomis iš kokių dešimties anksčiau praeitų dalykų, ir daugiausia programuoti Perl kalba. Taip pat reikėjo naudotis R kalba, bei grafikos programomis...
Kitame dalyke reikėjo suprogramuoti grafą apdorojantį algoritmą. Programa turėjo surasti ir išvesti atstumus tarp grafo taškų.
Gavosi taip, kad praktiškai nepasimokiau abiejų dalykų, ir neparašiau daugumos programų. Priežastys kažkur anapus. O universitetas tikrai patiko.

***

Savaitgaliais teko, jau nebijau pavadint - tradiciškai, dalyvauti OpenCup'e. Bet tik ankstyvo žiemsario turuose. Prie manęs į komandą prisijungė jaunas protas. Deja matematiškas, funkcinės mąstysenos garbintojas, dievinantis Python'o kosmines funkcines galimybes ir dar net nežinojęs kaip šioje kalboje nuskaityti duomenis iš failo ar standartinės įvesties (stdin) :) .
Sekėsi mūsų komandai prastokai, bet man vistiek ji patiko. Aš imdavausi spręsti lengviausius ir suprantamiausius, bei trumpiausių sąlygų uždavinius, o linksmasis ir kupinas optimizmo komandos draugas - pačius sunkiausius ir labiausiai matematiškus uždavinius. Nei jam, nei man nepavykdavo išspręsti savų uždavinių, nors gal kokį lengvesnį ir buvau išsprendęs. Mėginau Perlu ir kartą - Rubiu.

Po to laisvalaikiais užsikabinau dalyvauti (kaip šios srities liaudis vadina - "pakibinėti") Codeforces turnyrėliuose. Sudalyvavau iš viso 12-oje.
Patiko dalyvauti. Nors sekdavosi sunkiai. Viską rašiau Perlu. Po 12-os turnyrėlių antrąjį kartą nusileidau į labai žemą reitingą (esu "Newbie") - tas mano reitingas yra pats žemiausias iš visų apie trisdešimties registruotų svetainėje lietuviškų akauntų. Nesistebiu, nes programuoju labai silpnai ir lėtai. Lėtai sekasi koduoti, ir susikaupti. Daug klaidų ir neteisinga metodika. Sprendžiu uždavinius sudėtingėjimo eiliškumu.

Labai patiko paskutinio turo trečias uždavinys. Jį išsprendžiau tik šįryt. Pasirodo, jį išsprendę tik ~700 Codeforces vartotojų. Reiškia, kad išsprendžiau ne lengvą, bet "vidutinį" uždavinį - tai džiugina. Tačiau deja išspręsti per varžybų laiką nepavyko.

Uždavinys toks, kad:
pateiktas simboliais "." ir "E" užpildytas kvadratas.
Reikia nurodyti minimaliausią kiekį koordinačių porų (bet kurių tinkamų), kurių kiekviena reiškia kvadrato vietą, kurioje yra taškas, ir nuo kurios į visas keturias puses esantys langeliai ir pats langelis "užmigdomi". Ir visos koordinačių poros "užmigdo" visą kvadratą. Antraip išvesti "-1". 329A.

Problema, kad uždavinį išsprendžiau mintyse neteisingai, ir tokį pradėjau programuoti. Suprogramavau. Tačiau testų nepraėjo. Vėliau supratau, kad ne apie visus atvejus pagalvojau, ir dar kartą išsprendžiau, bet ir vėl neteisingai - vėl ne apie visus atvejus buvo pagalvota. Šįkart jau buvo lengviau, nes pasibaigus turnyrui - galėjau matyti, kokių testinių atvejų programa nepraeina, iš jų supratau, kad nors ir suprogramavau teisingai, bet ne visai tokį uždavinį. T.y. aš jo teisingai neišsprendžiau. Kai supratau, kaip yra teisingai, tada ir suprogramavau taip, bei sprendimas buvo užskaitytas. Kartais būna, kad pilnai išspręstas visiems atvejams uždavinys lengviau suprogramuojamas, negu neteisingai išspręstas (ne visiems pastebėtiems atvejams), o kartais - sunkiau. Šįkart teisingas sprendimas buvo lengviau suprogramuojamas, negu neteisingas. Jeigu būčiau jį sugalvojęs tik ką susipažinęs su uždaviniu, tuomet gal net spėčiau jį atlikti per turnyrinį laiką (likusias ~1,5 val.). Uždavinys grakštus.
Uždaviniui išspręsti, man reikėjo pasirašyti procedūrą, kuri transponuoja mano simbolių kvadratą. Ši procedūra (subrutina) pasirašė per ~1/3 laiko, naudoto spręsti teisingai sprendžiamą užduotį.
Tačiau teko gyvenime jau keletą sykių rašyti atskirą transponavimo užduotį (porą kart - golfe, kartą - opencup'e). Dėl to, ją rašiau greičiau. Tačiau, juk galėčiau pačią subrutiną naudoti kiekvienam kode, kad nereikėtų per naują rašyti to paties. Bet neaišku, ar taip daryti verta.


Bendrai paėmus, programavimu ir tobulėjimu jo srityje skurdus gavosi pusmetis.