Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:java:aoc:aco2023:day1:start [01.12.2023 18:10] – [Hilfestellungen Variante 2] Frank Schiebel | faecher:informatik:oberstufe:java:aoc:aco2023:day1:start [12.11.2024 06:25] (aktuell) – Frank Schiebel | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Tag 1 ====== | ====== Tag 1 ====== | ||
+ | ===== Aufgabe ===== | ||
+ | * {{ : | ||
+ | * {{ : | ||
+ | * Beispiele d1e1.txt, d1e2.txt | ||
+ | * Input d2i.txt. | ||
+ | ++++ Kontrollergebnisse | | ||
+ | * Eingabedatei d1i.txt: | ||
+ | * Teil 1 - '' | ||
+ | * Teil 2 - '' | ||
+ | ++++ | ||
< | < | ||
Zeile 157: | Zeile 167: | ||
Prinzipielles Vorgehen, um eine Zeile zu untersuchen: | Prinzipielles Vorgehen, um eine Zeile zu untersuchen: | ||
- | * Wandle die Zeile in ein Array aus Zeichen um: '' | + | * Wandle die Zeile in ein Array aus Zeichen um: '' |
- | * Betrachte jedes Zeichen in einer '' | + | * Betrachte jedes Zeichen in einer '' |
- | * Entscheide, ob das Zeichen eine Ziffer ist: '' | + | * Entscheide, ob das Zeichen eine Ziffer ist: '' |
* 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 " | * 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 " | ||
- | * Wenn die Zeile bearbeite hat, erhält man den Kalibrierungswert für die Zeile als '' | + | * Wenn die Zeile bearbeite hat, erhält man den Kalibrierungswert für die Zeile als '' |
Das macht man jetzt in einer Schleife für alle Zeilen und addiert dabei die Kalibrierungswerte. | Das macht man jetzt in einer Schleife für alle Zeilen und addiert dabei die Kalibrierungswerte. | ||
Zeile 218: | Zeile 228: | ||
* Aufpassen muss man - wie schon in Teil 1 - dass man die passenden Typen für die gewünschten Operationen verwendet und diese wenn nötig passend umwandelt. | * Aufpassen muss man - wie schon in Teil 1 - dass man die passenden Typen für die gewünschten Operationen verwendet und diese wenn nötig passend umwandelt. | ||
- | Man kann zur Vereinfachung mit folgendem Array für die Zahlenorte | + | Man kann zur Vereinfachung mit folgendem Array für die Zahlenworte |
<code java> | <code java> | ||
Zeile 227: | Zeile 237: | ||
</ | </ | ||
- | Der " | + | Der " |
- | Jetzt kanns losgehen: | + | Um die Zehnerstelle zu finden, sucht man jedes Zahlwort und jede dazugehörige Ziffer in der zu untersuchenden Zeile. Hier hilft die Methode '' |
- | Beispiel: | + | **Beispiel:** |
<code java> | <code java> | ||
Zeile 238: | Zeile 248: | ||
zeile.indexOf(" | zeile.indexOf(" | ||
</ | </ | ||
+ | |||
+ | Die Methode '' | ||
+ | |||
+ | Das folgende Codegerüst beinhaltet die nach dieser Logik implementierte Suche nach der Zehnerstelle - du kannst das nachvollziehen und versuchen, die Einerstelle und die Berechnung der GEsamtsumme nachzutragen. | ||
+ | |||
+ | ++++ Codegerüst für die Zehnerstelle | | ||
+ | <code java> | ||
+ | public int partTwo() { | ||
+ | int answer=0; | ||
+ | |||
+ | String [] werte = { | ||
+ | " | ||
+ | " | ||
+ | }; | ||
+ | |||
+ | for(String line: inputLines) { | ||
+ | |||
+ | // Suche Zehner, Positionen sind nicht vorhanden: -1 | ||
+ | int zehnerPosition=-1; | ||
+ | int zehnerWert=-1; | ||
+ | | ||
+ | // Jede Zahl von 1 bis 10 in der Zeile suchen, | ||
+ | // als Ziffer und als Zahlwort | ||
+ | for(int i=1; i< | ||
+ | // Gibts die Ziffer in der Zeile? | ||
+ | // Achtung: Integer.toString(i), | ||
+ | // Argument einen String! | ||
+ | int zifferPosition = line.indexOf(Integer.toString(i)); | ||
+ | // Gibst das Zahlwort in der Zeile? | ||
+ | int wortPosition = line.indexOf(werte[i]); | ||
+ | | ||
+ | // Position merken, wenn gefunden. | ||
+ | // Nur die am weitesten links stehende Postion liefert | ||
+ | // den Zehnerwert | ||
+ | | ||
+ | // Zuerst für die Ziffer | ||
+ | if(zifferPosition != -1) { | ||
+ | if( zehnerPosition == -1 || zifferPosition < zehnerPosition) { | ||
+ | zehnerPosition = zifferPosition; | ||
+ | zehnerWert = i; | ||
+ | } | ||
+ | } | ||
+ | // Jetzt für das Wort | ||
+ | // Beide Untersuchungen setzen wenn nötig | ||
+ | // zehnerPosition und zehnerWert neu | ||
+ | if(wortPosition != -1) { | ||
+ | if( zehnerPosition == -1 || wortPosition < zehnerPosition) { | ||
+ | zehnerPosition = wortPosition; | ||
+ | zehnerWert = i; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | // Suche Einer | ||
+ | | ||
+ | // TODO | ||
+ | | ||
+ | answer = // Rechnen! | ||
+ | } | ||
+ | return answer | ||
+ | } | ||
+ | </ | ||
+ | ++++ | ||
+ | |||
+ | === Lösungsvorschlag === | ||
+ | |||
+ | Einen Lösungsvorschlag nach der Beschreibung Variante 2 findest du hier: https:// | ||
</ | </ | ||
</ | </ | ||