Advent of Code 2019 — Tag 9
Uff. Dieser Blogpost fällt mir tatsächlich ein bisschen schwer. Er ist quasi ein Eingeständnis, dass ich den neunten Tag noch immer nicht gelöst habe und so noch ein paar Tage Verspätung gesammelt habe. Aber vielleicht ist er gerade deswegen umso wichtiger? Fakt ist: Ich habe den neunten Tag bisher nicht gelöst. Und halt entgegen meiner Ankündigung auch keinen entsprechenden Blogpost verfasst. Bis jetzt.
Man könnte fast sagen, dass ich an Tag 9 nicht so sehr gescheitert bin, wie an mir selbst. Es ging mal wieder um den berühmt-berüchtigten Intcode-Interpreter. Ich wollte alles besser machen und Kleinigkeiten kosteten mich dann gleich mal wieder viel Zeit. Beispielsweise beim Refactoring.
Bevor ich mich der eigentlichen Aufgabe widmen wollte, überführte den Code in eine Klasse und benannte ein paar Variablen. Aus i
wurde current_index
. Nur übersah ich dabei zwei Stellen und auf einmal liefen die Sprunganweisungen nicht mehr: Der Code stürztea b. Gut, dass ich vorher ein paar Tests geschrieben und ein Log eingeführt hatte. Ich wusste also, dass irgendwas nicht funktionierte. Aber was, das war mir lange Zeit nicht klar.
Und so verbrachte ich einige Zugfahrten, Stunden und Debug-Sessions damit, die Variablenvorkommen zu finden, umzubenennen und irgendwann lief dann alles! Ich konnte also endlich mit der eigentlichen Aufgabe beginnen. Ich las die Aufgabenstellung allerdings nicht richtig, machte mir Gedanken, schrieb Code — und die Tests wollten einfach nicht grün werden. Nach ein paar mehr Zugfahrten ging es dann — weil ich mich mittlerweile kenne, las ich die Aufgabenstellung einfach noch ein paar Mal und mir fiel dabei auf, dass der Speicherbereich auf einmal viel größer sein musste. Mit 2 Millionen Nullen liefen immerhin die Tests und ich war endlich bereit, den Interpreter mit dem BOOST
-Code zu füttern. Läuft nicht bei mir.
Und das ist jetzt der Punkt, an dem ich seit ein paar Tagen nicht weiterkomme. Alles Debuggen mit ruby -r debug
half bisher nichts, weil der Code tut genau das, was er eigentlich tun soll. Bleibt genau eine Möglichkeit: Select is broken! Den entsprechenden Code gibt es — natürlich — wieder als Pull Request auf Github und ich freue mich über Kommentare, Ideen und Hinweise auf meine Denkfehler.
Natürlich hatte ich mir auch die Aufgabe für den zehnten, elften und 12. Tag angeschaut. Aber daran habe ich mich dann gar nicht erst getraut.