Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung |
faecher:informatik:oberstufe:java:aoc:aco2023:day2:start [02.12.2023 18:30] – [Bearbeiten - Pane] Frank Schiebel | faecher:informatik:oberstufe:java:aoc:aco2023:day2:start [12.11.2024 06:32] (aktuell) – Frank Schiebel |
---|
| ~~NOTOC~~ |
| |
====== Tag 2 ====== | ====== Tag 2 ====== |
| ===== Aufgabe ===== |
| |
| * {{ :faecher:informatik:oberstufe:java:aoc:aco2023:day2:day2a.png?linkonly |Aufgabe}} |
| * {{ :faecher:informatik:oberstufe:java:aoc:aco2023:day2:d2input.zip |Inputdateien}}: |
| * Beispiel d2e.txt |
| * Input d2i.txt. |
| |
| |
| ++++ Kontrollergebnisse | |
| * Eingabedatei d2e.txt: |
| * Teil 1 - ''8'' |
| * Teil 2 - '''' |
| * Eingabedatei d6i.txt: |
| * Teil 1 - ''2286'' |
| * Teil 2 - ''74229'' |
| ++++ |
| |
| |
<tabs> | <tabs> |
| |
<pane id="variante1"> | <pane id="variante1"> |
==== Hilfestellungen Variante 1 ==== | ==== Hilfestellungen Teil 1 ==== |
* Du kannst/musst exzessiv die split("...")-Methode von Java nutzen. Damit zerteilst du einen String an jedem gefundenen Trennzeichen, sodass ein String-Array entsteht. Beispiel: ''line.split(":")'' erzeugt ein Array der Form ["Game 1", "4 red, 1 green, 15 blue; 6 green UND SO WEITER"]. Das Array enthält also zwei Strings: Erstens den Teil VOR dem Doppelpunkt, und zweitens den gesamten restlichen Teil hinter dem Doppelpunkt. | * Du kannst/musst exzessiv die split("...")-Methode von Java nutzen. Damit zerteilst du einen String an jedem gefundenen Trennzeichen, sodass ein String-Array entsteht. Beispiel: ''line.split(":")'' erzeugt ein Array der Form ["Game 1", "4 red, 1 green, 15 blue; 6 green UND SO WEITER"]. Das Array enthält also zwei Strings: Erstens den Teil VOR dem Doppelpunkt, und zweitens den gesamten restlichen Teil hinter dem Doppelpunkt. |
* Die split("...")-Methode kannst du mehrmals direkt hintereinander aufrufen und zwischendurch mit dem üblichen Index-Zugriff in eckigen Klammern auf einen bestimmten String des String-Arrays zugreifen. Beispiel: Der Befehl ''line.split(":")[1].split(";")'' gibt dir ein String Array, bei dem jeder String ein Herausziehen des Elfen darstellt. Das Ergebnis ist dann also z. B. die Form ["4 red, 1 green, 15 blue", "6 green, 2 red, 10 blue", "..."] | * Die split("...")-Methode kannst du mehrmals direkt hintereinander aufrufen und zwischendurch mit dem üblichen Index-Zugriff in eckigen Klammern auf einen bestimmten String des String-Arrays zugreifen. Beispiel: Der Befehl ''line.split(":")[1].split(";")'' gibt dir ein String Array, bei dem jeder String ein Herausziehen des Elfen darstellt. Das Ergebnis ist dann also z. B. die Form ["4 red, 1 green, 15 blue", "6 green, 2 red, 10 blue", "..."] |
| |
==== Hilfestellungen Teil 2 ==== | ==== Hilfestellungen Teil 2 ==== |
* Das meiste der verschachtelten Schleifen kannst du stehen lassen. Du benötigst nun nicht mehr die boolean-Variable, um zu überprüfen, ob die aktuelle Zeile 'erlaubt' ist. Jede Zeile fliest gleichermaßen in das Ergebnis ein. | * Das meiste der verschachtelten Schleifen kannst du stehen lassen. Du benötigst nun nicht mehr die boolean-Variable, um zu überprüfen, ob die aktuelle Zeile 'erlaubt' ist. Jede Zeile fließt gleichermaßen in das Ergebnis ein. |
* Erstelle pro Zeile drei int-Variablen, die dir das größte Vorkommen von rot, grün und blau Speichern. Für jede Farbe überprüfst du, ob die Zahl der jeweiligen Farbe größer ist als der bisher gespeicherte Wert in den neuen Variablen. | * Erstelle pro Zeile drei int-Variablen, die dir das größte Vorkommen von rot, grün und blau Speichern. Für jede Farbe überprüfst du, ob die Zahl der jeweiligen Farbe größer ist als der bisher gespeicherte Wert in den neuen Variablen. |
* Am Ende jeder Zeile fügst du das Produkt der drei Variablen zur Gesamtsumme hinzu. | * Am Ende jeder Zeile fügst du das Produkt der drei Variablen zur Gesamtsumme hinzu. |
{{ :faecher:informatik:oberstufe:java:aoc:aco2023:day2:objekte.png?nolink |}} | {{ :faecher:informatik:oberstufe:java:aoc:aco2023:day2:objekte.png?nolink |}} |
| |
Anmerkung: Das ist natürlich Overkill, - vor allem für die Züge eine eigen Klasse zu implementieren, die letztlich nur die Werte für RGB enthält - aber es zeigt das Prinzip der Objekorientierung dennoch ganz gut. | Anmerkung: Das ist natürlich Overkill - vor allem für die Züge eine eigene Klasse zu implementieren, die letztlich nur die Werte für RGB enthält - aber es zeigt das Prinzip der Objektorientierung dennoch ganz gut: |
| |
* Jede Klasse definiert einen neuen Datentyp, hier erhalten wir ''Spiel'' um Spiele mit ihren Zügen zu speichern, und ''Zug'' um einen Zug zu speichern. | * Jede Klasse definiert einen neuen Datentyp, hier erhalten wir ''Spiel'' um Spiele mit ihren Zügen zu speichern, und ''Zug'' um einen Zug zu speichern. |
} | } |
</code> | </code> |
| Code zu dieser Variante: https://codeberg.org/qg-info-unterricht/aoc-bluej-2023 in den Dateien day2.java, Spiel.java und Zug.java.((Dieser Commit enthält die Änderungen zu Day 1: https://codeberg.org/qg-info-unterricht/aoc-bluej-2023/commit/5687838212e0e5bde7ff836fbc7847343b047610)) |
| |
</pane> | </pane> |
| |
| |
</tabs> | </tabs> |