faecher:informatik:oberstufe:java:aoc:aoc2024:day02:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:java:aoc:aoc2024:day02:start [02.12.2024 08:03] – angelegt Marco Kuemmelfaecher: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 boolean istAufsteigend(int[] levels) {+private boolean istAufsteigend(int[] levels) {
     for (int i = 1; i < levels.length; i++) {     for (int i = 1; i < levels.length; i++) {
         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 boolean istAbsteigend(int[] levels) {+private boolean istAbsteigend(int[] levels) {
     for (int i = 1; i < levels.length; i++) {     for (int i = 1; i < levels.length; i++) {
         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 boolean distanzOkay(int[] levels) {+private boolean distanzOkay(int[] levels) {
     for (int i = 1; i < levels.length; i++) {     for (int i = 1; i < levels.length; i++) {
         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:
 </code> </code>
 ++++ ++++
 +
 +===== 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 "originale" Array, sondern du prüfst der Reihe nach: Wäre der report safe, wenn Index 1 fehlen würde, oder wenn Index 2 fehlen würde, oder ...
 +  * Sobald einer der "reduzierten" int-Arrays korrekt ist, kannst du mit ''break'' die umgebende Schleife frühzeitig abbrechen!
 +++++
 +
 +++++ 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; i++) {
 +        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];
 +        // "übersetze" die einzelnen Strings in Integer
 +        for (int i = 0; i < strLevels.length; i++) {
 +            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; i++) {
 +            int[] reducedLevels = reduceArray(levels, i);
 +            //prüfe Auf-/Absteigend
 +            if ((istAufsteigend(reducedLevels) || istAbsteigend(reducedLevels)) && distanzOkay(reducedLevels)) {
 +                safeReports++;
 +                break;
 +            }
 +        }
 +
 +    }
 +    System.out.println(safeReports);
 +}
 +</code>
 +++++
 +
  • faecher/informatik/oberstufe/java/aoc/aoc2024/day02/start.1733126632.txt.gz
  • Zuletzt geändert: 02.12.2024 08:03
  • von Marco Kuemmel