faecher:informatik:oberstufe:java:aoc:aco2023:day1: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:aco2023:day1:start [01.12.2023 18:12] – [Hilfestellungen Variante 2] Frank Schiebelfaecher:informatik:oberstufe:java:aoc:aco2023:day1:start [12.11.2024 06:25] (aktuell) Frank Schiebel
Zeile 1: Zeile 1:
 ====== Tag 1 ====== ====== Tag 1 ======
  
 +===== Aufgabe =====
  
 +  * {{ :faecher:informatik:oberstufe:java:aoc:aco2023:day1:2023_day1.png?linkonly |Aufgabe}}
 +  *  {{ :faecher:informatik:oberstufe:java:aoc:aco2023:day1:d1input.zip |}}
 +    * Beispiele d1e1.txt, d1e2.txt
 +    * Input d2i.txt. 
  
  
 +++++ Kontrollergebnisse |
 +  * Eingabedatei d1i.txt: 
 +    * Teil 1 - ''55017''
 +    * Teil 2 - ''53539''
 +++++
  
 <tabs> <tabs>
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: ''line.toCharArray();'' [[https://www.geeksforgeeks.org/java-string-tochararray-example/|Weitere Infos]]+  * Wandle die Zeile in ein Array aus Zeichen um: ''line.toCharArray();'' (([[https://www.geeksforgeeks.org/java-string-tochararray-example/|Weitere Infos toCharArray()]]))
   * Betrachte jedes Zeichen in einer ''foreach'' Schleife oder einer ''for'' Schleife. (([[https://www.geeksforgeeks.org/for-each-loop-in-java/|Weitere Infos zur ForEach-Schleife]]))(([[https://www.geeksforgeeks.org/java-for-loop-with-examples/|Weitere  Infos zur For-Schleife]])).   * Betrachte jedes Zeichen in einer ''foreach'' Schleife oder einer ''for'' Schleife. (([[https://www.geeksforgeeks.org/for-each-loop-in-java/|Weitere Infos zur ForEach-Schleife]]))(([[https://www.geeksforgeeks.org/java-for-loop-with-examples/|Weitere  Infos zur For-Schleife]])).
   * Entscheide, ob das Zeichen eine Ziffer ist: ''Character.isDigit(z)'' ((Weitere Infos zu [[https://www.geeksforgeeks.org/character-isdigit-method-in-java-with-examples/|isDigit]]))   * Entscheide, ob das Zeichen eine Ziffer ist: ''Character.isDigit(z)'' ((Weitere Infos zu [[https://www.geeksforgeeks.org/character-isdigit-method-in-java-with-examples/|isDigit]]))
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 arbeiten:+Man kann zur Vereinfachung mit folgendem Array für die Zahlenworte arbeiten:
  
 <code java> <code java>
Zeile 227: Zeile 237:
 </code> </code>
  
-Der "dummy"-Eintrag sorgt für gedankliche Vereinfachung, denn dadurch ist der Indes jedes Eintrags der zugehörige Zahlenwert.+Der "dummy"-Eintrag sorgt für gedankliche Vereinfachung, denn dadurch ist der Index jedes Eintrags der zugehörige Zahlenwert.
  
-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 ''indexOf()'' der Java String-Klasse(([[https://www.geeksforgeeks.org/java-string-indexof/|weitere Infos zu indexOf]])). Die Methode liefert den Index des ersten Fundorts des Suchstrings zurück, wenn der String nicht gefunden wird -1.+Um die Zehnerstelle zu finden, sucht man jedes Zahlwort und jede dazugehörige Ziffer in der zu untersuchenden Zeile. Hier hilft die Methode ''indexOf()'' der Java String-Klasse(([[https://www.geeksforgeeks.org/java-string-indexof/|weitere Infos zu indexOf]])). Die Methode liefert den Index des ersten Fundorts des Suchstrings zurück, wenn der String nicht gefunden wird -1.
  
 **Beispiel:**  **Beispiel:** 
Zeile 238: Zeile 248:
 zeile.indexOf("wurstsalat") // liefert -1 zeile.indexOf("wurstsalat") // liefert -1
 </code> </code>
 +
 +Die Methode ''lastIndexOf()'' macht dasselbe "von rechts", sucht also den Index des letzten Vorkommens der Zeichenkette. (( Infos zu [[https://www.geeksforgeeks.org/java-lang-string-lastindexof-method/|lastIndexOf]]))
 +
 +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 = {
 +                "dummy", "one", "two", "three", "four", "five", 
 +                "six", "seven", "eight", "nine"
 +            };
 +
 +        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<werte.length; i++) {
 +                // Gibts die Ziffer in der Zeile? 
 +                // Achtung: Integer.toString(i), denn indexOf() benötigt als 
 +                // 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
 +    }
 +</code>
 +++++
 +
 +=== Lösungsvorschlag ===
 +
 +Einen Lösungsvorschlag nach der Beschreibung Variante 2 findest du hier: https://codeberg.org/qg-info-unterricht/aoc-bluej-2023/src/branch/main/day1.java
  
 </pane> </pane>
 </tabs> </tabs>
  
  • faecher/informatik/oberstufe/java/aoc/aco2023/day1/start.1701454350.txt.gz
  • Zuletzt geändert: 01.12.2023 18:12
  • von Frank Schiebel