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

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

faecher:informatik:oberstufe:java:aoc:aco2023:day3:start [03.12.2023 09:31] – angelegt Marco Kuemmelfaecher:informatik:oberstufe:java:aoc:aco2023:day3:start [03.12.2023 10:10] (aktuell) Marco Kuemmel
Zeile 92: Zeile 92:
 </code> </code>
 ++++ ++++
 +
 +==== Hilfestellungen Teil 2 ====
 +  * Du kannst zwei Methoden aus Teil 1 wiederverwenden! Gehe Zeile für Zeile über jeden Character. Wenn der Character c ein Stern ist (''c == '*' ''), dann lässt du dir **alle** benachbarten Zahlen geben (das kann nur eine, oder zwei, oder drei, ... Zahlen sein).
 +  * Die Erfassung aller benachbarten Zahlen kannst du in eine separate Methode auslagern. Dort nutzt du eine ArrayList, um die variable Anzahl aller benachbarten Zahlen abzuspeichern (''ArrayList numbers = new ArrayList<Integer>();''). Gehe nun Reihe für Reihe (!!!) alle benachbarten Character mit dx und dy ab. Die äußere Schleife muss also über dy gehen! Wenn ein benachbarter Character eine Ziffer ist, dann kannst du direkt die Methode ''getFullNumber(dx, dy)'' aus Teil 1 nutzen und die Zahl zu ''numbers'' hinzufügen. **Wichtig:** du musst nun dx aufs Ende der Zahl setzen, damit die Zahl nicht ein zweites Mal als Nachbar erkannt wird (''dx = getEndOfNumber(dx, dy);''). 
 +  * Wenn die gefüllte ArrayList wieder in der Hauptmethode ankommt, dann musst du überprüfen, wie viele benachbarte Zahlen es enthält. Wenn es nicht genau 2 sind, dann geschieht nichts. Andernfalls wird das Produkt beider Zahlen zum Endergebnis hinzugefügt.
 +
 +++++ Lösungsvorschlag |
 +<code java>
 +private ArrayList<Integer> getAdjacentNumbers(int x, int y) {
 +    ArrayList numbers = new ArrayList<Integer>();
 +    for (int dy = y-1; dy <= y+1; dy++) {
 +        for (int dx = x-1; dx <= x+1; dx++) {
 +            if (dx < 0 || dy < 0 || dx >= inputLines.get(0).length() || dy >= inputLines.size()) {
 +                continue;
 +            }
 +            
 +            String line = inputLines.get(dy);
 +            if (Character.isDigit(line.charAt(dx))) {
 +                numbers.add(getFullNumber(dx, dy));
 +                dx = getEndOfNumber(dx, dy);
 +            }
 +            
 +        }
 +    }
 +    return numbers;
 +}
 +
 +public int partTwo() {
 +    int summe = 0;
 +
 +    for (int y = 0; y < inputLines.size(); y++) {
 +        String line = inputLines.get(y);
 +        for (int x = 0; x < line.length(); x++) {
 +            if (line.charAt(x) == '*') {
 +                ArrayList<Integer> numbers = getAdjacentNumbers(x, y);
 +                if (numbers.size() == 2) {
 +                    summe += numbers.get(0) * numbers.get(1);
 +                }
 +            }
 +        }
 +    }
 +    return summe;
 +}
 +</code>
 +++++
 +
 </pane> </pane>
  
 </tabs> </tabs>
  
  • faecher/informatik/oberstufe/java/aoc/aco2023/day3/start.1701595878.txt.gz
  • Zuletzt geändert: 03.12.2023 09:31
  • von Marco Kuemmel