faecher:informatik:oberstufe:java:aoc:aoc2021:day6: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:day6:start [06.12.2021 14:36] – [Aufgabenteil 1] sbelfaecher:informatik:oberstufe:java:aoc:aoc2021:day6:start [06.12.2021 15:30] (aktuell) – [Aufgabenteil 2] sbel
Zeile 1: Zeile 1:
 ====== Tag 6: Laternenfische, viele Laternenfische ====== ====== Tag 6: Laternenfische, viele 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:
Zeile 44: Zeile 44:
     }     }
 </code> </code>
 +
 +++++
 +
 +===== 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:
 +
 +{{ :faecher:informatik:oberstufe:java:aoc:aoc2021:day6:fishgroup.png |}}
 +
 +
 +  * Die ''lanternFishGroup'' hat ein weiteres Attribut ''numFish'', das angibt, wie groß die Gruppe ist.
 +  * Die Zeitschritt-Methode (''makeTimeStep()'') der ''lanternFishGroup'' gibt einen ganzzahligen Wert zurück, wieviele Fische im Fall, dass der Gruppentimer auf 0 steht neu erzeugt werden.
 +  * Wenn man alle Gruppen in einem Zeitschritt durchläuft, kann man ermitteln, wieviele neue Fische in diesem Zeitschritt erzeugt werden. Das kann man sich in der Gesamtsumme der Fische merken - und außerdem eine neue Gruppe der entsprechenden Größe anfügen. In ''day6'' gibt es nun also eine ArrayList für die Fischgruppen: ''ArrayList<lanternFishGroup> fishGroupList = new ArrayList<>();'''
 +  * Außerdem wird man feststellen, dass beim realen Input ''int'' nicht ausreicht, da der Wertebereich hier überläuft.
 +
 +
 +++++ Codegerüst für diesen Ansatz |
 +
 +Wieder müssen alle verwendeten Klassen und Methoden passend erdacht werden, auch die ''parseInputToFishGroupList'' Methode muss angepasst werden.
 +
 +<code java>
 +public long partOne(int daysToSimulate) {
 +        parseInputToFishGroupList();
 +        
 +        long numFish = fishGroupList.size();
 +
 +        for(int day=0;day<daysToSimulate; day++) {
 +            int dayNum=day+1;
 +            System.out.print("Day " + dayNum + ":");
 +            
 +            long newBabyFish = 0;
 +            Iterator<lanternFishGroup> fishIterator = fishGroupList.iterator();
 +            while(fishIterator.hasNext()) {
 +                lanternFishGroup f = fishIterator.next();
 +                newBabyFish = newBabyFish + f.makeTimeStep();
 +            }
 +            
 +            // neue Fischgruppe mit Timer 8 erzeugen
 +            lanternFishGroup n = new lanternFishGroup(8,newBabyFish);
 +            fishGroupList.add(n);
 +            
 +            //System.out.print(fishList);
 +            numFish = numFish + newBabyFish;
 +            System.out.println(" There are " + numFish + " fish in the sea");
 +
 +            
 +        }
 +        return numFish;
 +
 +    }
 +</code>
 +++++
  • faecher/informatik/oberstufe/java/aoc/aoc2021/day6/start.1638801377.txt.gz
  • Zuletzt geändert: 06.12.2021 14:36
  • von sbel