class ĠDay 9 Ġ: ĠDay Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġas Int (): ĠInt Ġ= Ġ 9 ĊĊĠĠĠ Ġoverride Ġfun Ġpart 1 Input Name (): ĠString Ġ= Ġ" day 9 " ĊĊĠĠĠ Ġoverride Ġfun Ġpart 1 ( input : ĠList < String >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp reamble Ġ= Ġ 2 5 ĊĠĠĠĠĠĠĠ Ġreturn Ġfirst Non Match ( pre amble , Ġinput ). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠList < Long >. sums (): ĠSequence < Long > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Long >() ĊĠĠĠĠĠĠĠ Ġthis . forEach Indexed Ġ{ Ġi , Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . forEach Indexed Ġ{ Ġj , Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġj ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( x Ġ+ Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . as Sequence () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpart 2 Input Name (): ĠString Ġ= Ġ" day 9 " ĊĊĠĠĠ Ġoverride Ġfun Ġpart 2 ( input : ĠList < String >): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp reamble Ġ= Ġ 2 5 ĊĠĠĠĠĠĠĠ Ġval Ġinvalid Number Ġ= Ġfirst Non Match ( pre amble , Ġinput ) ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġinput . map ( String :: to Long ) ĊĠĠĠĠĠĠĠ Ġval Ġprefix Sum s Ġ= Ġvalues . prefix Sum () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġprefix Sum s . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 1 Ġuntil Ġprefix Sum s . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbegin Ġ= Ġprefix Sum s [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġprefix Sum s [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Ġ- Ġbegin Ġ== Ġinvalid Number ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinner Ġ= Ġvalues . sub List ( i , Ġj ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġinner . min OrNull () Ġ?: ĠLong . MIN _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġinner . max OrNull () Ġ?: ĠLong . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( min Ġ+ Ġmax ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ"- 1 " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠList < Long >. prefix Sum (): ĠList < Long > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . fold ( listOf ()) Ġ{ Ġresult List , Ġel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result List . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult List Ġ+ Ġel ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult List Ġ+ Ġ( result List . last () Ġ+ Ġel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfirst Non Match ( pre amble Count : ĠInt , Ġinput : ĠList < String >): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnumber List Ġ= Ġinput . map ( String :: to Long ). window ed ( pre amble Count Ġ+ Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġvar Ġfirst Non Match Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġfor Ġ( numbers Ġin Ġnumber List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Ġ= Ġnumbers . last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġto Check Ġ= Ġnumbers . drop Last ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġto Check . sums (). any Ġ{ Ġit Ġ== Ġlast Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! match ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Non Match Ġ= Ġlast ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfirst Non Match ĊĠĠĠ Ġ} Ċ }