Advent of Code 2020

Rozpoczął się grudzień, wkrótce rozpocznie się adwent, a po nim święta…
A tymczasem wystartowała już tegoroczna edycja adwentowych łamigłówek programistycznych - Advent of Code.

Postanowiłem znów wziąć udział w konkursie, pomimo, że po ostatniej edycji (mojej pierwszej) AoC 2019 byłem trochę sceptycznie nastawiony na ewentualny udział w kolejnych latach. Tak się jednak złożyło, że w tym roku też mam trochę luzu w grudniu, więc dobrze będzie go skonsumować na jakieś ciekawe algorytmiczne i programistyczne wyzwania.

Zastanawiam się nad wyborem języka, czy może tym razem zamiast mojego ulubionego C++ nie wybrać coś innego. Taki programistyczny konkurs to dobra okazja, albo do podszlifowania swoich umiejętności w jakimś rzadziej przez mnie używanym języku, albo nauki i poznania wręcz nowego języka. Do wyboru mam kilka propozycji…

  • C++
    W C++ koduję na co dzień i to w nim rozwiązałem zeszłoroczną edycję AoC, więc w tym roku odpada. Choć w tym języku na pewno pisałoby mi się płynnie i naturalnie, przez co mógłbym skupić całą swoją uwagę na problemie, a nie na języku, jego konstrukcjach i idiomach ;)

  • Perl 7
    Perl zawsze był mi bliski i szkoda, że poza jakimiś skryptami rzadko go używam. Odkąd niedawno wydano Perl 7, który w istocie kontynuuje dorobek Perla 5.32 z domyślnie włączonymi nowoczesnymi elementami i rozszerzeniami, język ten rozpoczyna swój nowy rajd w propagowaniu nowoczesnych praktyk programowania (Modern Perl). Dobrze byłoby sobie przypomnieć i bliżej poznać ten nowoczesny styl Perla!

  • Raku
    Poznanie Perla 6 było moją nigdy nie spełnioną mrzonką… ups teraz to już Raku… prawie całkiem nowy język!

  • JavaScript
    JavaScript jest prosty, fajny i się rozwija. Co jakiś czas pojawiają się zmiany i nowości w języku, na które mimowolnie natrafiam w jakimś kodzie. Fajnie byłoby poznać i przetestować te nowe elementy i konstrukcje. Od czasu odkrycia ignorowanego przeze mnie Node-a chętnie widziałbym go w roli dodatkowego, obok Perla, skryptowego języka do tworzenia narzędzi i prostych skryptów odpalanych wprost z konsoli…

  • Rust
    Od dawna słyszę o tym “nowoczesnym” języku jako potencjalnej alternatywie dla C i C++ w świecie kompilowanym do natywnego kodu. Ostatnio jest wielki “hype” i ciśnienie na Rusta, więc pomyślałem, że warto się mu przyjrzeć bliżej i sprawdzić szeroko wychwalanego borrow checkera i inne “udogodnienia” z kategorii safety. A jak lepiej poznać nowy język niż przez pisanie programów i algorytmów!?

Zdecydowałem się na Rusta. To jest dobra pora na poznanie i wypróbowanie tego języka i jego ekosystemu. Może się to okazać ciekawą przygodą. A wygląda na to, że mimo podobieństw z C++, trochę się różni nie tylko składnią co i podejściem do rozwiazywania problemów oraz sposobem myślenia, co może być na początku trochę nieintuicyjne.

Co do innego podejścia to może kiedyś w przyszłości spróbuję funkcyjnego programowania ;)

Jednym z moich narzuconych wymagań jest zakaz korzystania z zewnętrznych bibliotek (crate w terminologii Rusta). Dopuszczam tylko standardową bibliotekę. Wiem, że to może być momentami bardzo upierdliwe, chociaż przy AoC w C++ nie dawało to zbytnio o sobie znać. Przy moim założeniu poznania języka i jego specyficznych zachowań wydaje się to być dobrym posunięciem zmuszającym do bliskiej styczności z wszystkimi elementami i mechanizmami języka.

Moje programy w Rust, tak jak w C++, napisane specjalnie w celu rozwiązania adwentowych zadań będą brzydkie i nie często będą podążały za ogólnie przyjętymi standardami i stylami. Zapewne też nie zawsze będą zgodne z techniką i podejściem stricte narzucanym czy propagowanym przez twórców i społeczność skupioną wokół Rusta. Z tego względu niekoniecznie mogą nadawać się do powielania szczególnie w jakimś produkcyjnym kodzie.

Tak jak poprzednio, będę udostępniał swoje rozwiązania. Tutaj na blogu powinien pojawiać się jakiś krótki opis rozwiązania, a w adwentowym repo kod źródłowy. Standardowo publicznie może to pojawiać się z małym opóźnieniem z braku czasu i tym podobnych wymówek.

Zapewne również jak w poprzedniej edycji, rozwiązanie zadań z dni około-/świątecznych mogę przesunąć na czas poświąteczny, aby chociaż w święta nie siedzieć przy kompie ;)

Dodaj komentarz

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