Advent of Code 2025

Od Petr Zemek, 2026-01-15

Shrnutí mých dojmů z Advent of Code 2025.

Co je to Advent of Code?

Těm, kteří o Advent of Code slyší prvně, bych jej chtěl krátce představit. Pokud víte, o co jde, tak tuto sekci klidně přeskočte.

Stručně řečeno, jedná se o verzi adventního kalendáře pro programátory :-). Jen místo mlsání sladkostí každý den plníte zadaný úkol, za jehož vyřešení získáváte zlaté hvězdy. Advent of Code je tvořen 12 úkoly (dříve 25, viz níže), z nich každý je rozdělen na dvě části. Za splnění každé části dostanete zlatou hvězdu. Cílem celého snažení je získat těchto hvězd 24 (12 krát 2). Před zahájením práce na druhé části každého z úkolů je nejdřív potřeba splnit první část. Až po jejím splnění se vám odtajní zadání druhé části. Druhá část pak většinou nějakým způsobem navazuje na první část. Např. se jedná o rozšíření zadání, bližší dospecifikování některé části zadání (čti oprava), či navýšení výpočetní náročnosti. Zadání každého úkolu je pro všechny společné. Co se liší, tak jsou vstupní data, která má každý unikátní. Cílem úkolů je vstupní data načíst, zpracovat podle zadání a vypsat výsledek. Po splnění každé části vyplníte vaše řešení do formuláře a dozvíte se, zda bylo vaše řešení správné. Pokud nebylo, tak máte samozřejmě možnost po určité krátké době učinit další pokus. K vypracování můžete využít jakéhokoliv programovacího jazyka či nástrojů.

Podoba a náročnost úkolů je poměrně variabilní. Zadání jsou ve své podstatě algoritmická, ale rámcově zapadají do Santových slastí a strastí. Jednou z dovedností, kterou při řešení úkolů využijete, je schopnost odlišení, co je podstatné z hlediska zadání úkolu a co je jen omáčka. Úkoly jsou opravdu různorodé, a tak si např. vyzkoušíte louskání hesel, výpočet voltáže systému, simulace zvedáku, nestandardní výpočty, simulace šíření paprsku v prostředí či zjišťování, zda se dárky vlezou do daných lokací :-). Obtížnost jednotlivých úkolů se také liší a závisí nejen na vašich znalostech a zkušenostech, ale i na tom, jak moc si s úkolem vyhrajete (zda vám jde o vymazlené řešení, či jedete na rychlost a čitelnost kódu a testy hážete za hlavu). Troufám si tvrdit, že pokud člověk netuší, jak některý z úkolů principiálně řešit (např. neznáte matematický vzorec či informatický koncept), tak musí jistý čas věnovat i studiu. Alespoň se tak člověk něco nového naučí :-).

Dříve byl Advent of Code také rychlostní soutěž, ale to se od roku 2025 změnilo. Zmizel jednak globální žebříček a jednak již není vidět, jak dlouho vám řešení úlohy trvalo (od doby zveřejnění zadání po vaše vyřešení).

Co říkám na Advent of Code 2025?

Pozor: Tato sekce obsahuje spojlery. Pokud plánujete letošní Advent of Code řešit, tak zvažte si text přečíst až později.

Velkou změnou v roce 2025 byl poloviční počet úloh. Konkrétně místo 25 úloh jich bylo pouze 12. To, zda se jedná o změnu k lepšímu či horšímu nechávám na zvážení každého. Mně se osobně víc líbil původní formát s 25 úlohami, ale chápu, že vytvořit je dá zabrat. Taktéž mi přišlo, že úlohy byly tentokrát méně zajímavé než předchozí roky.

Advent of Code jsem stejně jako minule řešil v Pythonu. Volba jazyka mě s ohledem na rychlost běhu nijak nelimitovala; drtivá většina úloh běžela pod jednu sekundu, a jen dvě úlohy běžely delší dobu (druhá část 9. úlohy běžela 10 sekund a první část 10. úlohy běžela 5 sekund).

Které úkoly mě nejvíce bavily?

  • Den 11. Hledání cest mezi zařízeními. Hned při čtení mě napadl rekurzivní algoritmus, který se ukázal jako rychlé a jednoduché řešení :-).
  • Den 7. Jednalo se o výpočet počtu parpsků, které se postupně na cestě rozdvojují. Na začátku jsem se sice zasekl na pochopení zadání, ale po jeho porozumění mě úloha velmi bavila.

Které úkoly mě nejméně bavily?

  • Den 12. Ukázkový příklad v zadání jevil dojem, že se bude jednat o velmi náročnou úlohu, a obecné řešení by náročné rozhodně bylo. Když se ale člověk zaměřil na reálný vstup, tak úloha byla mnohem jednodušší. To mě celkem dost zklamalo...
  • Den 6. Zde prakticky celý problém spočíval ve zpracování (angl. parsing) vstupu; po správném načtení bylo řešení triviální.

Které úkoly mi daly nejvíce zabrat?

  • Den 9 (druhá část). Původně jsem se druhou část snažil řešit tak, že si vše naprogramuji sám (detekce hran, vnitřní oblasti, a průniku), ale bylo to celkem peklo. Nakonec jsem zvolil externí knihovnu na práci s polygony, díky které bylo řešení poměrně přímočaré.
  • Den 10 (druhá část). Nejdřív jsem se to pokoušel řešit kódem řešícím soustavu rovnic s omezeními, ale bylo to zbytečně složité. Vzal jsem na to tedy parní mlátičku v podobě Z3 solveru, čímž se celé řešení zjednodušilo.

Přijde mi, že mimo tyto dvě úlohy (resp. jejich druhé části) byl zbytek úloh jednoduchý.

Které úkoly jsem měl nejrychleji vyřešené?

Jak jsem psal výše, od roku 2025 již není vidět, jak dlouho člověku daná úloha zabrala, takže informace v této sekci berte jen orientačně.

  • Den 11. S využitím rekurze a memoizace (cachování) jsem měl obě části vyřešené během cca 15 minut.
  • Den 3. Opět s využitím rekurze a memoizace.

Celkově jsem měl úlohy až do cca osmé vyřešené poměrně hodně rychle.

Adventní kalendář

Vypadá v roce 2025 takto:


Advent of Code 2025

Zdrojové kódy

Zdrojáky k mým řešením všech úloh jsou u mě na GitHubu, včetně doby běhu každého úkolu.

A co vy? Řešili jste Advent of Code 2025? Co na něj a na změny oproti loňskému roku říkáte?

Obsah tohoto pole je soukromý a nebude veřejně zobrazen.

Filtrované HTML (využíváno)

  • Povolené HTML značky: <a href hreflang> <em> <strong> <cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <table>
  • Zvýraznění syntaxe kódu lze povolit přes následující značky: <code>, <blockcode>, <bash>, <c>, <cpp>, <haskell>, <html>, <java>, <javascript>, <latex>, <perl>, <php>, <python>, <ruby>, <rust>, <sql>, <text>, <vim>, <xml>, <yaml>.
  • Řádky a odstavce se zalomí automaticky.
  • Webové a e-mailové adresy jsou automaticky převedeny na odkazy.
CAPTCHA
1 + 0 =
Vyřešte tento jednoduchý matematický příklad a vložte výsledek. Např. pro 1+3 vložte 4.
Nějak se mi tady rozmohl spam, takže poprosím o ověření.