package Ġdays Ċ Ċ import Ġsplit On Blank Ċ Ċ class ĠDay 1 6 Ġ: ĠDay ( 1 6 ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġticket Fields : ĠList < Ticket Field > ĊĠĠĠ Ġprivate Ġval Ġyour Ticket : ĠList < Int > ĊĠĠĠ Ġprivate Ġval Ġnearby Tickets : ĠList < List < Int >> ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( fields , Ġyour , Ġnearby ) Ġ= Ġif Ġ( custom Input Ġ!= Ġnull ) Ġcustom Input !!. split On Blank () Ġelse Ġinput List . split On Blank () ĊĠĠĠĠĠĠĠ Ġticket Fields Ġ= Ġfields ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠRegex ("( \\ w + Ġ? \\ w + ?): Ġ( \\ d +- \\ d +) Ġor Ġ( \\ d +- \\ d +) "). match Ent ire ( it ) !!. group Values Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ(_, Ġname , Ġrange 1 , Ġrange 2 ) Ġ-> ĠTicket Field ( name , Ġdash Range ToList ( range 1 ). plus ( dash Range ToList ( range 2 ))) Ġ} ĊĠĠĠĠĠĠĠ Ġyour Ticket Ġ= Ġyour . last (). split ("," ). map Ġ{ Ġit . toInt () Ġ} ĊĠĠĠĠĠĠĠ Ġnearby Tickets Ġ= Ġnearby . drop ( 1 ). map Ġ{ Ġit . split ("," ). map Ġ{ Ġit . toInt () Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdash Range ToList ( dash Range : ĠString ): ĠList < Int > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( lo , Ġhi ) Ġ= Ġdash Range . split ("- "). map Ġ{ Ġit . toInt () Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ( lo .. hi ). toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ 2 3 9 2 5 ĊĠĠĠ Ġoverride Ġfun Ġpart One (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnearby Tickets ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġticket Ġ-> Ġticket . map Ġ{ Ġit Ġto Ġticket Fields . not Valid For Any ( it ) Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatten (). filter Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sum By Ġ{ Ġit . first Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ 9 6 4 3 7 3 1 5 7 6 7 3 ĊĠĠĠ Ġoverride Ġfun Ġpart Two (): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠgetS olved Ticket () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . first . startsWith (" depart ure ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( 1 L ) Ġ{ Ġacc , Ġelem Ġ-> Ġacc Ġ* Ġelem . second Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġtodo Ġmake Ġmore Ġfunctional ! ĊĠĠĠ Ġfun ĠgetS olved Ticket (): ĠList < Pair < String , ĠInt >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnearby Tickets Ġ= Ġnearby Tickets . filter Not Ġ{ Ġticket Ġ-> Ġticket . any Ġ{ Ġticket Fields . not Valid For Any ( it ) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġall Rows Ġ= Ġ( 0 .. near by Tickets . first (). last Index ). map Ġ{ Ġidx Ġ-> Ġnearby Tickets . map Ġ{ Ġit [ idx ] Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġpotential Fields Ġ= Ġall Rows . map Ġ{ Ġr Ġ-> Ġticket Fields . filter Ġ{ Ġit . valid . contains All ( r ) Ġ}. map Ġ{ Ġit . name Ġ}. to Mutable List () Ġ}. to Mutable List () ĊĊĠĠĠĠĠĠĠ Ġval Ġreal Fields Ġ= ĠArray ( ticket Fields . size ) Ġ{ Ġ"" Ġ} ĊĠĠĠĠĠĠĠ Ġwhile Ġ( real Fields . any Ġ{ Ġit Ġ== Ġ"" Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpotential Fields . forEach Indexed Ġ{ Ġindex , Ġpotential s Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpotential s . isEmpty () Ġ-> Ġreturn @ forEach Indexed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpotential s . size Ġ== Ġ 1 Ġ-> Ġreal Fields [ index ] Ġ= Ġpotential s . remove At ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġpotential s . remove If Ġ{ Ġreal Fields . contains ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġreal Fields . zip ( your Ticket ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠTicket Field ( val Ġname : ĠString , Ġval Ġvalid : ĠList < Int >, Ġvar Ġvalue : ĠInt Ġ= Ġ- 1 ) ĊĊĠĠĠ Ġprivate Ġfun ĠList < Ticket Field >. not Valid For Any ( value : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . none Ġ{ Ġit . valid . contains ( value ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġhack Ġfor Ġtesting ĊĠĠĠĠĠĠĠ Ġvar Ġcustom Input : ĠList < String >? Ġ= Ġnull ĊĠĠĠ Ġ} Ċ } ĊĊ