Blog

Advent of Code, Tag 24 + 25: Denken Sie über den Tellerrand hinaus

Marcus Martina

Aktualisiert Oktober 21, 2025
9 Minuten

Fehler in der Rekursion

Lassen Sie uns zunächst über Tag 24 sprechen - "Planet der Zwietracht". Dieses Rätsel erinnerte mich an das faszinierende Conway's Game of Life aus dem Jahre 1970.

Im ersten Teil ging es darum, ein sich wiederholendes Muster in der sich ständig ändernden Konstellation von Wanzen zu finden. Jetzt kam mir mein Schleifendetektor, den ich an Tag 12 vorbereitet hatte, um das "N-Körper-Problem" zu lösen, sehr gelegen. Dieser Teil war also schnell gelöst. Lassen Sie uns also mit dem typischen fortgeschritteneren Teil fortfahren.

9 aufeinanderfolgende Ebenen der Rekursion

Im zweiten Teil wurde dem Universum eine weitere Dimension, nämlich die Rekursion, hinzugefügt. Das erinnerte mich an den so genannten Droste-Effekt aus dem Jahr 1904. Tatsächlich haben wir es in diesem Fall mit einer Variante zu tun, bei der die Rekursion sowohl nach innen als auch nach außen angewendet wird. Es ist vergleichbar mit dem unendlichen Vergrößern und dem unendlichen Verkleinern. Um dieses Rätsel zu lösen, musste jedoch nur eine begrenzte Anzahl von Ebenen ausgewertet werden, da es zu jedem Zeitpunkt nur eine endliche Anzahl von Fehlern gibt.

Schwierigkeiten und Illusionen

Lassen Sie uns nun über Tag 25 sprechen - "Kryostase". Das letzte Rätsel dieses Jahres hat gezeigt, dass der Stachel im Schwanz für mich steckt.

Vielleicht hat es etwas damit zu tun, dass ich im Dezember jeden Tag um 5:30 Uhr aufstehe (und um 5:45 Uhr Kaffee trinke), was nicht gerade meine übliche Aufstehzeit ist, vor allem nicht an den kürzesten Tagen des Jahres. Das ist der Aspekt, vor dem ich mich im Vorfeld am meisten gefürchtet hatte, aber während des Spiels wurde er zu einem natürlichen Teil meines Modus Operandi, ebenso wie der Versuch, das Rätsel vor dem Morgengrauen zu lösen, was mir normalerweise gelang, aber nicht immer.

Aufgrund der gesellschaftlichen Aktivitäten an Heiligabend hatte ich nur 3 Stunden Schlaf, was auch nicht gerade hilfreich war.

Ich konnte die Schwierigkeit des nächsten Rätsels immer vorhersagen. Zumindest dachte ich das. Dieses Jahr stand neben meinem Schreibtisch ein echter Adventskalender mit kleinen kosmetischen Geschenken, deren Türchen sich nur öffnen ließen, wenn ich das Rätsel des Tages löste. Irgendwie hatte ich mir eingeredet, dass die Größe und Form der Türchen ein Hinweis auf die Schwierigkeit des entsprechenden Rätsels sei. Am Ende stellte sich dies als eine Illusion heraus. Auf verschiedene Weise habe ich die Schwierigkeit jedes Rätsels anhand der globalen Statistiken und meiner persönlichen Statistiken berechnet. Ich habe diese Ergebnisse endlos mit den Abmessungen der Türen verglichen, aber ich habe keine konsistente Korrelation gefunden.

Wie auch immer, es gab nur 24 Türen, also hatte ich keine Ahnung, was mich beim letzten Rätsel erwarten würde.

Das Vermächtnis von Alan Turing

Der Computer IntCode™️ muss zum letzten Mal in Betrieb genommen werden. Ich selbst habe ihn als Turing-Maschine bezeichnet, was eine etwas falsche Bezeichnung ist. Diese Maschine hat ein endliches Band, sollte also eigentlich eine Endlosmaschine genannt werden. Außerdem hat sie einen Kopf, der sich an zufällige Positionen bewegen kann. Ich finde, das ist ein brillanter Fund. Es ist erstaunlich, wie der Schöpfer von Advent of Code, Eric Wastl, es schafft, jedes Jahr weitere Neuheiten hervorzuzaubern. Obwohl es verlockend ist, habe ich nicht versucht, das Eingabeband automatisch zu dekompilieren und in einer Programmiersprache der 3.

Es ist eine Dimension, die den Rätseln ein wenig Magie verleiht. Diese Kategorie von Rätseln ist besonders interessant, weil sie einige zusätzliche Nachforschungen erfordern. Es ist nicht von vornherein klar, was Sie erwartet, so dass Sie etwas nachforschen müssen, um herauszufinden, was tatsächlich vor sich geht. Es ist arbeitsintensiver, während andere Rätsel hauptsächlich vom reinen Denken abhängen. In jedem Fall ist eine Menge kreatives Denken erforderlich, um alle Probleme zu lösen.

Verloren im euklidischen Raum

Um das letzte Rätsel zu lösen, muss ein Raumschiff zunächst im Detail erkundet werden, wofür mehrere Ansätze denkbar sind. Zunächst habe ich versucht, alle Räume auf einem normalen zweidimensionalen Raster abzubilden. Das führte zu ziemlich verwirrenden Ergebnissen und aus unklaren Gründen beschloss ich, eine dritte Dimension hinzuzufügen, um sozusagen in einem dreidimensionalen euklidischen Raum zu verschiedenen Etagen zu reisen. Dies erwies sich als hoffnungslos kompliziert und erfolglos und ich musste mehrere "Hacks" anwenden, um das Rätsel auf diese Weise zu lösen, aber es war ziemlich schwierig und eindeutig nicht der effizienteste Weg.

