Advent of Code 2019 — Tag 3

Categories Allgemein

Uff. Jetzt habe ich das also auch geschafft. Gestern morgen schon las ich auf Twitter, dass das dritte Türchen unerwartet kompliziert sei und so nahm ich mir vor, sie mir erstmal anzuschauen, mir ein paar Gedanken zu machen — und dann erstmal zu warten. Vielleicht ein bisschen zu grübeln, aber mehr nicht.

Beim dritten Türchen ging es um Leitungen. Und auf einer solchen Stand ich ziemlich lang. Man musste mithilfe der Manhattan-Distanz Schnittpunkte berechnen. Um die Manhattan-Distanz ging es auch letztes Jahr schon mal und das war dann der Tag, an dem ich ausgestiegen bin. Daran wurde ich natürlich erinnert, als ich „Manhattan-Distanz“ las. Gute Voraussetzungen also.

Insgesamt brauchte ich mehrere Iterationen und einige Fehlversuche, bis ich irgendwann mal die Lösungen berechnet hatte. Aber dabei habe ich wieder ein paar Sachen gelernt. Dass es Sets auch in Ruby gibt. Und wie man die erforderlichen Operatoren für eigene Klassen überschreiben kann. Das lernte ich aber auf die harte Tour, weil ich mal wieder zu faul und/oder arrogant war, meine Nase in die Dokumentation zum Set zu stecken. Da stand nämlich relativ weit oben:

Equality of elements is determined according to Object#eql? and Object#hash

Hatte ich natürlich lange Zeit nicht und so tat ich mich echt schwer. Ich knabberte und knabberte und probierte und versuchte und scheiterte und scheiterte. Das war bisweilen ein bisschen frustrierend, aber ich biss mich durch. Und irgendwann hatte ich dann mehr oder weniger zufällig die Lösung und fing an, meinen Code aufzuräumen. Das scheint so ein Muster zu werden: Anstatt dass ich irgendwie ernsthaft Ruby lerne, hacke ich irgendwie eine Lösung, zufällig in Ruby, zusammen, errate die Antwort — und räume hinterher alles wieder auf, mache es schön und effizient. Das ist fast schon Test Driven Development, ein bisschen chaotisch und unstrukturiert, aber immerhin!!!!elf

Ausserdem ist mir aufgefallen, dass ich oft zu kompliziert denke und entsprechend komplizierten, ineffizienten Code produziere. Häufig ist das aber unnötig und so stehe ich mir manchmal dann selbst im Weg, weiß es dann aber auch nicht besser und stolpere dann so durch die Gegend, bis ich die Lösung gefunden erraten habe. Einfach nur, weil ich mich für besonderes clever halte und eben besonders clevere Lösungen bauen will. Und dabei halt auch nicht genug nachdenke. Baut keine cleveren Lösungen. Oder denkt mehr nach.

Beim zweiten Rätsel hatte ich relativ schnell ein Konzept, das mit meiner neuen, besseren, effizienteren, cleveren Lösung basierend auf Sets nicht so wirklich gut funktioniert hat. Und so wechselte ich von vim zu BBEdit, kopierte kurzerhand den Code, ersetzte Sets durch Arrays und frickelte das irgendwie zusammen. Alles in allem war das mal wieder echt keine Glanzleistung, aber diese Glanzleistung gibt es immerhin auf Github. Vielleicht doch was mit Holz? Auf jeden Fall danke fürs lesen!

Wie ist es dir am dritten Tag ergangen? Fiel es dir leichter?


Wenn du auch am Advent of Code teilnimmst, dann komm doch gerne in unser Leader*innenboard. Und wenn dich einfach nur meine Lösungen interessieren, dann kannst du auch gerne den RSS-Feed von diesem Blog abonnieren. Und wenn du einfach etwas sagen möchtest oder es noch besser als ich weißt, dann freue ich mich auf deinen Kommentar hier im Blog, deinen Tweet oder deine Email 🙂