package Ġ_ 2 0 2 0 Ċ Ċ import Ġa oc Run Ċ Ċ fun Ġmain () Ġ{ Ċ ĉ a oc Run ( pu zzle Input ) Ġ{ Ġinput Ġ-> Ċĉ ĉ val Ġsplit Ġ= Ġinput . split ("\ n ") Ċĉ ĉ val Ġtimestamp Ġ= Ġsplit [ 0 ]. to Long () Ċĉ ĉ val Ġb uses Ġ= Ġsplit [ 1 ]. split ("," ). map NotNull Ġ{ Ġif Ġ( it Ġ== Ġ" x ") Ġnull Ġelse Ġit . to Long () Ġ} Ċĉ ĉ val Ġear liest Times Ġ= Ġb uses . map Ġ{ Ġit Ġto Ġcalc E ar liest Time ( timestamp , Ġit ) Ġ} Ċĉ ĉ val Ġear liest Bus Ġ= Ġear liest Times . min By OrNull Ġ{ Ġit . second Ġ} !! Ċĉ ĉ println ( ear liest Bus ) Ċĉ ĉ return @ a oc Run Ġear liest Bus . first Ġ* Ġ( ear liest Bus . second Ġ- Ġtimestamp ) Ċ ĉ } Ċ ĉ a oc Run ( test Input ) Ġ{ Ġinput Ġ-> Ċĉ ĉ val Ġb uses Ġ= Ġinput . substring After ("\ n "). split ("," ). map Indexed NotNull Ġ{ Ġi , Ġs Ġ-> Ċĉĉ ĉ if Ġ( s Ġ== Ġ" x ") Ġnull Ġelse Ġi . to Long () Ġto Ġs . to Long () Ċĉ ĉ } Ċĉ ĉ // ĠThis Ġisn 't Ġgoing Ġto Ġwork ... Ċĉ ĉ val Ġl cm Ġ= Ġb uses . map Ġ{ Ġit . second Ġ- Ġit . first Ġ}. reduce Ġ{ Ġacc , Ġbus Ġ-> Ġl cm ( acc , Ġbus ) Ġ} Ċĉ ĉ return @ a oc Run Ġl cm Ċ ĉ } Ċ } Ċ Ċ private Ġfun Ġcalc E ar liest Time ( timestamp : ĠLong , Ġbus : ĠLong ): ĠLong Ġ= Ġ(( timestamp Ġ/ Ġbus ) Ġ* Ġbus Ġ+ Ġbus ) Ċ Ċ private Ġfun Ġgcd ( num 1 : ĠLong , Ġnum 2 : ĠLong ): ĠLong Ġ= Ġif Ġ( num 2 Ġ== Ġ 0 L ) Ġnum 1 Ġelse Ġgcd ( num 2 , Ġnum 1 Ġ% Ġnum 2 ) Ċ Ċ private Ġfun Ġl cm ( num 1 : ĠLong , Ġnum 2 : ĠLong ): ĠLong Ġ= Ġnum 1 Ġ/ Ġgcd ( num 1 , Ġnum 2 ) Ġ* Ġnum 2 Ċ Ċ private Ġval Ġtest Input Ġ= Ġ""" Ċ 9 3 9 Ċ 7 , 1 3 , x , x , 5 9 , x , 3 1 , 1 9 Ċ """. trim Indent () Ċ Ċ private Ġval Ġpuzzle Input Ġ= Ġ""" Ċ 1 0 0 4 0 9 8 Ċ 2 3 , x , x , x , x , x , x , x , x , x , x , x , x , 4 1 , x , x , x , x , x , x , x , x , x , 5 0 9 , x , x , x , x , x , x , x , x , x , x , x , x , 1 3 , 1 7 , x , x , x , x , x , x , x , x , x , x , x , x , x , x , 2 9 , x , 4 0 1 , x , x , x , x , x , 3 7 , x , x , x , x , x , x , x , x , x , x , x , x , 1 9 Ċ """. trim Indent () Ċ