Saturday, December 8, 2018

Advent of Code

Progemis-võistlus.
Olen täiega võlutud.

Iga päev algab uue ülesandega. Proge ära, leia vastus. Probleemid on suhteliselt kerged ja lahenduvad umbes ühe-kahe ekraanitäie koodiga. Vaja on loogikat + oma keele tundmist.

Ässad võistlevad kiiruses. Lahendused tulevad mõne minutiga. Ma ei loe ülesannet selle ajaga isegi läbi, ammugi ei lahenda / proge / testi.
Ässade tööd saab jälgida kogukonna Redditis: https://www.reddit.com/r/adventofcode/
Kes paneb sinna lahendusi (koodi), kes videoid, kes kirjeldab mõttekäike.

Mõni kirjutab eriti obskuurses või ebamugavas keeles.
Vi makrod, COBOL, Minecraft (!!!), Brainfuck, Whitespace - see on teie tähetund!
Kes soovib proovida, siis siin on hea nimekiri.

Mõni võtab iga päev eri keele, näiteks see hull või siis too.

Mis selle siis minu jaoks huvitavaks teeb?

1) Ülesannete lahendamine on lahe! Mõistus töötab (vähemalt mulle tundub, et).
2) Iga ülesandega õpib midagi. Leksikoloogiline topoloogiline sortimine ftw! Counter class!
3) Huvitav on vaadata, kuidas "need teised" on sama probleemi lahendanud. Mõnikord mõtleb kogukond minuga samamoodi - kõik teevad rekursiooni ja mina ka, mina ka! Mõnikord on mul täiesti ainulaadne lahendus ja selle üle on ka hea meel. Day 6 Part 1 - mulle tundub, et mul on seniloetuist kõige kiirem algoritm. Tegelt kindlasti ei ole, aga ikkagi!
4) Kõige popim keel on Python. See on nii mugav, et selle kasutamine on natuke sohi tegemise moodi. Ma oskan sellest täpselt kolme asja - list, set, dict. Aga seni on piisanud.
5) Ässade koodi on huvitav lugeda.
6) On tore näha, kuidas keegi küsib nõu ja on mõtlemisega umbe jooksnud kohas, mis mulle üldse keerukas ei olnud :)

AoC ümber on elav kogukond.
Inimesed visualiseerivad ülesandeid ja lahendusi.
Ehitavad graafikuid.
Otsivad läbi ajaloo keerukamaid ülesandeid.

Tehke ka!

Edit:
Jõudsin juba rõõmustada, et see pole Project Euler ja saab hakkama ka ilma arvuteooriata, kui nägin esimest viidet Mersenne'i täisarvudele.

Päev 9, marmorkuulid: 
Ei saanud hakkama ja spikerdasin.
1. osa tuli lihtsalt, aga 2. jäi kiiruse taha kinni (runtime oleks olnud tundides, vähemalt.)
Matemaatilist lahendust ei leidnud.
pypy'd installida ei tahtnud (see oleks võib-olla aidanud).
Vihje kasutada kiiremat andmehoidlat viis deque'ni, selle sain küll tööle, aga sama ebaefektiivselt.
Lõpuks lugesin seda lõime ja võtsin selle koodi, st tegin puhtalt maha.

Päev 13, kärud ja rajad: 
Pidanuks panema kirja, mida ma iga päevaga õpin.
Täna vaevlesin pikalt selle käes, kuidas listist mitut elementi korraga eemaldada (vastus: ehita uus list, [x for x in previous_list if condition]) ja kuidas korraga itereerida nii listi kui selle järjekorranumbrit (vastus: i, item = enumerate(list)) ja püüdsin liiga optimeeritud lahendust ehitada. Lisaks harjutasin klasside ja dict'ide kasutamist. Lisaks üks raskesti debugitav loogikaviga - lahendus töötas test-sisendi peal, aga mitte päris-. Lõpuks tuli Alo ja aitas :)

3 comments:

notsu said...

Mersenne'i algarvudele ikka (mitte täisarvudele. närin tähte.).

Kaur said...

Njaa.
Mõtlesin arvuteooria peale, see käib just täisarvede kohta, ja.

notsu said...

mõnes mõttes muidugi õigus, sest algarvud ongi täisarvud. korrektne, aga liiga vähe defineeritud niisiis.