Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung |
faecher:informatik:oberstufe:java:aoc:aoc2024:day01:start [01.12.2024 09:44] – Marco Kuemmel | faecher:informatik:oberstufe:java:aoc:aoc2024:day01:start [04.01.2025 14:35] (aktuell) – [Teil 1] Marco Kuemmel |
---|
* ''ArrayList<Integer> varName = new ArrayList();'' Eine ArrayList eignet sich am besten, um eine **variable** Anzahl von Elementen zu speichern. Dies trifft generell immer auf **alle** AoC-Aufgaben zu (Arrays werden eher selten benötigt). Denke daran, dass du dazu auch ganz oben ''import java.util.ArrayList;'' aufrufen musst. | * ''ArrayList<Integer> varName = new ArrayList();'' Eine ArrayList eignet sich am besten, um eine **variable** Anzahl von Elementen zu speichern. Dies trifft generell immer auf **alle** AoC-Aufgaben zu (Arrays werden eher selten benötigt). Denke daran, dass du dazu auch ganz oben ''import java.util.ArrayList;'' aufrufen musst. |
* Mit folgender //for-each// Schleife kannst du am einfachsten über jede Zeile der Eingabedatei iterieren: ''for (String line: inputLines) {...}'' | * Mit folgender //for-each// Schleife kannst du am einfachsten über jede Zeile der Eingabedatei iterieren: ''for (String line: inputLines) {...}'' |
* Mit ''line.split("...")'' bekommst du ein Array von Strings zurückgeliefert, dass den ursprünglichen String ''line'' an denjenigen Stellen aufgeteilt hat, die im Anführungszeichen stehen. Das String-Element, an dem geteilt wird, verschwindet dabei! Nutze das, um jede Zeile in die linke und rechte Zahl zu splitten. An was für einem String-Element musst du die Trennung durchführen? | * Mit ''line.split("...")'' bekommst du ein Array von Strings zurückgeliefert, das den ursprünglichen String ''line'' an denjenigen Stellen aufgeteilt hat, die im Anführungszeichen stehen. Das String-Element, an dem geteilt wird, verschwindet dabei! Nutze das, um jede Zeile in die linke und rechte Zahl zu splitten. An was für einem String-Element musst du die Trennung durchführen? |
* Mit ''Integer.parseInt(...)'' kannst du einen String in einen Integer umwandeln. Damit kannst du pro Schleifendurchlauf folgenden Code verwenden, um an die **linke** Zahl zu gelangen: ''Integer.parseInt(line.split("...")[0])'' (für die rechte Zahl musst du nur eine Kleinigkeit ändern). | * Mit ''Integer.parseInt(...)'' kannst du einen String in einen Integer umwandeln. Damit kannst du pro Schleifendurchlauf folgenden Code verwenden, um an die **linke** Zahl zu gelangen: ''Integer.parseInt(line.split("...")[0])'' (für die rechte Zahl musst du nur eine Kleinigkeit ändern). |
* Mit ''liste.add(...)'' kannst du ein Element zu einer ArrayList namens ''liste'' hinzufügen. | * Mit ''liste.add(...)'' kannst du ein Element zu einer ArrayList namens ''liste'' hinzufügen. |
++++ Vorgehensweise | | ++++ Vorgehensweise | |
* Initialisiere zwei ArrayLists für Integerzahlen - je eine für die linken und eine für die rechten Zahlen. | * Initialisiere zwei ArrayLists für Integerzahlen - je eine für die linken und eine für die rechten Zahlen. |
* Iteriere über jede Schleife und füge dabei die linke und rechte Zahl in die jeweile ArrayList hinzu. | * Iteriere über jede Zeile und füge dabei die linke und rechte Zahl in die jeweile ArrayList hinzu. |
* Sortiere beide Arrays. | * Sortiere beide Arrays. |
* Merke dir nun die akkumulierenden Differenzen (beginnend mit 0). | * Merke dir nun die akkumulierenden ("aufaddierenden") Differenzen (beginnend mit 0). |
* Iteriere über jedes Listenelement: Addiere zur Lösung (den Differenzen) den **Betrag** (''Math.abs(...)'') der Differenz der linken und der rechten Zahl. | * Iteriere über jedes Listenelement: Addiere zur Lösung (den Differenzen) den **Betrag** (''Math.abs(...)'') der Differenz der linken und der rechten Zahl. |
* Nach dem Schleifendurchlauf kannst du die Differenzen ausgeben/zurückgeben. | * Nach dem Schleifendurchlauf kannst du die Differenzen ausgeben/zurückgeben. |