Blog

Advent des Codes Tag 8: wie einfache Dinge sehr schwer sein können (u2026für manche Menschen)

Edo Poll

Aktualisiert Oktober 21, 2025
7 Minuten

Dies ist das erste Mal, dass ich an der Advent of Code Veranstaltung teilnehme. Das letzte Mal, dass ich ernsthaft programmiert habe, war 2002 (mit einem kurzen, nicht professionellen Intermezzo im Jahr 2012). Außerdem habe ich mich für Python entschieden, und zwar aus dem einzigen Grund, dass ich Python lernen und nächstes Jahr anwenden möchte. An Tag 8 wurde ich mit der Tatsache konfrontiert, dass Menschen neurologische Unterschiede machen und meine neurologischen Eigenheiten mich ganz schön aus der Bahn geworfen haben. Aber auf eine lustige Art und Weise, zumindest jetzt, wenn ich zurückblicke.

FirstTimer™.

Der Beitritt zu ist eigentlich nicht die einzige Premiere in meinem AOC2019-Abenteuer:

  • Ich habe zum ersten Mal an Advent-of-Code teilgenommen.
  • Außerdem habe ich zum ersten Mal in Python programmiert.
  • Mein zweites Mal (seit langer Zeit), dass ich an einem Programmierwettbewerb teilnehme. Das letzte Mal war es die Wikipedia-Seite BAPC (siehe Eintrag von 1994, vor 25 Jahren!)
  • Es ist lange her, dass ich wirklich ernsthaft programmiert habe (1989 - 2002).
  • Ich schreibe zum ersten Mal einen Blogbeitrag für Xebia, was seine eigenen Herausforderungen mit sich bringt, wie ich feststellen musste.

Ich bin the Advent of Code beigetreten, weil mir die Atmosphäre gefallen hat, die ich letztes Jahr in unserem Slack-Kanal gesehen habe. Der einzige Grund, warum ich ursprünglich mitgemacht habe, ist, dass etwa 20 Xebianer aktivteilnehmen und wir eine private Bestenliste für Xebia haben. Ich mag keineWettbewerbe (wirklich nicht!). Sie könnten also denken, dass ich ein Gelegenheitsspieler bin, aber ich erweise mich als ziemlich fanatisch. Ich bin spät dazugekommen, aber ich bin der schnellste Aufsteher in der Rangliste. Ich stehe schon vor 6 Uhr morgens auf und versuche wirklich, durch harte Arbeit eine gute Punktzahl zu erreichen.

Die Rangliste an Tag 8

CasualPlayer™.

Die Tabelle verdanken wir Adé. Falls Sie denken, dass ich in meinem lilafarbenen Kampfjet wirklich abhebe, sollten Sie wissen, dass ich zu spät zur Party gekommen bin und als ClunkyCoder (TM) sehr hart arbeiten muss. Ich sehe nicht, wie ich höher als Platz 10 kommen soll, solange die Xebianer über mir mindestens so konsequent spielen wie ich. Ja, ich habe auch angefangen, Skripte zu erstellen, um das Ranking im Laufe der Zeit zu analysieren.

Und ich muss hart arbeiten, um die Rätsel zu lösen! Mein Programmierstil zeigt, dass ich schon sehr lange nicht mehr dabei bin und erst vor einer Woche mit Python angefangen habe.

HardWorker™.

Im Allgemeinen ist mein Code sehr langatmig und mühsam. Ich schreibe zum Beispiel komplette Schleifen, anstatt map, join, replace, for/with auf Strings und Listen usw. zu verwenden. Außerdem verwende ich keine regulären Ausdrücke, obwohl ich sie sehr gut beherrsche (vor 20 Jahren konnte ich Compiler und Evaluatoren für sie schreiben), aber ich habe nicht genug Zeit, um zu lernen, wie man sie in Python verwendet, während ich das Puzzle mache. Ich verwende verschachtelte Arrays anstelle von Numpy, baue Datenstrukturen mit rekursiven Funktionsaufrufen auf, anstatt networkx zu verwenden, und so weiter.

Aber ich überarbeite meinen Code fast jede Nacht, nachdem ich die Rätsel erfolgreich gelöst habe. Einfach um zu sehen, welche anderen Lösungen eine bessere Leistung und einen (viel) prägnanteren Code haben. Außerdem kann ich mit Sprachfunktionen experimentieren, die ich noch nicht kannte. Ich sammle Hilfsfunktionen in einem Modul, das ich am nächsten Tag wieder verwende, und beginne den Morgen mit dem Kopieren einer Codevorlage in eine neue Codedatei für den Tag. Mit Sprachfunktionen zu experimentieren, während ich versuche, das Rätsel zu lösen, ist für mich zu viel Stress. Also löse ich einige Rätsel vielleicht nachträglich mit regulären Ausdrücken!

