Hier meine unbeholfenen Lösungen für den diesjährigen AoC. Proudly erstellt mit viel Frustrationstoleranz und dem Python Grundlagenkurs von Stephan & Christian.
Unfinished business. Nachgeholt am 20.12., weil ich das heutige Puzzle nicht verstehe. Habe zum ersten Mal eine Liste mit einer Funktion sortiert. Danach Multisort angewendet. Wäre im Nachgang wahrscheinlich in einem Schwung gegangen. Egal. Kleiner Kniff: Habe den internen Sortiervorgang der Karten nach ihrem Kartenwert gemacht (sonst ist A ja kleiner als K). Damit ich 13 Karten handlen kann, habe ich die Werte als hex abgespeichert. Teil 2 ging fast ausschließlich mit kosmetischen Änderungen. :-)
Ich war so stolz auf meine Lösung (day8.21.py). Leider wohl etwas rechenintensiv, dass mein MBP M1 auch nach 2h keine Lösung gebracht hat. Ohne Christian wäre das hier ein grauer Stern. Der Punkt geht also eigentlich an ihn. Anmerkung zur Anmerkung: Wenn man die Dauer der Berechnung auf Basis der 6 Schritte hochrechnet, dauert die Rechenzeit 8,8 Jahre :-o
In der ursprünglichen Lösung habe ich die While Schleife mit der Bedingung abgebrochen, dass die Summe aller Ableitungen = 0 sei. Leider gibt es eine Zeile, bei der die Summe der Ableitungen 0 ist, obwohl nicht alle Werte 0 sind z.B. [-14, 7, 7]. Hat mich gut 90 min gekostet, das zu finden. Oh mann...
Teil 1 ist sicherlich das haesslichste Stück Code meiner bisherigen AOC. Aber funktioniert. Teil 2 habe ich nach wilder Recherche den flood-fill Algorithmus entdeckt und angewendet. Hat mir ein paar schöne Visualisierungs-Snippets gebracht. Leider hat die Aufgabenstellung für dieses Vorgehen ein besonderes Schmankerl: Das Tier kann sich zwischen den Rohren durchquetschen. Damit ist das wohl ein #fail... :-( Schade eigentlich.
Gut angefangen heute, Teil 1 ging verhältnismäßig gradlinig und schnell (im Rahmen der begrenzten Möglichkditen). Teil 2 war leider totales Desaster. Habe tolle arrays gebaut und das ging auch richtig gut. Leider war das Ergebnis aber konstant um 10 niedriger als das Beispiel und die vorgehende Lösung. Habe dann 2h gebraucht, um festzustellen, dass der Ansatz der Manhattan Distance nicht mit meinen Werten in der Matrix funktioniert (oder ich habe es einfach nicht zum Funktionieren gebracht). Was für ein Scheiß!
Eigentlich ganz prima gelaufen. Musste den ersten Teil 2 Mal bauen, der erste Ansatz mit numpy arrays war zu kompliziert (für meinen Kopf). Also neu und einfacher gestrickt. Habe auch eine funktionierende Lösung für Teil 2 gebaut, bin dann aber leider an der Milliarde Cycles gescheitert - bzw. an den rund 78h Laufzeit. Leider hat sich meine Funktion auch nicht eingependelt, so dass ich die Schätzmethodik nicht anwenden konnte. Nun gut, in Summe bin ich happy, ein Teilstern für Teil 2 wäre schön gewesen :-)
Gelernt, mit enumerate von Listen umzugehen. Sehr schön. Benutze ich ab jetzt öfters.
Mit np.arrays begonnen. Entstandene Lösung überkomplex... funktioniert schon mit dem Beispiel nicht. Umgebaut auf Listen. Läuft sich immer tot. Am 23.12. nochmal neu erstellt. Quasi von Null angefangen. Beispiel tut. Puzzel läuft sich wieder tot, abbruch bei 100.000 Durchläufen eingebaut. Sieht gut aus. Antwort ist aber "too low" :-( Kontrollmatrix gebaut und händisch geprüft. Keine Bugs ersichtlich. Mein Ergebnis.txt durch ChatGPT zählen lassen. Anzahl korrekt ermittelt. Scheint doch ein Logikfehler drin zu sein. So ein Dreck. Nachtrag: An Tag 25 noch die Abfrage eingebaut, ob nach dem Split der neue Beam schon in der Liste ist (hätte man vorher drauf kommen können). Dann noch die Problematik rausgenommen, dass hierbei auch Achten möglich sind. Finally!!! Teil 2 habe ich dann noch schnell zusammengestümpert. Lief gut. Yezzzz!
Eigentlich ganz smooth gelaufen: die Baggerbewegungen ablaufen und am Ende das ganze mit Flood Fill füllen. Leider kommt der Floodfill an die maximale Anzahl an rekursionen bei der Größe der Matrix. Musste völlig ehrlos ChatGPT zu Hilfe nehmen, um den Floodfill iterativ aufzubauen. Shame shame... Habe mich dann noch an den zweiten Teil gemacht. Allerdings habe ich die Rechnung ohne meinen Speicher gemacht. Erzeugt immer Dead Kernel. Komisch, die Matrix ist lediglich 10787185 x 16142015 groß... Egal. Habe heute ne Menge gelernt.
Not my puzzle today. Tierisch aufwändig über eine Menge Dictionaries gebaut. Das Beispielpuzzle funktioniert und liefert das richtige Ergebis. Das richtige Puzzle enthält aber mehrere Werte für einen Materialtyp, so dass ich den Materialtyp nicht als Schlüssel für das Dictionary verwenden kann. Was für ein Ärger. Habe dann ChatGPT verwendet, um mein Dictionary auf Tuples umzubauen. Jetzt bekomme ich ein anderes Ergebnis raus, diesmal zu hoch... wenn du ein totes Pferd reitest, steig ab. Für Documentationszwecke habe ich die zweite Lösung als day19.2 hochgeladen, auch wenn es sich um Teil 1 handelt. Habe noch eine dritte Version erstellt, diesmal mit eval. Tut super, führt aber leider weiterhin nicht zum richtigen Puzzle Ergebnis.
Not my piece of cake. Punching over my weight. Ich habe nichtmal ein Gefühl dafür, was hier zu tun ist. Habe stattdessen Tag 7 nachgeholt :-)
Ich hatte ja schon befürchtet, die AOC hätte sich jetzt vollständig aus meinem Niveau verabschiedet. Teil 1 ging aber heute. Happy.
Ist mir zu wild. 3D Arrays bilden schaffe ich heute nicht. Habe daher nochmal die offenen Sterne vorn angefangen. Teil 3.2 sollte schnell gehen - gings natürlich erstmal nicht... aber immerhin gelöst. Ganz im Gegenteil zu Teil 5.2. Der erschien mir erst einfach, bis ich mal wieder an der Laufzeit gescheitert bin. Prognose 182h war mir zu lang. Nächstes Jahr sollte ich mir mal das mit dem Caching anschauen.
Nicht mal versucht. Habe gedacht, ich mache lieber "alte, offene" Puzzle. Habe daher Tag 16 gemacht. Hätte ich aber wohl lassen können... no star for me today