Podsumowanie Advent of Code 2019

Dzisiaj, po rozwiązaniu ostatniego zadania, z sukcesem zakończyłem tegoroczną (a zarazem moją pierwszą) edycję Advent of Code.

Congratulations! You've finished every puzzle in Advent of Code 2019! I hope you had as much fun solving them as I had making them for you. I'd love to hear about your adventure; you can get in touch with me via contact info on my website or through Twitter.

Zatem przyszła pora na kilka zdań podsumowania.

Zdecydowałem się na rozwiązywanie zadań w języku C++ i wszystkie programy wrzucać do adwentowego repozytorium, a tutaj na blogu zamieszczać krótki opis rozwiązania. Niestety z braku czasu, nie wszystkie kody i notki są już dostępne publicznie, mam nadzieję, że wkrótce się to zmieni.

Chociaż nie zależało mi na rankingu, a tym bardziej na czasie, to jednak starałem się na bieżąco rozwiązywać zadania każdego dnia. Poniżej prywatne statystyki z mojego udziału w tej zabawie.

      --------Part 1--------   --------Part 2--------
Day       Time   Rank  Score       Time   Rank  Score            Links
  1   09:27:36  13009      0   10:04:36  12098      0    task  blog-post  code
  2   04:25:37   9057      0   04:55:06   8018      0    task  blog-post  code
  3   08:28:18  10459      0   09:37:10   9129      0    task  blog-post  code
  4   03:40:35   9484      0   05:11:04   9844      0    task  blog-post  code
  5   05:45:18   6654      0   06:00:07   5555      0    task  blog-post  code
  6   04:36:16   6839      0   05:16:10   6218      0    task  blog-post  code
  7   06:17:16   6297      0   18:18:19   7933      0    task  blog-post  code
  8   05:40:18   7208      0   14:26:58  11325      0    task  blog-post  code
  9   03:30:29   3298      0   03:31:07   3238      0    task  blog-post  code
 10   06:02:33   4702      0   14:31:20   5345      0    task  blog-post  code
 11   03:55:00   3464      0   03:58:01   3189      0    task  blog-post  code
 12   04:16:57   4313      0   07:35:29   2995      0    task  blog-post  code
 13   03:44:04   4170      0   04:33:42   2676      0    task  blog-post  code
 14   13:31:24   3956      0   14:26:02   3475      0    task  blog-post  code
 15   14:45:11   3868      0   15:14:00   3583      0    task  blog-post  code
 16   04:29:15   3093      0   09:22:11   1791      0    task  blog-post  code
 17   04:01:35   2812      0   07:07:55   1729      0    task  blog-post  code
 18   07:27:02    785      0   09:17:02    605      0    task  blog-post  code
 19   03:44:16   2239      0   05:15:43   1686      0    task  blog-post  code
 20   07:05:01   1666      0   09:22:04   1257      0    task  blog-post  code
 21   06:10:02   1644      0   07:23:36   1441      0    task  blog-post  code
 22   06:33:50   2093      0   15:24:56   1166      0    task  blog-post  code
 23   04:03:02   1294      0   04:53:23   1263      0    task  blog-post  code
 24   19:16:14   3359      0       >24h   2968      0    task  blog-post  code
 25       >24h   2954      0       >24h   1977      0    task  blog-post  code

Jak przewidywałem, rozwiązanie dwóch ostatnich zadań z okolic świąt z wiadomych przyczyn musiałem zostawić na okres poświąteczny. Chociaż miałem nadzieję, że w tych dniach uda mi się znaleźć chociaż chwilkę i spróbować się z nimi zmierzyć. Ale po wigilijnej pierwszej części do której zasiadłem gdzieś w nocy uznałem że to jednak nie ma sensu i trzeba się wyspać ;)

Zadania w istocie nie były takie trudne na jakie wyglądały przy pierwszym spojrzeniu. W większości udawało mi się je rozwiązywać prostymi, naiwnymi algorytmami (brute-force). Czasami jednak trzeba było znaleźć jakiś sposób na optymalizację, bo naiwne obliczenia i/lub iteracje mogły potrwać dni i lata. Przydawała się ogólna wiedza z algorytmów, grafów, matematyki i innych dziedzin, której mi oczywiście trochę brakowało. Nigdy zbytnio nie pociągały mnie te tematy, a tym bardziej w normalnej, codziennej pracy deweloperskiej rzadko bywają potrzebne.

Dlatego jestem z siebie niezmiernie zadowolony, że jako osobnik bez większego doświadczenia i styczności z algorytmiką i problematyką zawartą w zadaniach udało mi się je wszystkie rozwiązać. Nie ukrywam, że niektóre wymagały specyficznej (specjalistycznej) wiedzy (i doświadczenia) i w kilku takich przypadkach skorzystałem z małych podpowiedzi. Nie omieszkałem się nie wspomnieć o tym fakcie w opisach rozwiązań, gdzie miało to miejsce.

Zabawa z kodem była fajna, udało mi się trochę odświeżyć stare i nowe idiomy C++, modern C++ i wreszcie bez skrepowania wykorzystać niektóre nie tak nowe już elementy tego języka (głównie C++17), bo jak już wiadomo (wspominałem w notatce inicjującej), ostatnio w mojej pracy głównie zajmowałem się analizowaniem, debugowaniem i inżynierią wsteczną w dużo większym stopniu niż samym programowaniem. A tak udało mi się na krótko wrócić do korzeni i dobrej zabawy ;)

Na początku myślałem, że góra 1-3 godziny mi zajmie ogarniecie zadania, wszakże niektórzy (starzy wyjadacze takich eventów) w kilka minut rozwalali problem, ale nie zawsze było tak kolorowo. Zdarzało się ze zadanie usidliło mnie prawie na większość dnia ;)

Dlatego nie jestem pewny czy w następnym wydaniu wezmę udział. Jednak wymaga to trochę czasu do poświecenia. Szczególnie, gdy nie ma się większego doświadczenia w takich zadaniach i szybko nie kojarzy problemu z potencjalnym sposobem, metodą lub algorytmem przydatnym w jego rozwiązaniu. Nie wspominając o późniejszym wyczyszczeniu kodu i napisaniu tych kilkunastu zdań w notce.

No i po adwencie... i świętach...
Jak mi jeszcze wpadną do głowy jakieś przemyślenia z AoC to dorzucę do wpisu :)

[Mam nadzieje ze wkrótce pojawia się na blogu zaległe wpisy z rozwiązaniami i ogarnę już finalnie cały kod w repo.]

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *