faecher:informatik:oberstufe:java:aoc:aoc2021:day4: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:aoc2021:day4:start [06.12.2021 14:53] sbelfaecher:informatik:oberstufe:java:aoc:aoc2021:day4:start [07.12.2021 06:28] (aktuell) – [Aufgabe, Beispiele, Input] sbel
Zeile 1: Zeile 1:
 ====== Tag 4: Bingo mit dem Riesenkraken ====== ====== Tag 4: Bingo mit dem Riesenkraken ======
 +
 +===== Aufgabe, Beispiele, Input =====
 +
 +  * Aufgabe: https://adventofcode.com/2021/day/4
 +  * Input-Dateien: {{ d4.zip |}}
 +  * Ergebnis für die Datei ''d4i'': ++ Teil 1 | 50008 ++ ++Teil2 | 17408  ++
 +
 +===== Tipp ====
  
 Hier kann man objektorientiert modellieren:  Hier kann man objektorientiert modellieren: 
Zeile 5: Zeile 13:
 {{ :faecher:informatik:oberstufe:java:aoc:aoc2021:day4:bingo.png |}} {{ :faecher:informatik:oberstufe:java:aoc:aoc2021:day4:bingo.png |}}
  
-man kann eine Klasse ''bingoBoard'' verwenden, um die Boards zu speichern, eine Methode ''checkWin'' kann dann zrückgeben, ob ein Board nach einer neuen Zahl gewonnen hat.+Man kann eine Klasse ''bingoBoard'' verwenden, um die Boards zu speichern, eine Methode ''checkWin'' kann dann zrückgeben, ob ein Board nach einer neuen Zahl gewonnen hat.
  
 In ''day4'' hat mein zwei ArrayLists für die Bingozahlen und die Boards: In ''day4'' hat mein zwei ArrayLists für die Bingozahlen und die Boards:
Zeile 14: Zeile 22:
     ArrayList<bingoBoard> bingoBoards = new ArrayList<>();     ArrayList<bingoBoard> bingoBoards = new ArrayList<>();
 </code> </code>
 +
 +Die ''bingoBoard''-Klasse hat die Felder als zweidimensionales Array von int-Werten:
 +
 +<code java>
 +public class bingoBoard
 +{
 +    // Instanzvariablen - ersetzen Sie das folgende Beispiel mit Ihren Variablen
 +    private int[][] bField;
 +    private int boardSize = 5;
 +    private int winningNumber;
 +
 +    /**
 +     * Konstruktor für Objekte der Klasse bingoBoard
 +     */
 +    public bingoBoard()
 +    {
 +        bField = new int[boardSize][boardSize];
 +    }
 +</code>
 +
 +Außerdem sind Methoden wie 
 +
 +  * ''setBoardFieldValue(int x, int y, int value)''
 +  * ''checkWin()''
 +  * ''calcScore()''
 +  * ''markNumber(int number)''
 +
 +möglicherweise hilfreich.
 +
 +Das zentrale Problem ist die Verarbeitung des Inputs. Die erste Zeile muss in die bingoNumbers geparst werden, und die weiteren Zeilen, getrennt durch Leerzeilen geben jeweils ein Board.
 +
 +++++ Codegerüst zur Verarbeitung des Inputs |
 +<code java>
 +  public void parseInputToBoards () {
 +        this.bingoNumbers.clear();
 +        this.bingoBoards.clear();
 +        int lineNum = 0;
 +
 +        bingoBoard b = null;
 +        int fRow = 0;
 +        int fCol = 0;
 +
 +        for ( String[] line: input) {
 +            // Trim whitespaces
 +            line[0] = line[0].trim();
 +            // first line holds bingo numbers
 +            if (lineNum == 0) {
 +                String[] temp = line[0].split(",");
 +                for(String t: temp) {
 +                    bingoNumbers.add(Integer.parseInt(t));
 +                }
 +                System.out.println("Bingo Numbers: " + bingoNumbers);
 +            } else {
 +                // Empty line starts new board
 +                if (line[0].trim().isEmpty()) {
 +                    
 +                    if ( b != null ) {
 +                        bingoBoards.add(b);
 +                    }
 +                    b=new bingoBoard();
 +                    fRow = 0;
 +                } else {
 +                    String[] temp = line[0].split("\\s+");
 +                    fCol = 0;
 +
 +                    for (String t: temp) {
 +                        b.setBoardFieldValue(fCol,fRow,Integer.parseInt(t));
 +                        fCol++;
 +
 +                    }
 +                    fRow++;
 +                }
 +            }
 +            lineNum++;
 +        }
 +        // Add last board
 +        bingoBoards.add(b);
 +    }
 +
 +</code>
 +++++
 +
  • faecher/informatik/oberstufe/java/aoc/aoc2021/day4/start.1638802437.txt.gz
  • Zuletzt geändert: 06.12.2021 14:53
  • von sbel