Tento článek patří do seriálu Advent of Code. Ostatní články seriálu:
- Advent of code v Elixiru - Rok 2019
- Advent of code v Go - Rok 2020
Na jaře jsem začal zpracovávat úkoly z roku 2019 v Elixiru. A to když jsem nastoupil na nový projekt, který byl v právě tomto jazyce napsán. Jenže pak přišla korona a projekt byl pozastaven. Když se naskytl jiný projekt, byl opět v téměř novém jazyce pro mě. A to v Go, často označovaném jako Golang, se kterým jsem ale měl již drobné zkušenosti z Erasmu ve Finsku.
Pokud se chcete Go naučit, doporučuji jiný můj článek Jak začít s jazykem Go
Zdrojáky opět na Githubu včetně testů
Stejně jako AoC 2019, i letošní řešení nahrávám do veřejného repozitáře na svůj Github. Kdokoli chce, může se podívat, inspirovat či vytvořit pull request. A i když v tomto malém měřítku to asi není to pravé, veškeré úkoly dělám metodou TDD (Test Driven Development). Každý úkol má totiž ukázku, na které je možné si program prvně otestovat.
Včetně pipeline
Není to ale jen o úkolech, které Eric připravuje. Když jsem kód začal nahrávat na Github, rozhodl jsem se využít také Github Actions. Po každém nahrání se tedy zkontroluje čistota kódu pomocí Go linteru a také se spustí testy. I to pro mě bylo nové, takže úkoly to končit nemusí.
Při jednom rozhovoru Eric Wastl prohlásil, že všechny úkoly lze vyřešit do několika sekund. Pokud tedy program běží déle než minutu, pravděpodobně existuje lepší řešení.
Dny, na kterých jsem se zasekl
Některé dny byly lehčí, jiné zase těžší. Některé mi jen zabraly více času, u jiných jsem potřeboval poradit či nakopnout. Za to děkuji YouTube kanálu TurkeyDev, kamarádovi a spolužákovi s Github jménem Kobzol a komunitě na Redditu. Zde je seznam dnů ,kdy jsem měl problémy:
- Den 13: Nebyl problém program napsat, jen by běžel asi 8 hodin. Správné řešení je pomocí Chinese remainder Theorem, o kterém jsem slyšel poprvé od TurkeyDev.
- Den 16: Část 2 jsem dělal úplně špatně a nakonec jsem musel debugovat svůj kód pomocí jiného funkčního řešení, abych našel a opravil chybu.
- Den 17: Problémem nebylo napsat program, ale pochopit zadání. Když jsem řešil úvodní problém na papír, vůbec mi nevycházel. Až na Redditu jsem našel lepší vysvětlení a pak to šlo.
- Den 18: Zkoušel jsem vlastní řešení, které mi zabralo hodně času. Jednodušší by bylo použít Shunting-yard algoritmus.
- Den 19: Část 2 mi funguje, i když by nejspíše neměla. Více je popsáno v Reddit vlákně.
- Den 21: Tento den bylo vše špatně. Musel jsem nakonec se inspirovat jiným řešením a poté teprve vytvořit své vlastní, až když jsem zjistil, jak se takové problémy řeší.
- Den 23: Opět problém s výkonem. Můj program by běžel asi 1 hodinu, nakonec mi Kobzol poradil použít vlastní LinkedList a HashMapu.
Také plníte Advent of Code, nebo jiné výzvy? Podělte se v komentářích
K tomuto článku již není možné přidávat další komentáře