import Ġjava . util .* Ċ Ċ class ĠC aver n ( private Ġval Ġoct opi : ĠArray < IntArray >) Ġ{ ĊĠĠĠ Ġconstructor ( lines : ĠList < String >) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ( lines . map Ġ{ Ġit . map Ġ{ Ġc Ġ-> Ġc . digit ToInt () Ġ}. to IntArray () Ġ}. to Typed Array ()) ĊĊĠĠĠ Ġfun Ġstep (): ĠPair < Ca ver n , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġincrement ed Ġ= ĠArray ( 1 0 ) Ġ{ ĠInt Array ( 1 0 ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġflash Sp ots Ġ= ĠLinkedList < Pair < Int , ĠInt >>() ĊĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġ 1 0 ). forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġ 1 0 ). forEach Ġ{ Ġj Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincrement ed [ i ][ j ] Ġ= Ġoct opi [ i ][ j ] Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( increment ed [ i ][ j ] Ġ== Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflash Sp ots Ġ+= Ġi Ġto Ġj ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfl ashed Already Ġ= Ġflash Sp ots . to Mutable Set () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( flash Sp ots . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( ci , Ġc j ) Ġ= Ġflash Sp ots . poll () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ(- 1 Ġuntil Ġ 2 ). forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(- 1 Ġuntil Ġ 2 ). forEach Ġinner @{ Ġj Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoint Ġ= Ġ( ci Ġ+ Ġi ) Ġto Ġ( cj Ġ+ Ġj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( pi , Ġpj ) Ġ= Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( point Ġin Ġfl ashed Already ) Ġreturn @ inner ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pi Ġ>= Ġ 0 Ġ&& Ġpj Ġ>= Ġ 0 Ġ&& Ġpi Ġ< Ġ 1 0 Ġ&& Ġpj Ġ< Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincrement ed [ pi ][ pj ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( increment ed [ pi ][ pj ] Ġ== Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfl ashed Already Ġ+= Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflash Sp ots . add ( point ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġ 1 0 ). forEach Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġ 1 0 ). forEach Ġ{ Ġj Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincrement ed [ i ][ j ] Ġ= Ġif Ġ( increment ed [ i ][ j ] Ġ> Ġ 9 ) Ġ 0 Ġelse Ġincrement ed [ i ][ j ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠC aver n ( increment ed ) Ġto Ġfl ashed Already . size ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġdata Ġ= Ġread Input File (" day 1 1 ") ĊĠĠĠ Ġfun Ġpart 1 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġca ver n Ġ= ĠC aver n ( data ) ĊĠĠĠĠĠĠĠ Ġvar Ġfl ashes Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( new Ca ver n , Ġnew Fl ashes ) Ġ= Ġca ver n . step () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġca ver n Ġ= Ġnew Ca ver n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfl ashes Ġ+= Ġnew Fl ashes ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfl ashes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpart 2 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġca ver n Ġ= ĠC aver n ( data ) ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( new Ca ver n , Ġnew Fl ashes ) Ġ= Ġca ver n . step () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġca ver n Ġ= Ġnew Ca ver n ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( new Fl ashes Ġ!= Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġi ĊĠĠĠ Ġ} ĊĠĠĠ Ġprintln (" Result Ġpart 1 : Ġ${ part 1 () }") ĊĊĠĠĠ Ġprintln (" Result Ġpart 2 : Ġ${ part 2 () }") Ċ } ĊĊ