Advent of Code 2019
• tech • 573 słowa • 3 minuty czytania
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.
Trochę dobrej 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 oraz algorytmice. Szczególnie, że ostatnio w mojej codziennej pracy więcej zajmowało analizowanie, debugowanie i reversowanie, niż pisanie kodu. Dlatego może okaże się to pomocne w przygotowaniach do potencjalnego 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 udzielenia odpowiedzi. 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 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 to wydarzenie - 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ć zadania. Ale żeby dostać poprawny wynik za pierwszym razem to fajnie byłoby sobie pisać jakieś testy. Będę starał się to praktykować, a drobne przykłady opisane w zadaniach mogą się do tego celu nadać idealnie. Na pewno są pomocne przy zrozumieniu zadania, bo czasem z samej treści ciężko się domyślić WTF!
Także tego, moje programiki służą jedynie do rozwiązania zadań, dlatego mogą być ogólnie brzydkie i bardzo nie zalecane do replikacji w innych projektach. Mogą też zdarzyć się 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 pominięta. Dlatego proszę o nienarzekanie i nie czepianie się tych kwestii. Ale wszelkie konstruktywne uwagi są 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 wykonania i optymalnego programu. Możliwości jest wiele…
Zastanawiam się nad potencjalnym opisywaniem tutaj na blogu bojów z zadaniami. Bo skoro do celu prowadzi wiele dróg to zawsze można przedstawić jakieś ciekawe alternatywne rozwiązania, tricki, 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ół świąt 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 podnosi się trochę w górę, więc przynajmniej warto spróbować ;)
Komentarze (0)