faecher:informatik:oberstufe:java:aoc:aco2023:day18:start

Dies ist eine alte Version des Dokuments!


Tag 18 - Lavaduct Lagoon

Ich habe für Teil 1 und Teil 2 verschiedene Lösungswege genutzt.
  • Finde zunächst heraus, wie groß der auszugrabende Bereich in die Breite und die Höhe sein muss.
  • Erstelle ein char[][]-Array mit der passenden Größe.
  • Trage den Input-Befehlen folgend ein 't' für "Trench" (Graben) in das char[][]-Array an jeder nötigen Stelle ein. Dadurch erhältst du den kompletten geschlossenen Verlauf des äußeren Grabens.
  • Abschließend füllst du von jedem äußeren Pixel an den Kanten des char[][]-Arrays per Breitensuche die leeren Felder mit einem 'o' für "outside". Danach ist jedes leere Feld ein inneres Feld. Die Summe aller Lava-Pool-Felder ist die summe aller leeren Felder und aller 't'-Felder.

Lösungsvorschlag

  • Für Teil 2 werden die Zahlen zu groß, sodass die Lösung aus Teil 1 nicht mehr ausreicht. Die Hauptvorgehensweise ist folgende:

  • Gehe der Reihe nach die Befehle entlang. Trage aber keine Kreuze in eine 2-dimensionale Matrix, sondern betrachte nur die einzelnen Spalten (x-Werte). Führe eine ArrayList, um pro Spalte mehrere y-Werte eintragen zu können, an denen "etwas passiert".:
    • Wenn du gerade nach rechts läufst, dann markierst du, dass du mit dem aktuellen y-Wert das obere Ende des Lava-Pools.
    • Beim nach links laufen markierst du mit dem y-Wert das untere Ende des Lava-Pools.
    • Wenn du nach unten läufst, dann ist dein oberer Startpunkt, das obere Ende des Lava-Pools. Als weiteren y-Wert trägst du ein, wie viele y-Werte du weiter nach unten zu gehen hast (das ist dann ein mögliches unteres Ende des Pools).
    • Beim nach oben laufen ist der untere Startpunkt ein unteres Ende des Pools, und beim "Ziel" des nach-oben-laufens ist das obere Ende des Pools.
  • Beispiel für das rechte Bild (Annahme, dass die Erstellung des Pfades im Uhrzeigersinn geschah): in der Spalte für x=5 stehen folgende y-Werte drin:
0 (wegen "rechts")
0 (wegen oberes ende von "oben")
  • faecher/informatik/oberstufe/java/aoc/aco2023/day18/start.1703175520.txt.gz
  • Zuletzt geändert: 21.12.2023 16:18
  • von Marco Kuemmel