package Ġdays Ċ Ċ class ĠDay 4 Ġ: ĠDay ( 4 ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġpart One (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnumber Seq Ġ= Ġinput List [ 0 ]. split ("," ). map Ġ{ Ġit . to Long () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġboards Ġ= Ġinput List . drop ( 1 ). chunk ed ( 6 ). map Ġ{ Ġblock Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock . drop ( 1 ). map Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . split (" Ġ"). filter Ġ{ Ġit . isNotEmpty () Ġ}. map Ġ{ Ġit . to Long () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġnumbers Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBoard ( numbers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġnumber Seq . forEach Indexed Ġ{ Ġnumber Index , Ġnumber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġboards . forEach Indexed Ġ{ Ġboard Index , Ġboard Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . mark ( number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( board . is W on ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Board Ġ#$ board Index Ġwon Ġon Ġturn Ġ#$ number Index Ġ= Ġ$ number ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġboard . win Score ( number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ" No Ġanswer Ġfound " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart Two (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnumber Seq Ġ= Ġinput List [ 0 ]. split ("," ). map Ġ{ Ġit . to Long () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġboards Ġ= Ġinput List . drop ( 1 ). chunk ed ( 6 ). map Ġ{ Ġblock Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock . drop ( 1 ). map Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline . split (" Ġ"). filter Ġ{ Ġit . isNotEmpty () Ġ}. map Ġ{ Ġit . to Long () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ Ġnumbers Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBoard ( numbers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġboards Left Ġ= Ġboards . size ĊĠĠĠĠĠĠĠ Ġnumber Seq . forEach Indexed Ġ{ Ġnumber Index , Ġnumber Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġboards . forEach Indexed Ġ{ Ġboard Index , Ġboard Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! board . is W on ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboard . mark ( number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( board . is W on ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġboards Left Ġ-= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( boards Left Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Board Ġ#$ board Index Ġwas Ġlast Ġto Ġwin Ġon Ġturn Ġ#$ number Index Ġ= Ġ$ number ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġboard . win Score ( number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ" No Ġanswer Ġfound " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠBoard ( private Ġval Ġnumbers : ĠList < List < Long >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsize Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmarked Ġ= ĠArray ( 5 ) Ġ{ ĠArray ( 5 ) Ġ{ Ġfalse Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġwon Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġfun Ġmark ( number : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( numbers [ i ][ j ] Ġ== Ġnumber ) Ġmarked [ i ][ j ] Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis W on (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( won ) Ġreturn Ġwon ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrow All Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow All Ġ= Ġrow All Ġ&& Ġmarked [ i ][ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( row All ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwon Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcolumn All Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn All Ġ= Ġcolumn All Ġ&& Ġmarked [ i ][ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( column All ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwon Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwon ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwon ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġwin Score ( last Called : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġun marked Sum Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun marked Sum Ġ+= Ġif Ġ(! marked [ i ][ j ]) Ġnumbers [ i ][ j ] Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlast Called Ġ* Ġun marked Sum ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