import Ġjava . io . File Ċ Ċ // Ġtag :: later nf ish [] Ċ fun Ġlater nf ish ( day : ĠInt ): ĠInt Ġ{ Ċ ĉ var Ġpopulation Ġ= Ġmutable ListOf < Int >() ĊĊ ĉ File (" day 2 1 0 6 _ pu zzle _ input . txt "). forEach Line Ġ{ Ċĉ ĉ var Ġinstruction Ġ= Ġit . split (",") Ċĉ ĉ instruction . forEach Ġ{ Ċĉĉ ĉ population . add ( it . toInt ()) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ for Ġ( i Ġin Ġ 1 .. day ) Ġ{ Ċĉ ĉ for Ġ( x Ġin Ġ 0 .. population . size Ġ- Ġ 1 ) Ġ{ Ċĉĉ ĉ if Ġ( population [ x ] Ġ== Ġ 0 ) Ġ{ Ċĉĉĉ ĉ population . add ( 8 ) Ċĉĉĉ ĉ population [ x ] Ġ= Ġ 6 Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ population [ x ] Ġ-= Ġ 1 Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } Ċ ĉ return Ġpopulation . size Ċ } Ċ // Ġend :: later nf ish [] ĊĊ Ċ // Ġtag :: later nf ish 2 [] Ċ fun Ġlater nf ish 2 ( day : ĠLong ): ĠLong Ġ{ Ċ ĉ var Ġresult : ĠLong Ġ= Ġ 0 Ċ ĉ var Ġpopulation Ġ= Ġmutable Map Of < Int , ĠLong >() Ċ ĉ var Ġnew _ population Ġ= Ġmutable Map Of < Int , ĠLong >() ĊĊ ĉ for Ġ( i Ġin Ġ 0 .. 8 ) Ġ{ Ċĉ ĉ population . put ( i , Ġ 0 ) Ċĉ ĉ new _ population . put ( i , Ġ 0 ) Ċ ĉ } ĊĊ ĉ File (" day 2 1 0 6 _ pu zzle _ input . txt "). forEach Line Ġ{ Ċĉ ĉ var Ġinstruction Ġ= Ġit . split (",") Ċĉ ĉ instruction . forEach Ġ{ Ċĉĉ ĉ population . put ( it . toInt (), Ġpopulation . getValue ( it . toInt ()) Ġ+ Ġ 1 ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ for Ġ( i Ġin Ġ 1 .. day ) Ġ{ Ċĉ ĉ new _ population . put ( 0 , Ġpopulation . getValue ( 1 )) Ċĉ ĉ new _ population . put ( 1 , Ġpopulation . getValue ( 2 )) Ċĉ ĉ new _ population . put ( 2 , Ġpopulation . getValue ( 3 )) Ċĉ ĉ new _ population . put ( 3 , Ġpopulation . getValue ( 4 )) Ċĉ ĉ new _ population . put ( 4 , Ġpopulation . getValue ( 5 )) Ċĉ ĉ new _ population . put ( 5 , Ġpopulation . getValue ( 6 )) Ċĉ ĉ new _ population . put ( 6 , Ġpopulation . getValue ( 7 ) Ġ+ Ġpopulation . getValue ( 0 )) Ċĉ ĉ new _ population . put ( 7 , Ġpopulation . getValue ( 8 )) Ċĉ ĉ new _ population . put ( 8 , Ġpopulation . getValue ( 0 )) ĊĊĉ ĉ for Ġ( j Ġin Ġ 0 .. 8 ) Ġ{ Ċĉĉ ĉ population . put ( j , Ġnew _ population . getValue ( j )) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ for Ġ(( key , Ġvalue ) Ġin Ġpopulation ) Ġ{ Ċĉ ĉ result Ġ= Ġresult Ġ+ Ġvalue Ċ ĉ } ĊĊ ĉ return Ġresult Ċ } Ċ // Ġend :: later nf ish 2 [] Ċ Ċ // fun Ġmain ( args : ĠArray < String >) Ġ{ Ċ ĉ var Ġsolution 1 : ĠInt Ċ ĉ var Ġsolution 2 : ĠLong Ċ Ċ // Ġtag :: part _ 1 [] Ċ ĉ solution 1 Ġ= Ġlater nf ish ( 8 0 ) Ċ // Ġend :: part _ 1 [] Ċ Ċ // Ġtag :: part _ 2 [] Ċ ĉ solution 2 Ġ= Ġlater nf ish 2 ( 2 5 6 ) Ċ // Ġend :: part _ 2 [] Ċ Ċ // Ġtag :: output [] Ċ // Ġprint Ġsolution Ġfor Ġpart Ġ 1 Ċ ĉ println (" ************************ ** ") Ċ ĉ println (" --- ĠDay Ġ 6 : ĠL an tern fish Ġ--- ") Ċ ĉ println (" ************************ ** ") Ċ ĉ println (" Solution Ġfor Ġpart 1 ") Ċ ĉ println (" ĠĠ Ġ$ solution 1 Ġlater nf ish Ġwould Ġbe Ġthere Ġafter Ġ 8 0 Ġdays ") Ċ ĉ println () Ċ // Ġprint Ġsolution Ġfor Ġpart Ġ 2 Ċ ĉ println (" ******************************** * ") Ċ ĉ println (" Solution Ġfor Ġpart 2 ") Ċ ĉ println (" ĠĠ Ġ$ solution 2 Ġlater nf ish Ġwould Ġbe Ġthere Ġafter Ġ 8 0 Ġdays ") Ċ ĉ println () Ċ // Ġend :: output [] ĉ Ċ //}