Podsumowanie Advent of Code 2019

tech • 790 słów • 4 minuty czytania

Dzisiaj, po rozwiązaniu ostatniego zadania, z sukcesem zakończyłem tegoroczną (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ń krótkiego 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 przyjętego sposobu rozwiązania wraz z jakimiś uwagami. Niestety z braku czasu, nie wszystkie kody i notki są w tej chwili 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 post code
  2   04:25:37   9057      0   04:55:06   8018      0   task post code
  3   08:28:18  10459      0   09:37:10   9129      0   task post code
  4   03:40:35   9484      0   05:11:04   9844      0   task post code
  5   05:45:18   6654      0   06:00:07   5555      0   task post code
  6   04:36:16   6839      0   05:16:10   6218      0   task post code
  7   06:17:16   6297      0   18:18:19   7933      0   task post code
  8   05:40:18   7208      0   14:26:58  11325      0   task post code
  9   03:30:29   3298      0   03:31:07   3238      0   task post code
 10   06:02:33   4702      0   14:31:20   5345      0   task post code
 11   03:55:00   3464      0   03:58:01   3189      0   task post code
 12   04:16:57   4313      0   07:35:29   2995      0   task post code
 13   03:44:04   4170      0   04:33:42   2676      0   task post code
 14   13:31:24   3956      0   14:26:02   3475      0   task post code
 15   14:45:11   3868      0   15:14:00   3583      0   task post code
 16   04:29:15   3093      0   09:22:11   1791      0   task post code
 17   04:01:35   2812      0   07:07:55   1729      0   task post code
 18   07:27:02    785      0   09:17:02    605      0   task post code
 19   03:44:16   2239      0   05:15:43   1686      0   task post code
 20   07:05:01   1666      0   09:22:04   1257      0   task post code
 21   06:10:02   1644      0   07:23:36   1441      0   task post code
 22   06:33:50   2093      0   15:24:56   1166      0   task post code
 23   04:03:02   1294      0   04:53:23   1263      0   task post code
 24   19:16:14   3359      0       >24h   2968      0   task post code
 25       >24h   2954      0       >24h   1977      0   task 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 znajdę chwilkę i spróbuję 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łyby 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 takie tematy mnie nie pociągały, 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 innych. Nie omieszkałem się, jeśli miało to miejsce, nie wspomnieć o tym fakcie w opisach rozwiązań.

Udało mi się trochę odświeżyć wiedzę, idiomy C++, modern C++ i wreszcie bez skrępowania 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 chociaż na krótko udało mi się wrócić do korzeni i dobrej zabawy z kodem ;)

Na początku myślałem, że góra 1-3 godziny zajmie mi ogarnięcie zadania. Szczególnie widząc jak niektórzy (starzy wyjadacze takich eventów) w kilka minut rozwalali problem. Jednak nie zawsze było tak kolorowo. Zdarzało się, że zadanie potrafiło usidlić mnie prawie na większość dnia…

Z tego też powodu nie jestem pewny czy w następnym wydaniu wezmę udział. Jednak trzeba poświecić na to trochę wolnego czasu. Zwłaszcza, gdy nie posiada się 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.

Ale nie ma co narzekać, bo cała zabawa była fajna :)

Komentarze (0)

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/