AoC 2024 - Dzień 5

Dzisiaj padłem ofiarą przedwczesnych założeń, uznałem że końcowym inputem będą rządzić te same prawa co testowym, jak się okazało spowolniło mnie to mocno, ale ostatecznie zadanie i tak udało się rozwiązać. Zadanie - część 1 Dzisiaj musimy posortować zbiór kartek (oznaczonych liczbami), w taki sposób żeby nie zaburzyć zasad kolejności drukowania, zasady zdefiniowane są w ten sposób: 47|53 97|13 97|61 ... Oznacza to że kartka 47 musi być wydrukowana przed 53, a 97 przed 13 i 61. ...

December 5, 2024

AoC 2024 - Dzień 4

Dzisiaj nadal obyło się bez większych problemów, choć zacząłem czuć że używanie AWKa zaczyna mi bardziej przeszkadzać niż pomagać. Zadanie Dzisiaj musimy zliczyć wystąpienia słowa XMAS w dwuwymiarowej tablicy liter. Słowa mogą występować w liniach pionowych, poziomych i ukośnych, w poniższym przykładzie słwo występuje 3 razy. (kropki są dodane dla ułatwienia ale w ostatecznie w inpucie będą tam inne losowe litery). XMAS ..AA .M.M X..X Rozwiązanie Jeśli wypiszemy sobie wszystkie wiersze, kolumny i linie ukośne, mógłbym za pomocą grepa znaleźć wystąpienia słowa XMAS i jego odwrotności SAMX. ...

December 4, 2024

AoC 2024 - Dzień 3

Regex! - to była pierwsza rzecz którą pomyślałem widząc treść dzisiejszego zadania, jako że awk opiera się mocno na wyrażeniach regularnych założyłem że nadal będzie to dobre narzędzie, jednak nie obyło się bez kilku problemów związanych z niedociągnięciami starych narzędzi a także brakiem jednolitego standardu w zapisie wyrażeń regularnych. Zadanie Na wejściu otrzymujemy stringa, będącego kodem źródłowym do języka programowania elfów: xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5)) Język programwania wspiera jedynie funkcję mul(a,b), której wynikiem jest pomnożenie dwóch argumentów. Wynikiem programu jest suma wyników wszystkich wywołań mul. ...

December 3, 2024

AoC 2024 - Dzień 2

Dzisiejsze zadanie nie było moim zdaniem trudniejsze od wczorajszego, dzięki temu że na szybko przejrzałem dokumentację do awk udało mi się napisać rozwiązanie w całkiem elegancki sposób. Opis zadania Dzisiaj otrzymujemy dane w formie macierzy, gdzie każda linijka zawiera listę liczb, będącą raportem elfów który musimy sprawdzić pod kątem bezpieczeństwa. Raport jest uznany za bezpieczny jeśli: jest w całości rosnący lub malejący kolejne wartości różnią się maksymalnie o 3. Przykład ze strony: 7 6 4 2 1 # bezpieczny raport (malejący) 1 2 7 8 9 # niebezpieczny raport (2->7 - skok o 5) 9 7 6 2 1 # niebezpieczny raport (6->2 - skok o 4) 8 6 4 4 1 # niebezpieczny raport (4->4 - ani rosnący ani malejący) Rozwiązanie Jako że każda linijka jest niezależna od siebie, użycie awk wydaje się naturalne, od razu widać że kod będzie miał formę typu: ...

December 2, 2024

Witaj, blogu! Advent of Code 2024 - Dzień 1

Witaj na moim blogu! W tym roku postanowiłem udokumentować swoje zmagania z Advent of Code. O co w tym wszystkim chodzi? Zasady tej zabawy są proste: każdego dnia od 1 do 25 grudnia na stronie pojawia się zadanie, które składa się z dwóch związanych ze sobą części (z czym drugą część widzimy dopiero po rozwiązaniu pierwszej) Zadania możemy rozwiązywać w dowolnym języku programowania (właściwie to dowolnym narzędziu, są ludzie którzy zadania rozwiązują w Excelu, lub macrach vima). Plany na ten rok W tym roku planuję wprowadzić lekką dywersyfikację co do narzędzi których używam, prawie zawsze moje rozwiązania pisałem w Pythonie, gdyż znam go bardzo dobrze. Będę używał go kiedy będzie to wskazane, ale postaram się dobierać narzędzie najbardziej stosowne do danego zadania. Zaczynajmy… ...

December 1, 2024