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 15:49] sbelfaecher:informatik:oberstufe:java:aoc:aoc2021:day4:start [07.12.2021 07: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: 
  
 {{ :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.
 +
 +In ''day4'' hat mein zwei ArrayLists für die Bingozahlen und die Boards:
 +
 +<code java>
 +    // day4: bingo numbers and bingoboards
 +    ArrayList<Integer> bingoNumbers = new ArrayList<>();
 +    ArrayList<bingoBoard> bingoBoards = new ArrayList<>();
 +</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.1638802197.txt.gz
  • Zuletzt geändert: 06.12.2021 15:49
  • von sbel