const Ġval ĠSIZE Ġ= Ġ 5 ĊĊ Ċ type alias ĠB ingo Game Ġ= ĠPair < List < Int >, ĠMutable List < Board >> Ċ Ċ private Ġfun Ġmake ( lines : ĠList < String >): ĠB ingo Game Ġ{ ĊĠĠĠ Ġval Ġnumbers Ġ= Ġlines [ 0 ]. split ("," ). map Ġ{ Ġit . toInt () Ġ} ĊĠĠĠ Ġval Ġboards Ġ= Ġmutable ListOf < Board >() ĊĊĠĠĠ Ġvar Ġline Ġ= Ġ 2 ĊĠĠĠ Ġwhile Ġ( line Ġ< Ġlines . size ) Ġ{ ĊĠĠĠĠĠĠĠ Ġboards . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBoard . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines [ line ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines [ line Ġ+ Ġ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines [ line Ġ+ Ġ 2 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines [ line Ġ+ Ġ 3 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlines [ line Ġ+ Ġ 4 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġline Ġ+= Ġ 6 Ġ Ġ// Ġspace ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnumbers Ġto Ġboards Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġval Ġdata Ġ= Ġread Input File (" day 4 ") ĊĠĠĠ Ġfun Ġpart 1 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( calls , Ġboards ) Ġ= Ġmake ( data ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( num Ġin Ġcalls ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv ictor Ġ= Ġboards . find Ġ{ Ġit . such Mean ing ( num ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v ictor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġv ictor . getS cores ( num ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpart 2 (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( calls , Ġboards ) Ġ= Ġmake ( data ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġnum ) Ġin Ġcalls . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv ict ors Ġ= Ġboards . filter Ġ{ Ġit . such Mean ing ( num ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv ict ors . forEach Ġ{ Ġboards . remove ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( boards . size Ġ== Ġ 0 Ġ|| Ġi Ġ== Ġcalls . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġv ict ors . last (). getS cores ( num ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" Part 1 Ġ${ part 1 () }") ĊĠĠĠ Ġprintln (" Part 2 Ġ${ part 2 () }") Ċ } Ċ Ċ class ĠBoard ( numbers : ĠList < Int >) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġrows Ġ= ĠArray ( SIZE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable Set Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumbers [ SIZE Ġ* Ġit ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumbers [ SIZE Ġ* Ġit Ġ+ Ġ 1 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumbers [ SIZE Ġ* Ġit Ġ+ Ġ 2 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumbers [ SIZE Ġ* Ġit Ġ+ Ġ 3 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumbers [ SIZE Ġ* Ġit Ġ+ Ġ 4 ] ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġcols Ġ= ĠArray ( SIZE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable Set Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumbers [ it ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumbers [ it Ġ+ ĠSIZE ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumbers [ it Ġ+ Ġ 1 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumbers [ it Ġ+ Ġ 1 5 ], ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnumbers [ it Ġ+ Ġ 2 0 ] ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsuch Mean ing ( value : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġrows . forEach Ġ{ Ġit . remove ( value ) Ġ} ĊĠĠĠĠĠĠĠ Ġcols . forEach Ġ{ Ġit . remove ( value ) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrows . any Ġ{ Ġit . isEmpty () Ġ} Ġ|| Ġcols . any Ġ{ Ġit . isEmpty () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Scores ( num : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrows . flatMap Ġ{ Ġit . toList () Ġ}. sum () Ġ* Ġnum ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( var arg Ġraw : ĠString ): ĠBoard Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBoard ( raw . join ToString (" Ġ"). trim (). split ("\\ s +". to Regex ()). map Ġ{ Ġit . toInt () Ġ}) ĊĠĠĠ Ġ} Ċ } ĊĊĊ