Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:java:aoc:aoc2021:day6:start [06.12.2021 13:50] – sbel | faecher:informatik:oberstufe:java:aoc:aoc2021:day6:start [06.12.2021 15:30] (aktuell) – [Aufgabenteil 2] sbel | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Tag 6: Laternenfische, | ====== Tag 6: Laternenfische, | ||
- | ====== Aufgabenteil 1 ====== | + | ===== Aufgabenteil 1 ===== |
Für den Teil 1 kann man es mit einer Modellierung wie der folgenden versuchen: | Für den Teil 1 kann man es mit einer Modellierung wie der folgenden versuchen: | ||
+ | {{ : | ||
+ | Einige Tipps für diesen Ansatz: | ||
+ | * Die '' | ||
+ | * Die '' | ||
+ | |||
+ | Damit kann man Teil 1 lösen, der Ansatz fällt einem aber in Teil 2 laufzeitmäßig auf die Füße, da die Zahl der '' | ||
+ | |||
+ | ++++ Codegerüst für diesen Ansatz | | ||
+ | |||
+ | Die '' | ||
+ | |||
+ | <code java> | ||
+ | public int partOne(int daysToSimulate) { | ||
+ | int numFish = 0; | ||
+ | parseInputToFishList(); | ||
+ | ArrayList< | ||
+ | for(int day=0; | ||
+ | int dayNum=day+1; | ||
+ | System.out.print(" | ||
+ | | ||
+ | Iterator< | ||
+ | while(fishIterator.hasNext()) { | ||
+ | lanternFish f = fishIterator.next(); | ||
+ | // Laesst den Fisch altern und fügt ein mögliches Kind | ||
+ | // an die tempfishList an | ||
+ | f.makeTimeStep(tempfishList); | ||
+ | } | ||
+ | | ||
+ | fishList.clear(); | ||
+ | fishList = (ArrayList< | ||
+ | // | ||
+ | numFish = fishList.size(); | ||
+ | System.out.println(" | ||
+ | } | ||
+ | return numFish; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ===== Aufgabenteil 2 ===== | ||
+ | |||
+ | Wenn man die neuen Fische einzeln in die Liste der Fische einfügt, wir diese sehr schnell sehr lang. Bei genauerem nachdenken fällt auf, dass das auch gar nicht nötig ist, denn bei allen in einem Zeitschritt angefügten Fische gehen die inneren Uhren synchron - sie beginnen alle bei 8 und werden dann runtergezählt. Man kann das ganze also anstatt mit einzelnen Fischen mit Fischgruppen modellieren: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | * Die '' | ||
+ | * Die Zeitschritt-Methode ('' | ||
+ | * Wenn man alle Gruppen in einem Zeitschritt durchläuft, | ||
+ | * Außerdem wird man feststellen, | ||
+ | |||
+ | |||
+ | ++++ Codegerüst für diesen Ansatz | | ||
+ | |||
+ | Wieder müssen alle verwendeten Klassen und Methoden passend erdacht werden, auch die '' | ||
+ | |||
+ | <code java> | ||
+ | public long partOne(int daysToSimulate) { | ||
+ | parseInputToFishGroupList(); | ||
+ | | ||
+ | long numFish = fishGroupList.size(); | ||
+ | |||
+ | for(int day=0; | ||
+ | int dayNum=day+1; | ||
+ | System.out.print(" | ||
+ | | ||
+ | long newBabyFish = 0; | ||
+ | Iterator< | ||
+ | while(fishIterator.hasNext()) { | ||
+ | lanternFishGroup f = fishIterator.next(); | ||
+ | newBabyFish = newBabyFish + f.makeTimeStep(); | ||
+ | } | ||
+ | | ||
+ | // neue Fischgruppe mit Timer 8 erzeugen | ||
+ | lanternFishGroup n = new lanternFishGroup(8, | ||
+ | fishGroupList.add(n); | ||
+ | | ||
+ | // | ||
+ | numFish = numFish + newBabyFish; | ||
+ | System.out.println(" | ||
+ | |||
+ | | ||
+ | } | ||
+ | return numFish; | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | ++++ |