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:15] – [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 239: Zeile 249:
 </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]]))+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.1701454520.txt.gz
  • Zuletzt geändert: 01.12.2023 18:15
  • von Frank Schiebel