Advent of Code 2019

Dałem się przekonać do tegorocznej edycji Adevnt of Code i podjąłem wyzwanie! Zapowiada się ciekawa programistyczno-algorytmiczna zabawa. Mimo, że do tej pory jakoś omijałem takie inicjatywy, to w tym roku trafiłem na tweeta Pawła Łukasika i sobie pomyślałem "czemu nie...". Zamiast tradycyjnego adwentowego kalendarza z czekoladą - dwa zadania na każdy dzień adwentu aż do świąt ;)

Advent of Code is an Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like. People use them as a speed contest, interview prep, company training, university coursework, practice problems, or to challenge each other.

W sumie trochę zabawy z kodem nie zaszkodzi. A że czas najwyższy poszukać nowego kontraktu, zlecenia, czy innego źródła dochodu, to takie zadania może pomogą mi przypomnieć sobie jakieś ciekawe triki i idiomy w programowaniu i algorytmice. Szczególnie, że ostatnio więcej w mojej codziennej pracy zajmowało analizowanie, debugowanie i reversowanie, niż pisanie kodu. Liczę, że w jakimś stopniu może to pomóc mi się przygotować na potencjalny interview, gdzie na pewno jakieś gówniane i nikomu niepotrzebne (nie wykorzystywane na co dzień) zadania, algorytmy i pytania padną...

W zabawie liczy się sam fakt rozwiązania zadania i czas. Na czas nie będę konkurował. Liczę, że wygospodaruję tą 1+ godzinkę dziennie wieczorem lub rano. Akurat zadania pojawiają się online o UTC-5 co akurat jest dobrym czasem, bo w polskiej strefie o poranku będzie można na Dzień Dobry pobudzić się zagadką :)

Kody źródłowe nie są wymagane, trzeba tylko na podstawie otrzymanych danych wejściowych podać wynik. Ja jednak zdecydowałem się założyć specjalne repo na ten event - advent-of-code i dzielić się swoimi rozwiązaniami. Kody mogą być brzydkie i paskudne, gdyż głównie będę się starał jak najprościej rozwiązywać dane zadanie. Ale żeby dostać poprawny wynik za pierwszym razem to fajnie byłoby sobie pisać jakieś testy, co będę starał się praktykować. Szczególnie że drobne przykłady opisane są w zadaniach i okazują się bardzo pomocne, bo czasem z treści ciężko się domyślić WTF!

No więc moje programiki służące jedynie jako narzędzie do rozwiązania zadań mogą być ogólnie brzydkie i bardzo nie zalecane do replikacji w innych projektach. Mogą się zdarzyć jakieś hard-kodowane elementy w kodzie, a obsługa błędów, sytuacji wyjątkowych lub jakiś walidacji zapewne będzie szczątkowa, znikoma lub w ogóle jej nie będzie. Dlatego proszę o nienarzekanie i nie czepianie się tych kwestii. Ale wszelkie konstruktywne uwagi mile widziane ;)

Postanowiłem, że będę głównie babrał się w C++. Czasami może (dodatkowo) skrobnę coś w Perlu, bo niektóre zadania mogą być idealne do golfowania w tym języku. Zadania wydają się być też dobrą okazją do poznania nowego języka. Mógłbym się przełamać i popróbować w Pythonie, ale jakoś ciągle nie mogę go strawić... Ale kto wie, może pojawi się więcej rozwiązań w innych językach. Zawsze też mogę wybrać podejście jak najszybszego rozwiązania, albo wręcz odwrotnie - najszybszego i optymalnego programu. Możliwości jest wiele...

Dlatego zastanawiam się nad potencjalnym opisywaniem tutaj na blogu bojów z zadaniami. Bo skoro dróg do celu prowadzi wiele, to zawsze można przedstawić jakieś ciekawe alternatywne rozwiązania, tricki lub fragmenty kodu, niekoniecznie stricte związane z zadaniem, ale wykorzystane w kodzie programu rozwiązującego zadanie.

Mam nadzieję, że uda mi się rozwiązać wszystkie zadania, chociaż tymi wokół świat może zajmę się z małym opóźnieniem. Zachęcam wszystkich do spróbowania swoich sił w tej zabawie. Ponoć pierwsze zadania są proste, a z każdym dniem poprzeczka trochę podnosi się w górę, wiec przynajmniej warto spróbować ;)

Dodaj komentarz

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