package Ġnet . o leg g . a oc . year 2 0 1 9 . day 3 Ċ Ċ import Ġnet . o leg g . a oc . so med ay . Some Day Ċ import Ġnet . o leg g . a oc . utils . Directions Ċ import Ġnet . o leg g . a oc . utils . Vector 2 D Ċ import Ġnet . o leg g . a oc . year 2 0 1 9 . Day Of 2 0 1 9 Ċ import Ġkotlin . math . abs Ċ Ċ /** Ċ Ġ* ĠSee Ġ[ Year Ġ 2 0 1 9 , ĠDay Ġ 3 ]( https :// ad vent of code . com / 2 0 1 9 / day / 3 ) Ċ Ġ*/ Ċ object ĠDay 3 Ġ: ĠDay Of 2 0 1 9 ( 3 ) Ġ{ ĊĠ Ġoverride Ġfun Ġfirst ( data : ĠString ): ĠAny ? Ġ{ ĊĠĠĠ Ġval Ġ( wire 1 , Ġwire 2 ) Ġ= Ġdata ĊĠĠĠĠĠ Ġ. trim () ĊĠĠĠĠĠ Ġ. lines () ĊĠĠĠĠĠ Ġ. map Ġ{ Ġline Ġ-> Ġline . split ("," ). map Ġ{ ĠDirection s . valueOf ( it . substring ( 0 , Ġ 1 )) Ġto Ġit . substring ( 1 ). toInt () Ġ} Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ Ġwire Ġ-> ĊĠĠĠĠĠĠĠ Ġwire . fold ( listOf ( Vector 2 D ())) Ġ{ Ġacc , Ġ( dir , Ġlength ) Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġacc . last () ĊĠĠĠĠĠĠĠĠĠ Ġreturn @ fold Ġacc Ġ+ Ġ( 1 .. length ). map Ġ{ Ġstart Ġ+ Ġdir . step Ġ* Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ Ġit . toSet () Ġ- ĠVector 2 D () Ġ} ĊĊĠĠĠ Ġreturn Ġ( wire 1 . intersect ( wire 2 )). map Ġ{ Ġabs ( it . x ) Ġ+ Ġabs ( it . y ) Ġ}. min OrNull () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġsecond ( data : ĠString ): ĠAny ? Ġ{ ĊĠĠĠ Ġval Ġ( wire 1 , Ġwire 2 ) Ġ= Ġdata ĊĠĠĠĠĠ Ġ. trim () ĊĠĠĠĠĠ Ġ. lines () ĊĠĠĠĠĠ Ġ. map Ġ{ Ġline Ġ-> Ġline . split ("," ). map Ġ{ ĠDirection s . valueOf ( it . substring ( 0 , Ġ 1 )) Ġto Ġit . substring ( 1 ). toInt () Ġ} Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ Ġwire Ġ-> ĊĠĠĠĠĠĠĠ Ġwire . fold ( listOf ( Vector 2 D () Ġto Ġ 0 )) Ġ{ Ġacc , Ġ( dir , Ġlength ) Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġacc . last () ĊĠĠĠĠĠĠĠĠĠ Ġreturn @ fold Ġacc Ġ+ Ġ( 1 .. length ). map Ġ{ Ġstart . first Ġ+ Ġdir . step Ġ* Ġit Ġto Ġstart . second Ġ+ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ Ġit . drop ( 1 ) Ġ} ĊĠĠĠĠĠ Ġ. map Ġ{ Ġwire Ġ-> ĊĠĠĠĠĠĠĠ Ġwire ĊĠĠĠĠĠĠĠĠĠ Ġ. groupBy ( key Selector Ġ= Ġ{ Ġit . first Ġ}, Ġvalue Transform Ġ= Ġ{ Ġit . second Ġ}) ĊĠĠĠĠĠĠĠĠĠ Ġ. map Values Ġ{ Ġ(_, Ġpoints ) Ġ-> Ġpoints . min OrNull () Ġ?: Ġ 1 _ 0 0 0 _ 0 0 0 Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġwire 1 . map Values Ġ{ Ġ( point , Ġdistance ) Ġ-> Ġdistance Ġ+ Ġ( wire 2 [ point ] Ġ?: Ġ 1 _ 0 0 0 _ 0 0 0 ) Ġ} ĊĠĠĠĠĠ Ġ. min By OrNull Ġ{ Ġit . value Ġ} ĊĠĠĠĠĠ Ġ? . value ĊĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ= ĠSome Day . main ify ( Day 3 ) Ċ