W tym roku postanowiłem, że podejmę wyzwanie rozwiązania wszystkich zadań z Advent of Code 2020. Nigdy wcześniej nie miałem do czynienia z takim „kalendarzem adwentowym” czy też serią codziennych wyzwań, stąd moja determinacja. W chwili, gdy piszę ten artykuł jestem na 14 dniu i muszę przyznać, że świetnie mi idzie! Udało się zdobyć komplet gwiazdek i to bez pomocy z zewnątrz (no może poza jedną podpowiedzią 😉). No dobrze, ale do rzeczy, czy w ogóle jest Advent of Code?

Czym jest Advent of Code?

Każdego roku w grudniu Eric Wastl tworzy 25 dwuczęściowych zagadek, które są ze sobą powiązane zabawną historią. Najprawdopodobniej ta seria trwa od 2015 roku. Rozwiązując zadania zbliżamy się do głównego celu jakim jest uratowanie Świąt Bożego Narodzenia. Nie trzeba wysyłać swojego rozwiązania w postaci algorytmu. Wystarczy, że nasz program przetworzy dostarczone dane i wyprodukuje wynik, który przekopiujemy w przeznaczone do tego miejsce. Oczywiście w prosty sposób można oszukiwać poprzez kopiowanie wyników znalezionych w Internecie, ale nie o to przecież w tym chodzi.

Zadania wymagają od nas znajomości dowolnego języka programowania oraz logicznego myślenia. Na samym początku są one dosyć łatwe, ale z czasem stają się coraz bardziej podchwytliwe. Większość łamigłówek da się rozwiązać przy użyciu mapy oraz przeszukiwania grafów, jednak przy trudniejszych problemach trzeba poświęcić trochę czasu na znalezienie odpowiedniego algorytmu w Internecie. Advent of Code może służyć do przeprowadzenia rekrutacji na stanowisko programistyczne, jako konkurs na najszybsze rozwiązanie problemu czy też praca na zajęcia akademickie. Myślę, jednak że głównie postał z myślą, aby zapewnić rozrywkę na długie, zimowe wieczory.

Przykładowe zadanie z Advent of Code 2020

Jak już wspomniałem, na samym początku mamy wstęp fabularny wprowadzający nas w klimat zadania. Często są to humorystyczne opowieści zawierające wytyczne co do rozwiązania. Następnie prezentowane są przykładowe dane, na których wykonywane są wyżej opisane operacje, aby zobrazować jak nasz program ma działać. Oczywiście na końcu widnieje wynik, który możemy sobie porównać z naszym rezultatem. Przykładowe dane mogą zawierać np. 5 linijek, lecz główne polecenie może mieć ich setki. Dopiero po rozwiązaniu pierwszego podpunktu uzyskujemy dostęp do treści drugiego zadania. Zwykle polega ono na rozbudowaniu naszego poprzedniego algorytmu bądź też kilku zmianach w programie.

Advent of Code 2020 - zadanie 7
Polecam grafiki @GaryJGrady nawiązujące do Advent of Code (zadanie 7 z 2020r.)

Oczywiście za każdy rozwiązany podpunkt uzyskujemy gwiazdkę, których możemy zdobyć aż 50! Każde kolejne zadanie jest publikowane o 6 nad ranem, więc spokojnie można się za nie zabrać na dobry początek dnia. Niestety nie wiem czy możemy zaczynać kolejne zadanie jeśli mamy niedokończone wcześniejsze, bo jak na razie udało mi się usiąść każdego dnia do rozwiązania 🏆. Jednak myślę, że bez problemu możemy robić zadania w dowolnej kolejności o ile oczywiście znajdą się już na stronie.

Moje aktualne postępy w Advent of Code 2020

Na moment pisania artykułu jest 14 dzień adwentu i moja mapa zadań prezentuje się następująco.

Moja plansza w Advent of Code 2020
Stan mojej planszy na 14.12.2020!

Muszę przyznać, że moje rozwiązania nie są zbytnio eleganckie czy też biją rekordy prędkości. Przyjąłem sobie za punkt honoru, aby rozwiązać wszystkie 25 zagadek poświęcając na to jak najmniej czasu. Zdarza się więc, że czasem pójdę na skróty zamiast szukać najlepszego algorytmu. Raz musiałem skorzystać z pomocy na Reddit, ponieważ moje rozwiązanie brute force dałoby mi w końcu rezultat, ale raczej na święta Wielkanocne! Z tego powodu musiałem uzyskać podpowiedź, doczytać o danym algorytmie i go zaimplementować w programie. Nie będę zdradzał co to dokładnie było, żeby nie spoilerować 😉.

Podsumowanie

Wkręciłem się w Advent of Code i wszystko na to wskazuje, że wytrwam w postanowieniu, aby go ukończyć w tym roku. Oczywiście swoje rozwiązania wrzucam na mojego GitHuba jeśli chciałbyś bądź chciałabyś zaczerpnąć inspiracji z moich rozwiązań. Nie są może perfekcyjne, ale “done is better than perfect”. Podziel się komentarzem jak Tobie idzie w ratowaniu Świąt razem z Advent of Code czy też może uczestniczysz w podobnych inicjatywach?