Advent of Code 2019 — Tag 6
Wochenende! Und somit höchste Zeit für den Blogpost zur Aufgabe vom Nikolaus. Zwar hinke ich mittlerweile ein bisschen hinterher, aber ich bin noch dabei, beim Advent of Code 2019.
Die sechste Aufgabe war wieder nett, auch wenn ich immer noch am zweiten Teil knabbere. Es geht darum, dass Objekte um Objekte kreisen, die um Objekte kreisen, die wiederum kreisen dann um Objekte, die um Objekte und so weiter. Bei der ersten Teilaufgabe war gefragt, wieviele Objekte direkt oder indirekt — also über andere Objekte — um Objekte kreisen. Der Input war eine Beschreibung, welche Objekte wie kreisen.
Wie ich das lösen könnte, war mir auch deswegen relativ schnell klar, weil die Macher*innen vom Advent of Code das Problem mit einem sehr anschauliches Schaubild erklärten:
Ich habe also einen Baum aufgebaut gezählt, wieviele Kanten ich für jedes Objekt ablaufen muss. Auch wenn meine letzte Vorlesung zu diesem Thema ein paar Jahre her ist, ging es dann doch irgendwie, zumindest für die erste Teilaufgabe. Ich brauchte aber hier tatsächlich zwei Anläufe, beim ersten Mal habe ich nicht den ganzen Baum aufgebaut, bevor ich mit dem zählten anfing. Dieser Fehler fiel mir heute morgen beim Frühstück auf und dann war die Sache doch erstaunlich schnell gefixt. Auch für den sechsten Tag gibt es wieder einen entsprechenden Pull Request. Aber weil ich eben noch nicht fertig bin, ist das noch ein Entwurf.
Apropos Pull Request: Für den fünften Tag habe ich noch jede Menge Feedback bekommen und ein paar Sachen gelernt. Vielen Dank dafür! Einige Sachen habe ich für den sechsten Tag direkt einfliessen lassen. Beispielsweise, dass return
in Ruby gar nicht nötig ist. Der Rückgabewert ist der letzte Wert einer Methode oder Funktion, der ausgewertet wird. Clever! Ich habe bei so etwas nur immer ein bisschen Angst, unleserlichen Code zu schreiben, deshalb tendiere ich tatsächlich dazu, lieber zu viel Code zu schreiben. Aber dass ich das return
weglassen kann, daran habe ich mich dann doch sehr schnell gewöhnt.
Ausserdem habe ich gelernt, dass eine Methode nicht korrekt sein muss, nur, weil ein paar Tests sagen, dass alles in Ordnung ist. Es tat gut, da mal wieder dran erinnert zu werden.
Ich schaue jetzt noch kurz in den siebten Tag rein, der scheint auch wieder knackig zu sein. Uff. Manchmal frage ich mich, für welche Menschen der Advent of Code gemacht ist. Diese Menschen haben scheinbar viel Zeit. Oder ich bin einfach nicht so gut wie ihr.
Wie immer gilt: Vielen herzlichen Dank fürs Lesen und natürlich das Feedback, das ihr mir bisher an die Pull Requests geschickt habt. Das motiviert ungemein! Lasst auch mal gerne von euch hören, wie ihr den Advent of Code bisher so findet. Vielleicht in einem Kommentar oder einem Gastbeitrag hier im Blog?