package Ġcom . nc ort i . a oc 2 0 2 1 Ċ Ċ object ĠExercise 0 4 Ġ{ ĊĊĠĠĠ Ġprivate Ġfun Ġget Input (): ĠPair < List < Int >, ĠList < Array < IntArray >>> Ġ= ĊĠĠĠĠĠĠĠ Ġget Input As Test (" 0 4 ") Ġ{ Ġsplit ("\ n ") Ġ}. let Ġ{ Ġlines Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcalls Ġ= Ġlines [ 0 ]. split ("," ). map ( String :: toInt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġboards Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. drop ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( String :: trim ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter ( String :: isNotBlank ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Index () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġline Ġ-> Ġline . index Ġ/ Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ(_, Ġlines ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArray ( 5 ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġlines [ i ]. value . split (" Ġ"). filter ( String :: isNotBlank ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Array ( 5 ) Ġ{ Ġj Ġ-> Ġline [ j ]. toInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalls Ġto Ġboards ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck B ingo ( board : ĠArray < IntArray >, Ġrow : ĠInt , Ġcol : ĠInt ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġboard [ row ]. all Ġ{ Ġit Ġ== Ġ- 1 Ġ} Ġ|| Ġboard . map Ġ{ Ġit [ col ] Ġ}. all Ġ{ Ġit Ġ== Ġ- 1 Ġ} ĊĊĠĠĠ Ġfun Ġpart 1 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( calls , Ġboards ) Ġ= Ġget Input () ĊĠĠĠĠĠĠĠ Ġcalls . forEach Ġ{ Ġcall Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġboards . forEach Ġ{ Ġboard Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow : ĠInt Ġ= Ġboard . indexOf First Ġ{ Ġrow Ġ-> Ġcall Ġin Ġrow Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol : ĠInt Ġ= Ġif Ġ( row Ġ== Ġ- 1 ) Ġ- 1 Ġelse Ġboard [ row ]. indexOf First Ġ{ Ġit Ġ== Ġcall Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row Ġ!= Ġ- 1 Ġ&& Ġcol Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard [ row ][ col ] Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check B ingo ( board , Ġrow , Ġcol )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcall Ġ* Ġboard . sum Of Ġ{ Ġit . filter Ġ{ Ġit Ġ!= Ġ- 1 Ġ}. sum () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġerror (" B ingo Ġnever Ġhappened !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpart 2 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( calls , Ġboards Array ) Ġ= Ġget Input () ĊĠĠĠĠĠĠĠ Ġval Ġboards Ġ= Ġboards Array . to Mutable List () ĊĠĠĠĠĠĠĠ Ġcalls . forEach Ġ{ Ġcall Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġboard sTo Remove Ġ= Ġmutable Set Of < Array < IntArray >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġboards . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġboard Ġ= Ġboards [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow : ĠInt Ġ= Ġboard . indexOf First Ġ{ Ġrow Ġ-> Ġcall Ġin Ġrow Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcol : ĠInt Ġ= Ġif Ġ( row Ġ== Ġ- 1 ) Ġ- 1 Ġelse Ġboard [ row ]. indexOf First Ġ{ Ġit Ġ== Ġcall Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row Ġ!= Ġ- 1 Ġ&& Ġcol Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard [ row ][ col ] Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check B ingo ( board , Ġrow , Ġcol )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( boards . size Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcall Ġ* Ġboard . sum Of Ġ{ Ġit . filter Ġ{ Ġit Ġ!= Ġ- 1 Ġ}. sum () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard sTo Remove . add ( board ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġboard sTo Remove . forEach Ġ{ Ġboards . remove ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġerror (" Last Ġboard Ġnot Ġfound !") ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġprintln ( Exercise 0 4 . part 1 ()) ĊĠĠĠ Ġprintln ( Exercise 0 4 . part 2 ()) Ċ } Ċ