package Ġy 2 0 2 1 . day 0 4 Ċ Ċ type alias ĠBoard List Ġ= ĠList < List < Number >> Ċ Ċ class ĠBoard ( ĊĠĠĠ Ġboard Strings : ĠList < String >, ĊĠĠĠ Ġprivate Ġval Ġdo Di agon als Count : ĠBoolean Ġ= Ġfalse Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġlast Checked Number : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠ Ġprivate Ġval Ġboard : ĠBoard List Ġ= Ġboard Strings . map Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠ Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. split (""" \ s + """. to Regex ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map (:: Number ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck ( draw n Number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has W on ()) Ġreturn ĊĠĠĠĠĠĠĠ Ġboard . flatten (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . value Ġ== Ġdrawn Number ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . check () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Checked Number Ġ= Ġdrawn Number ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas W on (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġboard . has Win ning Row () Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . has Win ning Column () Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( do Di agon als Count Ġ&& Ġboard . has Win ning Diag onal ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Score (): ĠInt Ġ= Ġlast Checked Number Ġ* Ġboard ĊĠĠĠĠĠĠĠ Ġ. flatten () ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ! it . isChecked Ġ} ĊĠĠĠĠĠĠĠ Ġ. sum Of Ġ{ Ġit . value Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠBoard List . has Win ning Row (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġany Ġ{ Ġrow Ġ-> Ġrow . all Ġ{ Ġit . isChecked Ġ} Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠBoard List . has Win ning Column (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġfold ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Ġ= ĠList ( first (). size ) Ġ{ Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġacc : ĠList < Boolean >, Ġrow : ĠList < Number > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġacc . zip ( row ) Ġ{ Ġall Previous W ere Checked , Ġnumber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Previous W ere Checked Ġ&& Ġnumber . isChecked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. any Ġ{ Ġall Checked Ġ-> Ġall Checked Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠBoard List . has Win ning Diag onal (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġfirst (). indices . all Ġ{ Ġindex Ġ-> Ġget ( index )[ index ]. isChecked Ġ} Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst (). indices . all Ġ{ Ġindex Ġ-> Ġget ( index )[ last Index Ġ- Ġindex ]. isChecked Ġ} Ċ } Ċ Ċ class ĠNumber ( init : ĠString ) Ġ{ ĊĊĠĠĠ Ġval Ġvalue : ĠInt Ġ= Ġinit . toInt () ĊĊĠĠĠ Ġprivate Ġvar Ġ_ isChecked : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġval Ġis Checked : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ isChecked ĊĊĠĠĠ Ġfun Ġcheck () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ isChecked Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ }