package Ġday 0 4 Ċ Ċ import Ġread Input Ċ Ċ fun Ġmain () Ġ{ ĊĊĠĠĠ Ġdata Ġclass ĠCell ( var Ġvalue : ĠInt Ġ= Ġ 0 , Ġvar Ġmarked : ĠBoolean Ġ= Ġfalse ) ĊĊĠĠĠ Ġclass ĠBoard ( data : ĠList < String >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġcells : ĠArray < Array < Cell >> Ġ= ĠArray ( 5 ) Ġ{ ĠArray ( 5 ) Ġ{ ĠCell () Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . forEach Indexed Ġ{ Ġidx 1 , Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . trim (). split ("\\ s +". to Regex ()). forEach Indexed Ġ{ Ġidx 2 , Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcells [ idx 1 ][ idx 2 ]. value Ġ= Ġv . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcount Col Ġ= ĠInt Array ( 5 ) Ġ{ Ġ 0 Ġ}; ĊĠĠĠĠĠĠĠ Ġvar Ġscore Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfun Ġmark AndGet Score ( marker : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( score Ġ!= Ġ 0 ) Ġreturn Ġscore ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsum Of Un marked Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfull Row Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcells . forEach Indexed Ġ{ Ġ_, Ġcells 2 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Row Ġ= Ġcells 2 . on Each Indexed Ġ{ Ġcol , Ġcell Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cell . value Ġ== Ġmarker ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . marked Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Col [ col ] ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! cell . marked ) Ġsum Of Un marked Ġ+= Ġcell . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. count Ġ{ Ġit . marked Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( count Row Ġ== Ġ 5 ) Ġfull Row Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( full Row Ġ|| Ġcount Col . any Ġ{ Ġit Ġ== Ġ 5 Ġ}) Ġscore Ġ= Ġmarker Ġ* Ġsum Of Un marked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġscore ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Input ( seq : ĠList < String >) Ġ= Ġseq [ 0 ]. split ("," ). map Ġ{ Ġit . toInt () Ġ}. toList () ĊĊĠĠĠ Ġfun Ġget Board s ( seq : ĠList < String >) Ġ= Ġseq . as Sequence (). drop ( 2 ). window ed ( 5 , Ġ 6 ). map Ġ{ ĠBoard ( it ) Ġ}. toList () ĊĊĠĠĠ Ġfun Ġpart 1 ( seq : ĠList < String >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrandom Input Ġ= Ġget Input ( seq ) ĊĠĠĠĠĠĠĠ Ġval Ġboards Ġ= Ġget Board s ( seq ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrandom Input . map Ġ{ Ġmarker Ġ-> Ġboards . max Of Ġ{ Ġit . mark AndGet Score ( marker ) Ġ} Ġ}. first () Ġ{ Ġit Ġ> Ġ 0 Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpart 2 ( seq : ĠList < String >): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġboards Ġ= Ġget Board s ( seq ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġget Input ( seq ). as Sequence (). map Ġ{ Ġmarker Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġboards . filter Ġ{ Ġit . score Ġ== Ġ 0 Ġ}. map Ġ{ Ġit . mark AndGet Score ( marker ) Ġ}. min Of Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ}. first Ġ{ Ġit Ġ> Ġ 0 Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġval Ġtest Seq Ġ= Ġread Input (" day 0 4 / test ") ĊĠĠĠ Ġval Ġinput Seq Ġ= Ġread Input (" day 0 4 / input ") ĊĊĠĠĠ Ġval Ġres 1 Ġ= Ġpart 1 ( test Seq ) ĊĠĠĠ Ġcheck ( res 1 Ġ== Ġ 4 5 1 2 ) Ġ{ Ġ" Expected Ġ 4 5 1 2 Ġbut Ġgot Ġ$ res 1 " Ġ} ĊĠĠĠ Ġprintln (" Part 1 : Ġ${ part 1 ( input Seq )} ") ĊĊĠĠĠ Ġval Ġres 2 Ġ= Ġpart 2 ( test Seq ) ĊĠĠĠ Ġcheck ( res 2 Ġ== Ġ 1 9 2 4 ) Ġ{ Ġ" Expected Ġ 1 9 2 4 Ġbut Ġgot Ġ$ res 2 " Ġ} ĊĠĠĠ Ġprintln (" Part 2 : Ġ${ part 2 ( input Seq )} ") Ċ } Ċ