Advent of Code 2020
• tech • 631 słów • 3 minuty czytania
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 ;)
Komentarze (0)