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

Dies ist eine alte Version des Dokuments!


Tag 1

Teil 1

Mehrere Zeilen werden eingelesen, diese bestehen aus Buchstaben und Zahlen. Man muss die erste Zahl und die letzte Zahl jeder Zeile finden. Es kann auch manchmal nur eine Zahl in der ganzen Zeile geben, dann fungiert diese sowohl als erste, als auch als letzte Zahl. Diese beiden Zahlen werden zusammengesetzt als zweistellige Zahl. Alle zweistelligen Zahlen aus jeder Zeile werden zusammenaddiert und bilden das gesuchte Ergebnis.

Tipp 1

Tipp 2

Tipp 3

Lösungsvorschlag

Teil 2

Der zweite Teil knüpft direkt an Teil 1 an. Von nun an müssen auch die ausgeschriebenen Zahlen ("one" für 1, "two" für 2, … bis 9) als Zahlen berücksichtigt werden. Dieser zweite Teil ist tatsächlich sehr knifflig, zumal es auch vorkommen kann, dass sich die Zahlen überlappen! So gibt es z. B. oneight, welches sowohl one als auch eight, also die 18 beinhaltet!

Wenn man den Code aus Teil 1 wiederverwenden möchte, so muss man also zuvor dafür sorgen, dass alle Text-Zahlen zu Ziffern-Zahlen übersetzt werden. Dies kann z. B. pro Zeile geschehen. Schreibe dies am besten in einer separaten Methode.

Tipp 1

Lösungsvorschlag

Hinweise zu Teil 1

Prinzipielles Vorgehen, um eine Zeile zu untersuchen:

  • Wandle die Zeile in ein Array aus Zeichen um: line.toCharArray(); Weitere Infos
  • Betrachte jedes Zeichen in einer foreach Schleife oder einer for Schleife. ForEach-Schleife For-Schleife.
  • Entscheide, ob das Zeichen eine Ziffer ist: Character.isDigit(z) isDigit
  • Die erste gefundene Ziffer sind die Zehner, die letzte gefundene Ziffer sind die Einer. Mit einer Aggregationsvariablen kann man markieren, ob die 10er schon gefunden wurden. Wenn ja überschreibt man von diesem Zeitpunkt an die Einer mit der jeweils letzten gefundenen Ziffer. Sind Zehner und Einer dieselbe Ziffer, führt das hier nicht zu Problemen, weil zunächst der Marker auf "Zehner gefunden" gesetzt wird und deswegen dieselbe Ziffer als Einer gemerkt wird. Wenn in der Folge keine weitere Einerziffer gefunden wird, bleibt es dabei.
  • Wenn die Zeile bearbeite hat, erhält man den Kalibrierungswert für die Zeile als c=zehner*10+einer.

Das macht man jetzt in einer Schleife für alle Zeilen und addiert dabei die Kalibrierungswerte.

Codegerüst

  • faecher/informatik/oberstufe/java/aoc/aco2023/day1/start.1701452534.txt.gz
  • Zuletzt geändert: 01.12.2023 17:42
  • von Frank Schiebel