Advent of Code 2019 — Tag 2

Categories Allgemein

Dritter Tag, zweiter Blogpost. Ich muss den Rückstand doch irgendwie aufholen. Mit dem zweiten Türchen hatte ich tatsächlich wesentlich mehr Probleme als mit dem ersten. Hinterher war die Aufgabe dann aber relativ klar, aber ich hatte anfangs tatsächlich einige Probleme, überhaupt erstmal dahinterzusteigen. Und so zweifelte ich bisweilen mir selbst.

Beim zweiten Tag waren die Eingabedaten eine lange Liste von Zahlen, wobei manche Zahlen für Operationen standen. 1 beispielsweise entspricht einer Addition, der Opcode 99 hingegen für einen Abbruch des Programms. Andere wiederum waren Operanden, mit denen dann gerechnet wurde. Im Prinzip ging es darum, einen kleinen Interpreter für den sog. Intcode zu schreiben. Und um Register und Pointer. Mir war relativ lange nicht klar, welche Zahlen ich schlussendlich wie benutzen musste. Pointer und ich stehen seit jeher auf Kriegsfuss und genau darum fiel mir der zweite Tag doch etwas schwerer als der erste. Irgendwann am Nachmittag machte es dann aber Klick und der Drops war gelutscht.

Dafür habe ich einen neuen Weg gefunden, den Inhalt einer Datei mit Ruby in einen String einzulesen. Neben File.open kann ich jetzt IO.read nutzen, um den Inhalt einer Datei in einem String einzulesen. Hätte ich am ersten Tag ein bisschen länger gegooglet, hätte ich das wahrscheinlich auch schon früher herausgefunden.

Ein weiterer Unterschied zwischen dem ersten und dem zweiten Tag war ausserdem, dass ich angefangen habe, mir vorher Gedanken zu machen, wie ich die Aufgabe löse. So richtig mit Stift und Papier, wie Max und ich das in CST38 zum Thema Neue Projekte besprochen hatten. Nichts desto trotz hetzte ich an beiden Tagen ziemlich. Ich nehme also auch mit, dass ich mir ab sofort mehr Zeit lassen möchte, um die Aufgaben zu lösen. Auch wenn wir ein Leader*innenboard haben, ist es kein Wettbewerb.

Die zweite Teilaufgabe fiel mir dann tatsächlich wieder leichter. Ich räumte meinen Code zwischendrin ein bisschen auf. Das fühlte sich nicht nur gut an, sondern war bisweilen bitter nötig und erleichterte mir die zweite Aufgabe erheblich. Für die Lösung hingegen verwendete ich zwei verschachtelte for-Loops und ich bin damit nicht alleine. Ich frage mich seitdem aber, ob es dafür nicht eine bessere Lösung gegeben hätte. Zwei Schleifen fühlen sich so einfach an. Wie hast du die zweite Aufgabe gelöst?

Schön fand ich neben der Geschichte ausserdem die vielen Links, die in der Aufgabe zu finden waren. Zum Magic Smoke, beispielsweise. Oder zum Transkript der ersten Mondlandung.