Dieser Tag ist etwas kniffliger. Teil 1 kann man noch zur mittleren Schwierigkeit zählen, Teil 2 hingegen zählt definitiv zur höchsten Schwierigkeitsstufe, da man Memoisation bzw. dynamische Programmierung benötigt. Das bedeutet, dass man Zwischenergebnisse speichern muss, um bei erneuten rekursiven Aufrufen mit denselben Parametern direkt das vorherige Ergebnis zurückliefern zu können. Andernfalls würde die Rechenzeit für Teil 2 explodieren. Hierzu wird eine HashMap benötigt.
Teil 1 lässt sich noch relativ straight-forward lösen. Man speichert die Input-Zahlen also in einer ArrayList und iteriert 25x über die Schleife. Pro Iteration erstellt man am besten eine neue ArrayList, die man mit den neuen Werten füllt, die sich nach den Regeln aus der alten ArrayList (des letzten Durchgangs) ergeben.
Eine ausführliche Erklärung würde hier vermutlich den Rahmen sprengen. Der Quellcode des Lösungsvorschlags ist ein wenig kommentiert…