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

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

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 Kuemmelfaecher:informatik:oberstufe:java:aoc:aoc2024:day01:start [22.07.2025 12:36] (aktuell) – [Teil 2] Marco Kuemmel
Zeile 10: Zeile 10:
   * ''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.
Zeile 18: Zeile 18:
 ++++ 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.
Zeile 55: Zeile 55:
  
 ++++ Vorgehensweise | ++++ Vorgehensweise |
-  * Die ersten Schritte bis inklusive dem zeilenweisen Einlesen alles Zahlen in zwei ArrayLists ist identisch! Anschließend muss die Berechnung aber anders ablaufen.+  * Die ersten Schritte bis inklusive dem zeilenweisen Einlesen aller Zahlen in zwei ArrayLists ist identisch! Anschließend muss die Berechnung aber anders ablaufen.
   * Die Zahlen müssen nun **nicht** sortiert werden.   * Die Zahlen müssen nun **nicht** sortiert werden.
   * Iteriere in einer Schleife über alle linken Zahlen. Pro linker Zahl iterierst du in einer weiteren Schleife über **alle** rechten Zahlen und vergleichst, ob die link Zahl mit einer der rechten Zahlen übereinstimmt. **Wichtig:** Du musst hier zum Vergleichen mit ''equals(...)'' arbeiten - also: ''linkeZahl.equals(rechteZahl)''. Zähle die Anzahl der Übereinstimmungen. Anschließend addierst du das Produkt der Übereinstimmungen und der linken Zahl zum Ergebnis.   * Iteriere in einer Schleife über alle linken Zahlen. Pro linker Zahl iterierst du in einer weiteren Schleife über **alle** rechten Zahlen und vergleichst, ob die link Zahl mit einer der rechten Zahlen übereinstimmt. **Wichtig:** Du musst hier zum Vergleichen mit ''equals(...)'' arbeiten - also: ''linkeZahl.equals(rechteZahl)''. Zähle die Anzahl der Übereinstimmungen. Anschließend addierst du das Produkt der Übereinstimmungen und der linken Zahl zum Ergebnis.
  • faecher/informatik/oberstufe/java/aoc/aoc2024/day01/start.1733046241.txt.gz
  • Zuletzt geändert: 01.12.2024 09:44
  • von Marco Kuemmel