Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:java:aoc:aoc2024:day07:start [07.12.2024 18:35] – angelegt Marco Kuemmel | faecher:informatik:oberstufe:java:aoc:aoc2024:day07:start [07.12.2024 18:47] (aktuell) – [Teil 1] Marco Kuemmel | ||
---|---|---|---|
Zeile 19: | Zeile 19: | ||
++++ | ++++ | ||
- | ++++ Genau Vorgehensweise in der Rekursion: | | + | ++++ Genaue |
* Zunächst die Abbruchbedingung: | * Zunächst die Abbruchbedingung: | ||
* Wenn der Index noch 0 ist, die Rekursion also gerade das erste Mal aufgerufen wird, dann müssen direkt zwei Zahlen miteinander verrechnet werden. Man prüft zunächst rekursiv, ob eine Addition der ersten beiden Zahlen korrekt ist. Der Index im nächsten rekursiven Aufruf muss also direkt auf 2 gesetzt werden, da gleich zwei Zahlen zu Beginn verrechnet werden müssen. Außerdem wird diese Rechnung '' | * Wenn der Index noch 0 ist, die Rekursion also gerade das erste Mal aufgerufen wird, dann müssen direkt zwei Zahlen miteinander verrechnet werden. Man prüft zunächst rekursiv, ob eine Addition der ersten beiden Zahlen korrekt ist. Der Index im nächsten rekursiven Aufruf muss also direkt auf 2 gesetzt werden, da gleich zwei Zahlen zu Beginn verrechnet werden müssen. Außerdem wird diese Rechnung '' | ||
- | * Wenn der Index >= 2 ist (" | + | * Wenn der Index >= 2 ist (" |
++++ | ++++ | ||
Zeile 34: | Zeile 34: | ||
| | ||
ArrayList< | ArrayList< | ||
- | // Interiere | + | // Iteriere |
for (String number: line.split(":" | for (String number: line.split(":" | ||
numbers.add(Integer.parseInt(number)); | numbers.add(Integer.parseInt(number)); | ||
Zeile 68: | Zeile 68: | ||
return false; | return false; | ||
} | } | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | ===== Teil 2 ===== | ||
+ | Der Beginn von Teil 2 ist identisch! Einzig die rekursive Methode muss um einen dritten Fall (Zusammenfügen der Zahlen anstatt +/*) erweitert werden! | ||
+ | |||
+ | Das Zusammenfügen geht vermutlich am einfachsten, | ||
+ | |||
+ | ++++ Lösungsvorschlag | | ||
+ | <code java> | ||
+ | public void partTwo() { | ||
+ | long sum = 0; | ||
+ | | ||
+ | for (String line: inputLines) { | ||
+ | long result = Long.parseLong(line.split(":" | ||
+ | ArrayList< | ||
+ | for (String number: line.split(":" | ||
+ | numbers.add(Integer.parseInt(number)); | ||
+ | } | ||
+ | | ||
+ | if (equationPossible2(result, | ||
+ | sum += result; | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | System.out.println(sum); | ||
+ | } | ||
+ | |||
+ | private boolean equationPossible2(long result, ArrayList< | ||
+ | if (index == numbers.size()) { | ||
+ | return result == calculation; | ||
+ | } | ||
+ | | ||
+ | if (index == 0) { | ||
+ | if (equationPossible2(result, | ||
+ | return true; | ||
+ | } else if (equationPossible2(result, | ||
+ | return true; | ||
+ | } else if (equationPossible2(result, | ||
+ | return true; | ||
+ | } | ||
+ | } else { | ||
+ | if (equationPossible2(result, | ||
+ | return true; | ||
+ | } else if (equationPossible2(result, | ||
+ | return true; | ||
+ | } else if (equationPossible2(result, | ||
+ | return true; | ||
+ | } | ||
+ | } | ||
+ | return false; | ||
+ | } | ||
</ | </ | ||
++++ | ++++ |