laacz.lvlaacz.lv

Senākais rakstošais blogs Latvijā *
ANNO MIM *
Teju 100% cilvēka rakstīts saturs *

← Uz sākumu


Advent of Code 2025

2025. gada 12. decembrī | komentāru vēl nav | #techy

Šis ieraksts ir tehnisks. Tas var būt par datoriem, programmēšanu, lodēšanu un tamlīdzīgām ne pārāk populārām lietām. Ja tevi šāds saturs neinteresē, droši vari to nelasīt.

Par Advent of Code esmu rakstījis jau iepriekš.

Šogad, iespējams, pasaulē populārākajā programmēšanas adventes kalendārā Advent of Code bija nelielas izmaiņas. Autors nolēma to saīsināt līdz 12 dienām iepriekšējo 24 vietā, kā arī likvidēt dalībnieku publiskos reitingus. Pirmais bija tīri ieguldāmā darba apjoma dēļ, bet otrs neveselīgas konkurences dēļ.

Tematiskie adventes kalendāri nav nekas superjauns. Neesmu apzināti kolekcionējis, bet vēl daži ir pamanīti: senākais programmētājiem domātais — Perl Advent (2025), sistēmu administrēšanas lauciņā ir Advent of Sysadmin, kiberdrošībai veltīts Advent of Cyber. Vēl ir neskaitāma kaudze ar tādiem, kuros katru dienu ir jauns ieraksts — ideja, tips and tricks, utt. Piemēram, Advent of Compiler Optimization. Citi šoreiz, pārsteidzošā kārtā, man nav pamanījušies.

Šoreiz nolēmu pieķerties tam visam, atkal aiz rokas paņemot Rust. Iepriekšējās reizes atdūros pret nesaudzīgo borrow checker. Varbūt 2025. gads ir tas, kurā saies? Sagāja. Viss kods ir atrodams Github'ā.

12. dienas testu vizualizācija
12. dienas testu vizualizācija

Godīgi sakot, tā arī nesapratu iemeslu tam, ka borrow checker gribēja man sačakarēt dienu tikai vienu reizi, bet tā īsti arī nesanāca. Ārpus tās mēs sadzīvojām lieliski.

Plāns B bija dot iespēju Zig, bet gribējās tā kā vienu novest līdz galam, pirms ķerties pie nākamās. Zig ir tā valoda, kas ir riktīgi interesanta, bet nekad nenonāks manā produkcijai piemēroto valodu sarakstā tā vienīgā galvenā autora dīvainību dēļ.

Iesildoties un atpūšoties, pamanījos sarisināt līdz galam arī 2016. (Go), 2019. (Rust) un daļēji 2020. gadu (Go). Jāpabeidz līdz galam 2017. Iespējams, ka vēl nesarisināto 2018. gadu varēs pamēģināt iekš Zig.

Šī gada uzdevumu klāsts bija aizdomīgā kārtā pa zobam pat man. Pie nosacījuma, ka ignorējam 10. dienu, kur otrajā daļā bija jāsaprot un jāspēj arī pielietot savas zināšanas, lai atrisinātu palielu lineāru vienādojumu sistēmu. Tīra matemātika, Gausa izslēgšanas metode, matricas, utt. Nomocījos diezgan ilgi, līdz izsmēlu visas savas idejas. Aizgāju nošpikot pieeju un pareizos atslēgas vārdus.

Man patika tas, ka nebija gluži miljons BFS, DFS, Dijkstras un sazin kas vēl jāmaļ uz riņķi. Palīdz arī iepriekšējo gadu pieredze. Vienā uzdevumā ieraugi skaidru DFS, kur otrajā daļā atkal ir acīmredzama vajadzība pēc iegaumēšanas (memoization). Citā uzdevumā saproti, ka ir iespējas fundamentāli samazināt apstaigājamo variantu skaitu (early pruning). Vēl kaut kur talkā nāk koordināšu kompresija.

Šogad uzdevumi bija ļoti labi nostrādāti. Laikam pirmais gads, kad pat prātā neienāca doma, ka problēma ir ievaddatos, nevis manā kodā :)

Un arī, kā saka, anxis nebija tik traks kā citreiz. Iesaku, rekomendēju un piedāvāju pamēģināt arī citiem. Pirmie gadi uz beigām palika ļoti traki. Ar katru nākamo reizi kļūst labāk. Grūti mācībās…


Tu atbildi augstāk redzamajam komentāram. Atcelt