package Ġcom . github . war ri or zz . a oc čĊč Ċ import Ġjava . nio . file . Files č Ċ import Ġjava . nio . file . Path čĊč Ċ private Ġfun Ġmain () Ġ{ čĊĠĠĠ Ġprintln (" Day Ġ 0 4 :") čĊčĊĠĠĠ Ġval Ġlines Ġ= ĠFiles . read All Lines ( Path . of ("./ input / day - 0 4 . txt ")) čĊčĊĠĠĠ Ġval Ġpicked Numbers Ġ= Ġlines [ 0 ]. split ("," ). map Ġ{ Ġit . toInt () Ġ} čĊčĊĠĠĠ Ġval Ġboards Ġ= Ġlines . sub List ( from Index Ġ= Ġ 2 , Ġlines . size ). window ed ( 6 , Ġ 6 ). map Ġ{ čĊĠĠĠĠĠĠĠ ĠBoard ( it . sub List ( 0 , Ġ 5 ). map Ġ{ Ġstring Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring . split (" Ġ"). filter Ġ{ Ġfilter Ġ-> Ġfilter Ġ!= Ġ"" Ġ}. to Mutable List (). map Ġ{ Ġcell Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCell ( cell . toInt ()) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. to Mutable List () čĊĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġval Ġfinal Scores Ġ= Ġboards . map Ġ{ čĊĠĠĠĠĠĠĠ Ġit . get Final Score ( pick ed Numbers ) čĊĠĠĠ Ġ} čĊĠĠĠ Ġprintln (" Solution Ġpart Ġ 1 : Ġ${ final Scores . min By OrNull Ġ{ Ġit . first Ġ} !!. second }") čĊĠĠĠ Ġprintln (" Solution Ġpart Ġ 2 : Ġ${ final Scores . max By OrNull Ġ{ Ġit . first Ġ} !!. second }") č Ċ } čĊč Ċ data Ġclass ĠBoard ( čĊĠĠĠ Ġval Ġcontent : ĠList < Mutable List < Cell >> č Ċ ) Ġ{ čĊĠĠĠ Ġfun Ġget Final Score ( marked Numbers : ĠList < Int >): ĠPair < Int , ĠInt > Ġ{ čĊĠĠĠĠĠĠĠ Ġmarked Numbers . forEach Indexed Ġnumbers @{ Ġindex , Ġint Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . forEach Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . forEach Ġ{ Ġcell Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cell . number Ġ== Ġint ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell . is Marked Ġ= Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check W on ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġindex Ġto Ġint Ġ* Ġcontent . map Ġ{ Ġcell List Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcell List . map Ġ{ Ġcell Ġ-> Ġif Ġ( cell . is Marked ) Ġ 0 Ġelse Ġcell . number Ġ}. reduce Ġ{ Ġacc , Ġi Ġ-> Ġacc Ġ+ Ġi Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. reduce Ġ{ Ġacc , Ġi Ġ-> Ġacc Ġ+ Ġi Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġ- 1 Ġto Ġ- 1 čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġcheck W on (): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġwon Ġ= Ġfalse čĊĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġ 5 ). forEach Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content [ it ][ 0 ]. is Marked Ġ&& Ġcontent [ it ][ 1 ]. is Marked Ġ&& Ġcontent [ it ][ 2 ]. is Marked Ġ&& Ġcontent [ it ][ 3 ]. is Marked Ġ&& Ġcontent [ it ][ 4 ]. is Marked ) Ġwon Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content [ 0 ][ it ]. is Marked Ġ&& Ġcontent [ 1 ][ it ]. is Marked Ġ&& Ġcontent [ 2 ][ it ]. is Marked Ġ&& Ġcontent [ 3 ][ it ]. is Marked Ġ&& Ġcontent [ 4 ][ it ]. is Marked ) Ġwon Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġwon čĊĠĠĠ Ġ} č Ċ } čĊč Ċ data Ġclass ĠCell ( val Ġnumber : ĠInt , Ġvar Ġis Marked : ĠBoolean Ġ= Ġfalse ) čĊč Ċ fun Ġday 0 4 () Ġ= Ġmain () čĊ