package Ġde . di k od am . ad vent of code 2 0 1 9 . utils Ċ Ċ import Ġkotlin . math . abs Ċ Ċ fun Ġ< T > Ġwith Timer ( block : Ġ() Ġ-> ĠT ): ĠPair < T , ĠLong > Ġ{ ĊĠĠĠ Ġval Ġstart Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠ Ġval Ġresult Ġ= Ġblock () ĊĠĠĠ Ġval Ġend Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠ Ġreturn ĠPair ( result , Ġend Ġ- Ġstart ) Ċ } Ċ Ċ fun Ġman h att an Distance ( x : ĠInt , Ġy : ĠInt ) Ġ= Ġabs ( x ) Ġ+ Ġabs ( y ) Ċ Ċ // Ġn oob Ġimpl Ġbecause ĠI 'm Ġtoo Ġlazy Ġto Ġthink Ċ fun Ġl cm ( a : ĠLong , Ġb : ĠLong ): ĠLong Ġ{ ĊĠĠĠ Ġval Ġ( smaller , Ġbigger ) Ġ= Ġif Ġ( a Ġ< Ġb ) Ġa Ġto Ġb Ġelse Ġb Ġto Ġa ĊĠĠĠ Ġreturn Ġgenerate Sequence ( big ger ) Ġ{ Ġit Ġ+ Ġbigger Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ% Ġsmaller Ġ== Ġ 0 L Ġ} ĊĠĠĠĠĠĠĠ Ġ. first () Ċ } Ċ Ċ fun Ġ< T , ĠR > Ġcompare Equals By ( first List : ĠList < T >, Ġsecond List : ĠList < T >, Ġtransform : Ġ( T ) Ġ-> ĠR ) Ġ= ĊĠĠĠ Ġfirst List . map ( transform ) Ġ== Ġsecond List . map ( transform ) ĊĊ Ċ data Ġclass ĠT iming Data ( ĊĠĠĠ Ġprivate Ġval Ġsetup Duration : ĠLong Ġ= Ġ- 1 , ĊĠĠĠ Ġprivate Ġval Ġt 1 duration : ĠLong Ġ= Ġ- 1 , ĊĠĠĠ Ġprivate Ġval Ġt 2 duration : ĠLong Ġ= Ġ- 1 Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġprint () Ġ= ĊĠĠĠĠĠĠĠ Ġprintln (" Pre paration Ġtime : Ġ${ setup Duration } ms . ĠTask Ġ 1 Ġduration : Ġ${ t 1 duration } ms . ĠTask Ġ 2 Ġduration : Ġ${ t 2 duration } ms .") Ċ } Ċ Ċ fun ĠString . toInt Code (): ĠInt Array Ġ= ĊĠĠĠ Ġthis . split ("," ). map Ġ{ Ġit . toInt () Ġ}. to IntArray () ĊĊ Ċ fun Ġ< T > ĠSet < T >. per mutate ( var arg Ġliterals : ĠT ): ĠList < List < T >> Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( this . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠlistOf ( literals . toList ()) ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġthis . flatMap Ġ{ Ġliteral Ġ-> Ġthis . minus ( literal ). per mutate (* literals , Ġliteral ) Ġ} Ċ } Ċ Ċ fun Ġ< T Ġ: ĠAny > Ġapply Repeated ly ( times : ĠInt , Ġseed : ĠT , Ġnext Function : Ġ( T ) Ġ-> ĠT ): ĠT Ġ= ĊĠĠĠ Ġgenerate Sequence ( seed , Ġnext Function ) ĊĠĠĠĠĠĠĠ Ġ. take ( times Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ. last () Ċ