faecher:informatik:oberstufe:java:aoc:aoc2021:day6:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
faecher:informatik:oberstufe:java:aoc:aoc2021:day6:start [06.12.2021 15:41] – [Aufgabenteil 1] sbelfaecher:informatik:oberstufe:java:aoc:aoc2021:day6:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1
Zeile 1: Zeile 1:
-====== Tag 6: Laternenfische, viele Laternenfische ====== 
  
-===== Aufgabenteil 1 ===== 
- 
-Für den Teil 1 kann man es mit einer Modellierung wie der folgenden versuchen: 
- 
-{{ :faecher:informatik:oberstufe:java:aoc:aoc2021:day6:fishlist.png |}} 
- 
-Einige Tipps für diesen Ansatz:  
- 
-  * Die ''lanternFish''-Objekte können innerhalb von ''day6'' in einer ArrayList verwaltet werden: ''ArrayList<lanternFish> fishList = new ArrayList<>();'' 
-  * Die ''lanternFish''-Objekte können eine Methode wie ''makeTimeStep'' haben, die einen Zeitschritt auf dem Fish implementiert. Hier fließen die Rahmenbedingungen der Aufgabenstellung ein. Neue Fische könnten an eine ArrayList mit neuen Fischen angehängt werden, die nachdem alle Objekte der ''fishList'' bearbeitet wurden an die ''fishList'' angehängt werden.  
- 
-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 ''lanternFish''-Objekte in der Array List sehr schnell wächst. 
- 
-++++ Codegerüst für diesen Ansatz | 
- 
-Die ''lanternFish''-Klasse und Methoden wie ''parseInputToFishList()'' um den Input zu verarbeiten müssen passend implementiert werden. 
- 
-<code java> 
-public int partOne(int daysToSimulate) { 
-        int numFish = 0; 
-        parseInputToFishList(); 
-        ArrayList<lanternFish> tempfishList = new ArrayList<>(fishList); 
-        for(int day=0;day<daysToSimulate; day++) { 
-            int dayNum=day+1; 
-            System.out.print("Day " + dayNum + ":"); 
-             
-            Iterator<lanternFish> fishIterator = fishList.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<lanternFish>) tempfishList.clone(); 
-            //System.out.print(fishList); 
-            numFish = fishList.size(); 
-            System.out.println(" There are " + numFish + " fish in the sea"); 
-        } 
-        return numFish; 
-    } 
-</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 |}} 
  • faecher/informatik/oberstufe/java/aoc/aoc2021/day6/start.1638801665.txt.gz
  • Zuletzt geändert: 06.12.2021 15:41
  • von sbel