Zusammenfassend kann ich sagen, dass ich beigetreten bin, weil:

  • Adé und Jochem haben mich immer wieder gefragt, ob ich mitmachen möchte, danke Adé, danke Jochem!
  • Ich mag die Atmosphäre in der Gruppe auf Slack.
  • Es zwingt mich dazu, viel zu üben, damit ich Python gut anwenden kann, was ich nächstes Jahr für andere (arbeitsbezogene) Zwecke nutzen möchte. Dies ist mein Hauptgrund, bei AOC2019 hart zu arbeiten.
  • In dieser Zeit des Jahres ist es gut für meine allgemeine Stimmung, so früh aus dem Bett zu kommen, 7 Tage die Woche. Das ist der Hauptgrund, warum ich so fanatisch aussehe.

OverReactor™.

Aber heute hat sich sowohl die Stimmung als auch meine Laune verschlechtert! Wir mussten Bilder entschlüsseln, die aus 0en (schwarz), 1en (weiß) und 2en (transparent) bestanden. Das erste Rätsel (Zählen von 0, 1 und 2) habe ich in einem Rutsch gelöst.

Das zweite Rätsel bestand aus der "Dekodierung des Bildes" und der Text lautete: "Welche Nachricht wird nach der Dekodierung Ihres Bildes ausgegeben?" Ich bin mit ASCII-Kunst vertraut und habe das Programmieren hinter einem Ampex 230 Terminal gelernt, also verstand ich den Hinweis: Sehen Sie sich das Bild an! Mein Code zum Erstellen des endgültigen Bildes funktionierte einwandfrei (wie sich viel später herausstellte), aber ich fragte mich, was ich als Antwort posten sollte.

Also habe ich mir das fertige Bild auf genau angesehen:

Das sieht für mich nach nichts aus

Auf ist nichts zu sehen, so sehr ich auch versuche, einen Weihnachtsbaum zu sehen (was nicht stimmen kann, weil jeder Teilnehmer eine andere, einzigartige Antwort hat) oder einen Text in einer Bitmap (viel wahrscheinlicher). Ich habe es nicht gesehen.

Also beschloss ich, das endgültige Bild als eine Reihe von 0en und 1en als meine Antwort zu posten.

Falsche Antwort!?!?!

Was nun?

Ich brauchte mehr als eine halbe Stunde, um meinen Code mit Druckanweisungen zu debuggen, wobei ich keine Fehler fand, und anschließend einen zweiten Decoder zu schreiben, der die gleiche Ausgabe lieferte.

Meine Ausgabe war also richtig, aber meine Antwort war falsch.

Dann postete Lulu in #codechallenges: 'Oh Mann... ich habe eine Weile gebraucht, um herauszufinden, welche "Nachricht" ich in Teil 2 finden soll'

Also zurück zu und einen genauen Blick auf das ausgegebene "Bild" geworfen. Es war immer noch nichts zu sehen, aber jetzt war ichüberzeugt, dass meine Ausgabe richtig war, also musste die Antwort im Bild liegen. Ein einfacher Hack lieferte mir die Antwort:

Das sieht für mich wie Text aus!

ChaosBrain™.

Verflixt! Und dann wurde ich so wütend (ok, ein bisschen unreif, wenn ich jetzt zurückblicke), weil ein Forscher kürzlich eine meiner "Herausforderungen" so formulierte: "Wahrscheinlich ist die Schwelle für die Signalübertragung zwischen den Synapsen in Ihrem Gehirn viel niedriger als bei den meisten anderen Menschen". Für mich ist es zum Beispiel sehr schwer, Captchas zu lesen.

Ich gab also meine Antwort ein (in meinem Fall die Zeichenkette 'PFCAK') und voilá, ich hatte meinen zweiten Stern des Tages verdient. Und ich habe sofort mit der Umstrukturierung begonnen und das X durch einen Block ersetzt:

Endlich: ein klares Bild

Und dieses kleine Stück Code wird in meine Bibliothek zur Wiederverwendung aufgenommen. Ja, ich weiß: turtle, tkinter, ... Aber ich kann nur 674372 ± 42 neue Dinge pro Tag lernen...

InsultAfterInjury™.

Ich habe meiner Frau diesen Artikel gezeigt. Sie hat auf dem ersten Bild mit den 0en und 1en sofort 'PFCAK' gelesen! Allerdings ist die Qualität des Bildes schlechter als die meines aktuellen Terminals.

Ihre Bemerkung: Ich hätte Ihnen heute Morgen eine Stunde sparen können...

Jetzt habe ich wirklich das Gefühl, dass ich unter einem Code ID-10T-Fehler gelitten habe

Advent des Codes 2019 Serie

Verfasst von

Edo Poll

Edo is an IT architect with more than 25 years of experience as a software systems designer, project manager, and software-, application(s)- and enterprise architect. Edo specializes in modernizing application architecture and reliability engineering.

Contact

Let’s discuss how we can support your journey.