faecher:informatik:oberstufe:java:aoc:aco2023:day6:start

Dies ist eine alte Version des Dokuments!


  • Es verschiedene Möglichkeiten die wenigen Zahlen zu speichern. In dieser Lösung empfehle ich, alle Zahlen der ersten Zeile und alle Zahlen der zweiten Zeile jeweils in einem int-Array zu speichern. Diese Arrays kannst du z. B. times und distances nennen. Danach kannst du mit einer for-Schleife über die Werte iterieren. Mit deinem Laufindex (z. B. i) kannst du sicherstellen, dass du immer auf die zueinander gehörenden Zeiten und Distanzen zugreifst.
  • Für jedes Wertepaar (Zeit und Distanz) musst du nun für jede mögliche 'Knopf-Drück-Zeit' von 0 bis 'Zeit' ms prüfen, ob die zurücklegbare Strecke größer als die eingelesene Distanz ist. Für die zurücklegbare Strecke gilt nach den Regeln der Physik: s=v*t. v ist die Geschwindigkeit, welche sich direkt aus der 'Knopf-Drück-Zeit' ergibt. t ist dann die noch übrige Zeit, um die Strecke zurückzulegen (also die eingelesene Zeit minus 'Knopf-Drück-Zeit'). Wenn das Ergebnis v größer ist als die eingelesene Distanz, dann wird der Counter für das Wertepaar um eins erhöht.
  • Am Ende müssen alle Counter zusammenmultipliziert werden.

Lösungsvorschlag

  • Teil 2 ist tatsächlich noch einiges einfacher als Teil 1. Dadurch, dass die erste und zweite Zahl jeweils als eine Zahl interpretiert wird, kann das Array wegfallen und damit kann auch eine Schleife wegfallen.
  • Wichtig ist nun allerdings, dass man beide Zahlen als long speichert, da die Zahlen den Wertebereich von int andernfalls überschreiten können.
  • Um aus den ersten Zahlen einer Zeile eine gemeinsame Zahl zu machen bevor man sie parsed, kann man alle Leerzeichen zwischen den Ziffern entfernen mit replaceAll(" ",""). Damit wird jedes Leerzeichen durch 'nix' ersetzt.

Lösungsvorschlag

</pane>

  • faecher/informatik/oberstufe/java/aoc/aco2023/day6/start.1701863452.txt.gz
  • Zuletzt geändert: 06.12.2023 11:50
  • von Frank Schiebel