package Ġus . j wf . a oc 2 0 1 5 Ċ Ċ import Ġjava . io . Reader Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . flow . reduce Ċ import Ġkotlinx . coroutines . flow . toList Ċ import Ġus . j wf . a oc . Day Ċ import Ġus . j wf . a oc . toMatch Flow Ċ Ċ /** Ċ Ġ* ĠA o C Ġ 2 0 1 5 Ġ- ĠDay Ġ 1 4 Ċ Ġ*/ Ċ class ĠDay 1 4 Re inde er O ly mp ics Ġ: ĠDay < Int , ĠInt > Ġ{ ĊĠ Ġoverride Ġsuspend Ġfun Ġexecute Part 1 ( input : ĠReader ): ĠInt Ġ{ ĊĠĠĠ Ġreturn Ġinput . toMatch Flow ( Re inde er . PATTERN ) ĊĠĠĠĠĠ Ġ. map Ġ{ ĠRe inde er ( it [ 1 ], Ġit [ 2 ]. toInt (), Ġit [ 3 ]. toInt (), Ġit [ 5 ]. toInt ()) Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ Ġr Ġ-> Ġr . distance ( 2 5 0 3 ). also Ġ{ Ġprintln ("$ r : Ġ$ it ") Ġ} Ġ} ĊĠĠĠĠĠ Ġ. reduce (:: max Of ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġsuspend Ġfun Ġexecute Part 2 ( input : ĠReader ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġre inde er Ġ= Ġinput . toMatch Flow ( Re inde er . PATTERN ) ĊĠĠĠĠĠ Ġ. map Ġ{ ĠRe inde er ( it [ 1 ], Ġit [ 2 ]. toInt (), Ġit [ 3 ]. toInt (), Ġit [ 5 ]. toInt ()) Ġ} ĊĠĠĠĠĠ Ġ. toList () ĊĊĠĠĠ Ġrepeat ( 2 5 0 3 ) Ġ{ ĊĠĠĠĠĠ Ġvar Ġmax Ġ= Ġ 0 ĊĠĠĠĠĠ Ġre inde er . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġit . tick () ĊĠĠĠĠĠĠĠ Ġmax Ġ= Ġmax Of ( max , Ġit . location ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġre inde er . filter Ġ{ Ġit . location Ġ== Ġmax Ġ}. forEach Ġ{ Ġit . score ++ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġre inde er . max Of Ġ{ Ġit . score Ġ} ĊĠ Ġ} ĊĊĠ Ġdata Ġclass ĠRe inde er ( val Ġname : ĠString , Ġval Ġspeed M ps : ĠInt , Ġval Ġend urance : ĠInt , Ġval Ġrest Len : ĠInt ) Ġ{ ĊĠĠĠ Ġvar Ġlocation Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġtime Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġscore Ġ= Ġ 0 ĊĊĠĠĠ Ġfun Ġtick () Ġ{ ĊĠĠĠĠĠ Ġval Ġremainder Ġ= Ġtime Ġ% Ġ( end urance Ġ+ Ġrest Len ) ĊĊĠĠĠĠĠ Ġif Ġ( remainder Ġ< Ġend urance ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlocation Ġ+= Ġspeed M ps ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġtime ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdistance ( time : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠ Ġval Ġtotal Lo ops Ġ= Ġtime Ġ/ Ġ( end urance Ġ+ Ġrest Len ) ĊĠĠĠĠĠ Ġval Ġloop Time Ġ= Ġtotal Lo ops Ġ* Ġ( end urance Ġ+ Ġrest Len ) ĊĠĠĠĠĠ Ġprintln ("$ name Ġ- Ġtotal Lo ops : Ġ$ total Lo ops , Ġloop Time Ġ= Ġ$ loop Time ") ĊĠĠĠĠĠ Ġval Ġextra Ġ= Ġmin Of ( time Ġ- Ġloop Time , Ġend urance ) Ġ* Ġspeed M ps ĊĠĠĠĠĠ Ġreturn Ġtotal Lo ops Ġ* Ġspeed M ps Ġ* Ġend urance Ġ+ Ġextra ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠ Ġval ĠP ATTERN Ġ= ĊĠĠĠĠĠĠĠ Ġ" ([ A - Za - z ]+) Ġcan Ġfly Ġ( \\ d +) Ġkm / s Ġfor Ġ( \\ d +) Ġsecond ( s )? , Ġbut Ġthen Ġmust Ġrest Ġfor Ġ( \\ d +) Ġsecond ( s )?. ". to Regex () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ }