Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:java:aoc:aoc2024:day02:start [02.12.2024 08:03] – angelegt Marco Kuemmel | faecher:informatik:oberstufe:java:aoc:aoc2024:day02:start [04.01.2025 14:39] (aktuell) – [Teil 2] Marco Kuemmel | ||
---|---|---|---|
Zeile 17: | Zeile 17: | ||
++++ Lösungsvorschlag | | ++++ Lösungsvorschlag | | ||
<code java> | <code java> | ||
- | public | + | private |
for (int i = 1; i < levels.length; | for (int i = 1; i < levels.length; | ||
if (levels[i] <= levels[i-1]) {// Gleichheit ist ein Ausschlusskriterium! | if (levels[i] <= levels[i-1]) {// Gleichheit ist ein Ausschlusskriterium! | ||
Zeile 26: | Zeile 26: | ||
} | } | ||
- | public | + | private |
for (int i = 1; i < levels.length; | for (int i = 1; i < levels.length; | ||
if (levels[i] >= levels[i-1]) {// Gleichheit ist ein Ausschlusskriterium! | if (levels[i] >= levels[i-1]) {// Gleichheit ist ein Ausschlusskriterium! | ||
Zeile 35: | Zeile 35: | ||
} | } | ||
- | public | + | private |
for (int i = 1; i < levels.length; | for (int i = 1; i < levels.length; | ||
if (Math.abs(levels[i-1] - levels[i]) < 1 || Math.abs(levels[i-1] - levels[i]) > 3) { | if (Math.abs(levels[i-1] - levels[i]) < 1 || Math.abs(levels[i-1] - levels[i]) > 3) { | ||
Zeile 69: | Zeile 69: | ||
</ | </ | ||
++++ | ++++ | ||
+ | |||
+ | ===== Teil 2 ===== | ||
+ | |||
+ | Für Teil 2 muss nur eine Kleinigkeit hinzugefügt werden! | ||
+ | |||
+ | ++++ Tipps zur Vorgehensweise | | ||
+ | * Wir müssen der Reihe nach prüfen, ob ein Report safe wird, wenn die erste, zweite, dritte, ... Zahl fehlt. | ||
+ | * Erstelle dazu eine neue Methode, die ein int-Array als ersten Parameter entgegennimmt und einen index als zweiten Parameter. Der zweite Parameter gibt an, welcher Index des Arrays entfernt werden soll. Die Methode muss also ein neues int-Array erstellen, das den übergebenen Index NICHT mehr enthält. Dieses neue Array soll dann zurückgegeben werden. | ||
+ | * Erweitere den Code aus Teil 1 so, dass du eine Schleife um die Prüfung auf Korrektheit baust: Du prüfst nun nie das " | ||
+ | * Sobald einer der " | ||
+ | ++++ | ||
+ | |||
+ | ++++ Lösungsvorschlag | | ||
+ | <code java> | ||
+ | private int[] reduceArray(int[] levels, int index) { | ||
+ | // das neue int-Array muss eins kürzer sein | ||
+ | int[] rLevels = new int[levels.length-1]; | ||
+ | | ||
+ | // zum Speichern der aktuellen Einfügeposition im neuen Array | ||
+ | int pos = 0; | ||
+ | for (int i = 0; i < levels.length; | ||
+ | if (i != index) { | ||
+ | rLevels[pos] = levels[i]; | ||
+ | pos++; | ||
+ | } | ||
+ | } | ||
+ | return rLevels; | ||
+ | } | ||
+ | |||
+ | public void partTwo() { | ||
+ | int safeReports = 0; | ||
+ | |||
+ | for (String line: inputLines) { | ||
+ | // teile an den Leerzeichen auf | ||
+ | String[] strLevels = line.split(" | ||
+ | | ||
+ | // deklariere & initialisiere ein int-Array | ||
+ | int[] levels = new int[strLevels.length]; | ||
+ | // " | ||
+ | for (int i = 0; i < strLevels.length; | ||
+ | levels[i] = Integer.parseInt(strLevels[i]); | ||
+ | } | ||
+ | |||
+ | // erstelle pro Schleifendurchlauf ein reduziertes int-array, bei dem jeweils ein Index fehlt | ||
+ | for (int i = 0; i < levels.length; | ||
+ | int[] reducedLevels = reduceArray(levels, | ||
+ | //prüfe Auf-/ | ||
+ | if ((istAufsteigend(reducedLevels) || istAbsteigend(reducedLevels)) && distanzOkay(reducedLevels)) { | ||
+ | safeReports++; | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | System.out.println(safeReports); | ||
+ | } | ||
+ | </ | ||
+ | ++++ | ||
+ |