package Ġpl . sh ock ah . a oc . y 2 0 2 1 Ċ Ċ import Ġorg . junit . jupiter . api . Assertions Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġpl . sh ock ah . a oc . Ad vent Task Ċ Ċ class ĠDay 6 : ĠAd vent Task < List < Int >, ĠLong , ĠLong >( 2 0 2 1 , Ġ 6 ) Ġ{ Ċ ĉ comp anion Ġobject Ġ{ Ċĉ ĉ private Ġconst Ġval Ġnormal Cycle Ġ= Ġ 6 Ċĉ ĉ private Ġconst Ġval Ġnew Cycle Ġ= Ġ 8 Ċ ĉ } ĊĊ ĉ override Ġfun Ġparse Input ( raw Input : ĠString ): ĠList < Int > Ġ{ Ċĉ ĉ return Ġraw Input . trim (). split (',' ). map Ġ{ Ġit . toInt () Ġ} Ċ ĉ } ĊĊ ĉ private Ġfun Ġtask ( input : ĠList < Int >, Ġcycles : ĠInt ): ĠLong Ġ{ Ċĉ ĉ val Ġcounters Ġ= ĠLong Array ( new Cycle Ġ+ Ġ 1 ) Ċĉ ĉ input . forEach Ġ{ Ġcounters [ it ] ++ Ġ} ĊĊĉ ĉ println (" Day Ġ 0 : Ġ${ counters . sum ()} Ġfish ") Ċĉ ĉ fun Ġtick ( day : ĠInt ) Ġ{ Ċĉĉ ĉ val Ġnew Fish Ġ= Ġcounters [ 0 ] Ċĉĉ ĉ ( 1 Ġ.. Ġnew Cycle ). forEach Ġ{ Ġcounters [ it Ġ- Ġ 1 ] Ġ= Ġcounters [ it ] Ġ} Ċĉĉ ĉ counters [ new Cycle ] Ġ= Ġnew Fish Ċĉĉ ĉ counters [ normal Cycle ] Ġ+= Ġnew Fish Ċĉĉ ĉ println (" Day Ġ${ day Ġ+ Ġ 1 }: Ġ${ counters . sum ()} Ġfish ") Ċĉ ĉ } ĊĊĉ ĉ repeat ( cycles ) Ġ{ Ġtick ( it ) Ġ} Ċĉ ĉ return Ġcounters . sum () Ċ ĉ } ĊĊ ĉ override Ġfun Ġpart 1 ( input : ĠList < Int >): ĠLong Ġ{ Ċĉ ĉ return Ġtask ( input , Ġ 8 0 ) Ċ ĉ } ĊĊ ĉ override Ġfun Ġpart 2 ( input : ĠList < Int >): ĠLong Ġ{ Ċĉ ĉ return Ġtask ( input , Ġ 2 5 6 ) Ċ ĉ } ĊĊ ĉ class ĠTests Ġ{ Ċĉ ĉ private Ġval Ġtask Ġ= ĠDay 6 () Ċĉ ĉ private Ġval Ġraw Input Ġ= Ġ" 3 , 4 , 3 , 1 , 2 " ĊĊĉ ĉ @ Test Ċĉ ĉ fun Ġpart 1 () Ġ{ Ċĉĉ ĉ val Ġinput Ġ= Ġtask . parse Input ( raw Input ) Ċĉĉ ĉ Assertions . assertEquals ( 5 9 3 4 L , Ġtask . part 1 ( input )) Ċĉ ĉ } ĊĊĉ ĉ @ Test Ċĉ ĉ fun Ġpart 2 () Ġ{ Ċĉĉ ĉ val Ġinput Ġ= Ġtask . parse Input ( raw Input ) Ċĉĉ ĉ Assertions . assertEquals ( 2 6 9 8 4 4 5 7 5 3 9 L , Ġtask . part 2 ( input )) Ċĉ ĉ } Ċ ĉ } Ċ }