https://www.gravatar.com/avatar/306d401b2a8c0efe0996fec60e0c90aa?s=240&d=mp

My coding journey

Disclaimer: it's just for fun

Dzień 20 - poszukiwanie potworów

To był jeden z najtrudnieszych dni. Składanie zdjęć satelitarnych z fragmentów to świetna zabawa, pod warunkiem, że się ten proces już wcześniej przećwiczyło. W zadaniu Jurassic Jigsaw można się było wykazać spostrzegawczością.

Fragment pełnego "zdjęcia satelitarnego"

Najpierw popełniłam błąd w definicjach funcji przekształcających współrzędne punktów obrazu w transformacjach (obrotach i odbiciach względem osi).

Poniżej funkcja transformująca frament (tile) w obrocie (wartość 0-3 oznaczająca odpowiednio obrót o 0, 90, 180, 270 stopni) i odbiciu (wartość 0-2 oznaczająca odpowiednio: brak odbicia, odbicie horyzonralne

Dzień 13 - chińskie twierdzenie o resztach

Zadanie Shuttle Search rozłożyło mnie na łopatki. Popełniłam dwa błędy:

  1. Najpierw długi czas rozwiązywałam całkiem inne zadanie (pozycję autobusu na liście wejściowej traktowałam jako różnicę czasu do poprzedniego zamiast to pierwszego autobusu). Wniosek na przyszłość: czytaj dokładnie treść zadania.
  2. Póżniej zauważyłam, że moje naiwne przesuwanie iteratorów działa tylko dla danych testowych - dla danych właściwych zwisa na długie minuty (dłużej nie czekałam...). Widocznie istnieje jakiś lepszy algorytm niż brute force... Wniosek na przyszłość: przejrzyj algorytmy przydatne w poprzednich latach.

Wtedy zauważyłam, że numery autobusów są liczbami pierwszymi...

Dzień 10 - sortowanie topologiczne

Co za zbieg okoliczności. Wczoraj przygotowałam wpis na temat sortowania topologicznego (zauważyłam nowy moduł w Pythonie 3.9), a dzisiejsze zadanie właśnie takego przesortowania wierzchołków wymagało.

Przyznam się, że zrozumiałam to dopiero wtedy, gdy moje naiwne rozwiązanie, które sprawdziło się dla danych testowych, zupełnie zwisnęło na właściwych danych. Czekam, czekam, a tu nic.

W moim grafie, reprezentowanym jako dict, z wierzchołkiem (nominalną wartością zasilania przejściówki) związana była lista tych wierzchołków/przejściówek, do których można dany wierzchołek wpiąć. Adapter w fotelu nie może być nigdzie wpięty, więc ma pustą listę poprzedników. Sam stanowi poprzednik (a więc znajduje się na liście) pierwszego adaptera z mojego bagażu, który ma pasujący joltage. Adapter w sprzęcie nie będzie niczyim poprzednikiem (nie będzie się znajdował na liście poprzedników żadnego adaptera).

Advent of code

Kilka dni temu rozpoczął się Advent of code. W tym roku, podobnie jak w zeszłym, wzięłam na warsztat Pythona. Odkrywam ten język właściwie na nowo - po wielu latach (i wielu nowych wydaniach) zaszło w nim wiele zmian. Oto kilka perełek, które odkryłam w trakcie rozwiązywania tegorocznych zadań: