Blog

Advent of Code Tag 7: Teilen Sie Ihren Arbeitsablauf

Serge Beaumont

Aktualisiert Oktober 21, 2025
5 Minuten

Da wir wieder in den Fluss der Dinge kommen, stelle ich fest, dass es einen Rhythmus gibt, an ein Rätsel heranzugehen, der genauso dazu gehört, ein Rätsel sauber und effizient zu lösen wie das Rätsel selbst. Hier ist mein Arbeitsablauf, wie ist Ihrer?

Ich beginne damit, zwei Dateien zu erstellen: eine .py-Datei mit der unten gezeigten Vorlage (AoC-2019-7.py) und eine leere Textdatei für das Rätsel (AoC-2019-input-7.txt). Dann beginne ich mit dem Lesen des Rätsels. Wenn ich zum Link für die Rätseleingabe komme, kann ich die Daten einfach mit Strg+A Strg+V in die Eingabedatei übertragen.

#!/usr/bin/env python3
"""Solution for Advent of Code challenge 2019 - Day X"""
__author__ = "Serge Beaumont"
__date__ = "December 2019"
def load_input(day):
    with open(f"AoC-2019-input-{day}.txt") as infile:
        return [[int(y) for y in x.split(',')] for x in infile.readlines()]
def do(data):
    return False
if __name__ == '__main__':
    # Run tests
    # assert do(XXX) == YYY
    # Load data
    data = load_input(0)
    print(data)
    # Solve puzzle
    result = do(data)
    # Output
    print(f"Part 1: {result}")

Als allererstes müssen Sie sicherstellen, dass die Daten korrekt geladen werden. Die Anweisung print(data) in der .py-Datei dient genau diesem Zweck: Ich neige dazu, sie später zu entfernen. Je nach Bedarf muss ich eventuell Zeilen aufteilen, Leerzeichen entfernen und Daten in Tupel aufteilen. Die Vorlage oben zeigt eine der aufwändigeren Versionen: alle Zeilen einlesen, entlang von Komma-Grenzen aufteilen und alle Zahlen in Ints umwandeln. Wenn ich es mir recht überlege, war dieses Jahr nicht so regex-lastig wie andere Jahre - bis jetzt...

Der nächste Schritt besteht darin, alle Beispiele in assert do(example input) == expected output Zeilen zu kopieren. Es gibt zwei Dinge, die für mich bei meinem Testansatz wichtig sind:

  • dass alle Beispiele vor dem eigentlichen Rätsel ausgeführt werden: Wenn alle Tests laufen, wird das eigentliche Rätsel in der Regel sauber ausgeführt, was eine große Zeitersparnis bedeutet, wenn die Bearbeitung länger dauert, und
  • mit einer do() Funktion, so dass das Puzzle entweder von einem Test aus oder mit den eigentlichen Puzzle-Daten transparent aufgerufen werden kann.

Wenn ich eine Lösung auf der Rätselseite ausprobiere und sie falsch ist, erhalten Sie eine Seite mit einigen Informationen, manchmal sogar wenn die Antwort zu hoch oder zu niedrig war. Ich füge diese Informationen als Assert-Anweisungen am Ende der Datei ein.

Wenn ich Teil 1 richtig gelöst habe, lese ich zuerst Teil 2, bevor ich entscheide, ob ich die Lösung von Teil 2 in den Code von Teil 1 integriere oder ob ich eine separate .py-Datei verwende.

Dieses Jahr habe ich sogar den kompletten IntCode-Computer in eine eigene Bibliothek ausgelagert. Ich habe schon einige Leute gesehen, die sich darüber beschwert haben, dass der Computer drei Tage lang in der Bibliothek steht, aber ich bin gespannt, was Eric The Puzzle Master Wastl in petto hat. Was mir an den drei Tagen mit dem IntCode-Computer gefällt, ist, dass es mir erlaubt bzw. mich gezwungen hat, den Code zu überarbeiten, was eine interessante Abwechslung zu dem Wegwerfcode ist, den man schreiben kann, wenn er nur für einen einzigen Tag ist...

Wenn es noch etwas gibt, das in meinem Ansatz konsistent ist, dann ist es mein Timing von Dusche und Frühstück. Ich lese das Rätsel absichtlich vor der Dusche und dem Frühstück, probiere eine Lösung aus und zwinge mich dann zu meiner täglichen Routine. Ich habe festgestellt, dass es mir sehr hilft, wenn ich eine Weile über das Rätsel nachdenke, während ich nicht auf den Bildschirm starre. Ich glaube, 80 % meiner Durchbrüche gelingen mir während dieser "Auszeit".

Das ist mein Ansatz. Was ist Ihrer?

Advent of Code 2019 Series

Verfasst von

Serge Beaumont

Contact

Let’s discuss how we can support your journey.