Da ich mit meinem ersten Ansatz nicht besonders zufrieden war, begann ich, über Alternativen nachzudenken. Es musste einfach eine viel einfachere Lösung geben.

Auf der einen Seite gibt es einen abstrakteren Ansatz, ohne überhaupt zu versuchen, die Räume auf einer Karte zu visualisieren. Die Anwendung des Konzepts der entgegengesetzten Windrichtungen 'Norden und Süden' und 'Osten und Westen' reicht aus und es ist überhaupt nicht nötig, sich um die Position des Droiden in einem imaginären Raster zu kümmern. Es geht nur darum, eine intelligente Methode anzuwenden, um durch das Schiff zu laufen und alle Räume zu entdecken.

Endlich eine gute Visualisierung

Andererseits konnte ich den eher visuell orientierten Ansatz immer noch nicht aufgeben. Ich kämpfte eine Weile damit, was ich mit dem Raum machen sollte, der je nach Richtung, in die ich ging, unterschiedliche Namen und Türen hatte. Es war klar, dass ich über den Tellerrand hinausschauen musste. Dann erinnerte ich mich plötzlich an die rekursive Struktur, die ich am Vortag verwendet hatte.

I had this typical Eureka moment. Most participants will recognize this type of experience.

Ich musste einfach den hartnäckigen Glauben aufgeben, dass das Raster perfekt gleichmäßig sein sollte. Irgendwie war ich furchtbar voreingenommen und nahm einfach an, dass jeder Raum die gleiche Form und Größe hat. Schließlich gelang es mir, herauszufinden, wie das Innere des Weihnachtsmannschiffs aussehen könnte.

Gewichte auf der Waage

Wenn Sie bis zum "Druckempfindlichen Boden" gekommen sind, nachdem Sie einige Gegenstände eingesammelt und verschiedene Fallen überwunden haben, sagt eine laute Roboterstimme, dass ich zurück zum "Sicherheitskontrollpunkt" geschleudert werde.

Alert! Droids on this ship are lighter|heavier than the detected value!

Die Herausforderung besteht nun darin, herauszufinden, welche Kombination von Gegenständen ein Gesamtgewicht hat, das genau dem richtigen Wert entspricht. Nach einigen Versuchen sagt schließlich eine laute Roboterstimme, dass ich jetzt das Cockpit betreten darf.

Analysis complete! You may proceed. Oh, hello! You should be able to get in by typing ***** on the keypad at the main airlock.

Teilweise bestellt

Obwohl es möglich ist, eine (minimale) Lösung für die tatsächlichen Gewichte der verschiedenen Gegenstände zu finden, die in den verschiedenen Räumen zu finden sind, ist dies nicht notwendig, um das Rätsel zu lösen.

Beachten Sie auch, dass die Menge aller Teilmengen eine so genannte teilweise geordnete Menge definiert. Dies bedeutet, dass bei einer Sammlung von Gegenständen, die als zu schwer oder zu leicht eingestuft werden, nicht alle Unter- und Obermengen bewertet werden müssen. Ein binärer Suchalgorithmus kann in diesem Fall jedoch nicht angewendet werden, da die Beziehung zwischen Unter- und Obermenge keine lineare Reihenfolge definiert.

Zeit zum Rekalibrieren

Nachdem ich das richtige Passwort eingegeben hatte, musste ich nur noch "den Warp-Antrieb neu ausrichten", um den 50. Jetzt kann ich alle Ostereier sehen und habe Zeit, meinen zirkadianen Rhythmus neu zu kalibrieren.

Ich habe es also wieder bis zum Ende geschafft. Letztes Jahr habe ich zum ersten Mal teilgenommen und wusste nicht wirklich, was mich erwartet. Dieses Jahr war ich viel besser vorbereitet und profitierte sehr von der Erfahrung und der Schnelligkeit, die ich letztes Jahr gewonnen hatte, sowie von einigen Bibliotheksfunktionen, die ich zur Lösung von Standardproblemen erstellt habe. So muss ich zum Beispiel nicht mehr den Dijkstra-Algorithmus auf der Stelle ausschreiben.

In diesem Jahr erforderten einige Rätsel mathematische Kenntnisse, vor allem Tag 22 - "Slam Shuffle", das ohne die Beherrschung der modularen Arithmetik nicht gelöst werden konnte. Das stellte sich für einige Teilnehmer als knifflig heraus, aber ich war von dieser Art von Rätsel eigentlich angenehm überrascht. Ein weiteres, besonders interessantes Rätsel war Tag 18 - "Viele-Welten-Interpretation". Es erfordert nicht nur ein ziemlich hohes Maß an abstraktem Denken. Es ist auch das Rätsel, bei dem die meisten Optimierungen erforderlich waren, um es mit einer Rechenzeit von weniger als 10 Sekunden zu lösen.

Xebia's Bestenliste, Advent of Code 2019

Obwohl es mir nicht gelungen ist, Punkte in der globalen Rangliste zu sammeln und der Kampf um den Sieg bei Xebia nicht so spannend war wie im letzten Jahr, bin ich dennoch stolz, den Wettbewerb an der Spitze unserer privaten Rangliste zu beenden. Ich muss einfach sagen, dass ich wieder viel Spaß hatte (und manchmal auch ein bisschen Frust) und ich freue mich schon auf die Ausgabe im nächsten Jahr.

Advent des Codes 2019 Serie

Verfasst von

Marcus Martina

Contact

Let’s discuss how we can support your journey.