package Ġnl . s ander p . a oc . a oc 2 0 2 1 . day 1 1 Ċ Ċ import Ġnl . s ander p . a oc . a oc 2 0 2 1 .* Ċ import Ġjava . util .* Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= Ġread Resource (" Day 1 1 . txt "). lines (). map Ġ{ Ġline Ġ-> Ġline . map Ġ{ Ġit . as Digit () Ġ} Ġ} ĊĊĠĠĠ Ġval Ġ( answer 1 , Ġduration 1 ) Ġ= Ġmeasure Duration < Int > Ġ{ Ġpart One ( input ) Ġ} ĊĠĠĠ Ġprintln (" Part Ġone : Ġ$ answer 1 Ġ( to ok Ġ${ duration 1 . pretty Print () }) ") ĊĊĠĠĠ Ġval Ġ( answer 2 , Ġduration 2 ) Ġ= Ġmeasure Duration < Int > Ġ{ Ġpart Two ( input ) Ġ} ĊĠĠĠ Ġprintln (" Part Ġtwo : Ġ$ answer 2 Ġ( to ok Ġ${ duration 2 . pretty Print () }) ") Ċ } Ċ Ċ private Ġfun Ġpart One ( grid : ĠList < List < Int >> ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġstate Ġ= Ġgrid . map Ġ{ Ġit . to Typed Array () Ġ}. to Typed Array () ĊĠĠĠ Ġreturn Ġ( 1 .. 1 0 0 ). fold ( 0 ) Ġ{ Ġx , Ġ_ Ġ-> Ġx Ġ+ Ġstep ( state ) Ġ} Ċ } Ċ Ċ private Ġfun Ġpart Two ( grid : ĠList < List < Int >> ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġstate Ġ= Ġgrid . map Ġ{ Ġit . to Typed Array () Ġ}. to Typed Array () ĊĠĠĠ Ġvar Ġfl ashes Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĊĠĠĠ Ġwhile Ġ( fl ashes Ġ< Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfl ashes Ġ= Ġstep ( state ) ĊĠĠĠĠĠĠĠ Ġi Ġ+= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġi Ċ } Ċ Ċ private Ġfun Ġstep ( state : ĠArray < Array < Int >> ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġwill Flash Ġ= ĠLinkedList < Point 2 D >() ĊĠĠĠ Ġval Ġfl ashed Ġ= Ġmutable Set Of < Point 2 D >() ĊĊĠĠĠ Ġfor Ġ( y Ġin Ġ 0 .. 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġ.. 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate [ y ][ x ] Ġ+= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state [ y ][ x ] Ġ> Ġ 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwill Flash . add ( x Ġto Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġwhile Ġ( will Flash . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġwill Flash . poll () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( fl ashed . add ( point )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġpoint . points Around (). filter Ġ{ Ġ( 0 .. 9 ). contains ( it . x ) Ġ&& Ġ( 0 .. 9 ). contains ( it . y ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate [ p . y ][ p . x ] Ġ+= Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state [ p . y ][ p . x ] Ġ> Ġ 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwill Flash . add ( p ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( point Ġin Ġfl ashed ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstate [ point . y ][ point . x ] Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġfl ashed . size Ċ }