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

Tag 11 - Cosmic Expansion

  • Du musst die Eingabedaten NICHT als zweidimensionales Array speichern und eine komplizierte Pfadsuche starten. Es genügt, wenn du für jede Galaxie (Raute) die korrekten (expandierten) Koordinaten speicherst und anschließend in einer verschachtelten Schleife einfach sämtliche Distanzen zwischen allen Koordinaten berechnest.
  • Gehe zunächst die gesamte Eingabedatei Spalte für Spalte durch und speichere dir, welche Spalten leer sind. Speichere dir dabei direkt die expandierten x-Koordinaten. Bsp.: Wenn die Spalte 1 und 3 leer sind (bei 0 beginnen zu zählen), dann speicherst du dir die 1 (welche selbst 2 Spalten Platz benötigt!) und die 4, weil nach jeder vorkommenden Koordinate alle nachfolgenden 1 nach "rechts" rücken.
  • Anschließend gehst du die Eingabedaten Zeile für Zeile durch und speicherst dir die Koordinaten alle Galaxien. Zum Speichern einer Galaxie bietet sich ein zweistelliges int-Array an. Um alle Galaxien zu speichern, eine ArrayList<int[]>.
  • Speichere dir pro Zeile die y-Koordinate und pro Character die x-Koordinate.
  • Wenn eine Zeile ganz leer ist (keine Raute enthält), dann wird y um eins erhöht.
  • Speichere dir bei jeder Raute die Koordinaten als int-Array und füge sie der ArrayList hinzu.
  • Iteriere abschließend in zwei verschachtelten Schleifen über die Kombination alle Koordinaten und rechne den Abstand der x-Werte + Abstand der y-Werte zur Gesamtsumme dazu.

Lösungsvorschlag

  • Nur minimale Änderungen sind nötig gegenüber der Lösung aus Teil 1.
  • Zuvor wurde jede leere Zeile/Spalte verdoppelt (+1). Jetzt soll jede leere Zeile/Spalte durch eine Million leere Zeilen/Spalten ersetzt werden. Vorsicht an dieser Stelle: die Rechnung ist daher nun nicht +1000000', sondern +999999. Diese Änderung muss an allen drei Stellen durchgeführt werden, wo es direkt um die Abstände der leeren Zeilen/Spalten geht.

Lösungsvorschlag

  • faecher/informatik/oberstufe/java/aoc/aco2023/day11/start.txt
  • Zuletzt geändert: 11.12.2023 16:34
  • von Marco Kuemmel