Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:java:aoc:aco2023:day11:start [11.12.2023 10:05] – angelegt Marco Kuemmel | faecher:informatik:oberstufe:java:aoc:aco2023:day11:start [11.12.2023 16:34] (aktuell) – [Lösungshinweise Teil 2] Marco Kuemmel | ||
---|---|---|---|
Zeile 82: | Zeile 82: | ||
</ | </ | ||
++++ | ++++ | ||
+ | |||
+ | ===== Lösungshinweise Teil 2 ===== | ||
+ | * Nur minimale Änderungen sind nötig gegenüber der Lösung aus Teil 1. | ||
+ | * Zuvor wurde jede leere Zeile/ | ||
+ | |||
+ | ++++ Lösungsvorschlag | | ||
+ | <code java> | ||
+ | public long partTwo() { | ||
+ | // Sammle alle Spalten, die nur Punkte enthalten | ||
+ | ArrayList< | ||
+ | for (int x = 0; x < inputLines.get(0).length(); | ||
+ | boolean columnEmpty = true; | ||
+ | for (int y = 0; y < inputLines.size(); | ||
+ | if (inputLines.get(y).charAt(x) != ' | ||
+ | columnEmpty = false; | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | if (columnEmpty) { | ||
+ | emptyColumns.add(x + emptyColumns.size() * 999999); | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | ArrayList< | ||
+ | | ||
+ | long y = 0; | ||
+ | for (String line: inputLines) { | ||
+ | char[] lineAsChars = line.toCharArray(); | ||
+ | | ||
+ | // prüfe, ob zeile nur ' | ||
+ | boolean zeileLeer = true; | ||
+ | for (char c: lineAsChars) { | ||
+ | if (c != ' | ||
+ | zeileLeer = false; | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | if (zeileLeer) { | ||
+ | y += 999999; | ||
+ | } | ||
+ | | ||
+ | int x = 0; | ||
+ | for (char c: lineAsChars) { | ||
+ | if (emptyColumns.contains(x)) { | ||
+ | x += 999999; | ||
+ | } | ||
+ | else if (c == '#' | ||
+ | galaxies.add(new long[]{x, y}); | ||
+ | } | ||
+ | x++; | ||
+ | } | ||
+ | | ||
+ | y++; | ||
+ | } | ||
+ | | ||
+ | long distances = 0; | ||
+ | | ||
+ | int skip = 1; | ||
+ | for (long[] g1: galaxies) { | ||
+ | for (int i = skip; i < galaxies.size(); | ||
+ | long[] g2 = galaxies.get(i); | ||
+ | distances += Math.abs(g1[0] - g2[0]) + Math.abs(g1[1] - g2[1]); | ||
+ | } | ||
+ | skip++; | ||
+ | } | ||
+ | | ||
+ | return distances; | ||
+ | } | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | |||
</ | </ | ||
</ | </ |