package Ġa oc 2 0 2 0 . day 0 1 _ report _ repair Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġutil . solve ( 7 3 3 7 1 , Ġ:: part One ) ĊĠĠĠ Ġutil . solve ( 1 2 7 6 4 2 3 1 0 , Ġ:: part Two ) Ċ } Ċ Ċ private Ġconst Ġval ĠTARGET Ġ= Ġ 2 0 2 0 Ċ Ċ private Ġfun ĠList < Int >. find Add ends ( total : ĠInt ): ĠPair < Int , ĠInt >? Ġ{ ĊĠĠĠ Ġval Ġset Ġ= Ġhash Set Of < Int >() ĊĠĠĠ Ġthis . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( it Ġ>= Ġtotal ) Ġreturn @ forEach ĊĠĠĠĠĠĠĠ Ġval Ġrest Ġ= Ġtotal Ġ- Ġit ĊĠĠĠĠĠĠĠ Ġif Ġ( set . contains ( rest )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( rest , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset . add ( it ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġnull Ċ } Ċ Ċ fun Ġpart One ( input : ĠString ): ĠInt Ġ= Ġinput ĊĠĠĠ Ġ. lines () ĊĠĠĠ Ġ. map ( Integer :: parseInt ) ĊĠĠĠ Ġ. find Add ends ( TARGET ) ĊĠĠĠ Ġ? . let Ġ{ Ġ( a , Ġb ) Ġ-> Ġa Ġ* Ġb Ġ} ĊĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" No Ġpair Ġfound ? !") Ċ Ċ fun Ġpart Two ( input : ĠString ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġitems Ġ= Ġinput ĊĠĠĠĠĠĠĠ Ġ. lines () ĊĠĠĠĠĠĠĠ Ġ. map ( Integer :: parseInt ) ĊĠĠĠ Ġitems . forEach Indexed Ġ{ Ġi , Ġit Ġ-> ĊĠĠĠĠĠĠĠ Ġitems . sub List ( 0 , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Add ends ( TARGET Ġ- Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġ( a , Ġb ) Ġ-> Ġreturn Ġa Ġ* Ġb Ġ* Ġit Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġthrow ĠIllegalStateException (" No Ġpair Ġfound ? !") Ċ } Ċ