Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:java:aoc:aco2023:day18:start [21.12.2023 16:27] – Marco Kuemmel | faecher:informatik:oberstufe:java:aoc:aco2023:day18:start [21.12.2023 16:56] (aktuell) – Marco Kuemmel | ||
---|---|---|---|
Zeile 17: | Zeile 17: | ||
++++ Lösungsvorschlag | | ++++ Lösungsvorschlag | | ||
<code java> | <code java> | ||
+ | private int breite; | ||
+ | private int hoehe; | ||
+ | |||
+ | private ArrayList< | ||
+ | Deque< | ||
+ | private char[][] map; | ||
+ | |||
public int partOne() { | public int partOne() { | ||
trenchList = new ArrayList(); | trenchList = new ArrayList(); | ||
Zeile 169: | Zeile 176: | ||
71 | 71 | ||
</ | </ | ||
- | Die Fläche in der einen Spalte ist also: '' | + | Die Fläche in der einen Spalte ist also: '' |
+ | ++++ Lösungsvorschlag Teil 2 | | ||
+ | <code java> | ||
+ | private ArrayList< | ||
+ | |||
+ | public long partTwo() { | ||
+ | ArrayList< | ||
+ | spalten = new ArrayList(); | ||
+ | int breite = 0; | ||
+ | |||
+ | for (String line: inputLines) { | ||
+ | String hex = line.split("#" | ||
+ | int steps = Integer.parseInt(hex.substring(0, | ||
+ | // zähle alle schritte nach rechts | ||
+ | if (hex.substring(5).equals(" | ||
+ | breite += steps; | ||
+ | } | ||
+ | anweisungen.add(steps + hex.substring(5)); | ||
+ | } | ||
+ | |||
+ | ArrayList< | ||
+ | for (int i = 0; i < breite; i++) { | ||
+ | spalten.add(new ArrayList< | ||
+ | } | ||
+ | |||
+ | int x = 0; | ||
+ | int y = 0; | ||
+ | for (String anweisung: anweisungen) { | ||
+ | // rechts | ||
+ | if (anweisung.charAt(anweisung.length()-1) == ' | ||
+ | // 0 am Ende bedeutet: ein oberes Ende vom Pool innerhalb der Spalte | ||
+ | spalten.get(x).add(y + "" | ||
+ | int steps = Integer.parseInt(anweisung.substring(0, | ||
+ | for (int i = 0; i < steps; i++) { | ||
+ | x = (x+1) % breite; | ||
+ | spalten.get(x).add(y + "" | ||
+ | } | ||
+ | } | ||
+ | // unten | ||
+ | else if (anweisung.charAt(anweisung.length()-1) == ' | ||
+ | spalten.get(x).add(y + "" | ||
+ | int steps = Integer.parseInt(anweisung.substring(0, | ||
+ | y += steps; | ||
+ | spalten.get(x).add(y + "" | ||
+ | } | ||
+ | // links | ||
+ | else if (anweisung.charAt(anweisung.length()-1) == ' | ||
+ | // 1 am Ende bedeutet: ein unteres Ende vom Pool innerhalb der Spalte | ||
+ | |||
+ | spalten.get(x).add(y + "" | ||
+ | int steps = Integer.parseInt(anweisung.substring(0, | ||
+ | for (int i = 0; i < steps; i++) { | ||
+ | x--; | ||
+ | if (x < 0) { | ||
+ | x = breite - 1; | ||
+ | } | ||
+ | spalten.get(x).add(y + "" | ||
+ | } | ||
+ | } | ||
+ | // oben | ||
+ | else if (anweisung.charAt(anweisung.length()-1) == ' | ||
+ | spalten.get(x).add(y + "" | ||
+ | int steps = Integer.parseInt(anweisung.substring(0, | ||
+ | y -= steps; | ||
+ | spalten.get(x).add(y + "" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | long summe = 0; | ||
+ | // Gehe über jede Spalte | ||
+ | for (ArrayList< | ||
+ | |||
+ | // entferne alle vollständigen dopplungen (wandelt es in ein " | ||
+ | Set< | ||
+ | spalte.clear(); | ||
+ | spalte.addAll(set); | ||
+ | |||
+ | // sortiere | ||
+ | spalte = sortArrayList(spalte); | ||
+ | |||
+ | // prüfe nun, ob direkte Nachfolger in allen Zeichen exklusive dem letzten übereinstimmen -> y-koordinate gleichzeitig oberes und unteres Ende -> kann entfernt werden. | ||
+ | for (int i = 0; i < spalte.size() - 1; i++) { | ||
+ | if (spalte.get(i).substring(0, | ||
+ | spalte.remove(i); | ||
+ | spalte.remove(i); | ||
+ | i--; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | for (int i = 0; i < spalte.size(); | ||
+ | summe += Integer.parseInt(spalte.get(i+1).substring(0, | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return summe; | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Selection-Sort, | ||
+ | */ | ||
+ | private ArrayList< | ||
+ | for (int i = 0; i < input.size(); | ||
+ | int min = i; | ||
+ | for (int j = i; j < input.size(); | ||
+ | if (Integer.parseInt(input.get(j).substring(0, | ||
+ | min = j; | ||
+ | } | ||
+ | } | ||
+ | String temp = input.get(min); | ||
+ | input.set(min, | ||
+ | input.set(i, | ||
+ | } | ||
+ | |||
+ | return input; | ||
+ | } | ||
+ | </ | ||
+ | ++++ | ||
</ | </ | ||
</ | </ |