/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 Ġby ĠT odd ĠG ins berg Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠAd vent Ġof ĠCode Ġ 2 0 1 8 , ĠDay Ġ 1 0 Ġ- ĠThe ĠSt ars ĠAlign Ċ Ġ* Ċ Ġ* ĠProblem ĠDescription : Ġhttp :// ad vent of code . com / 2 0 1 8 / day / 1 0 Ċ Ġ* ĠBlog ĠPost / Comment ary : Ġhttps :// tod d . gin s berg . com / post / ad vent - of - code / 2 0 1 8 / day 1 0 / Ċ Ġ*/ Ċ package Ġcom . gin s berg . ad vent 2 0 1 8 Ċ Ċ class ĠDay 1 0 ( raw Input : ĠList < String >) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmessage : ĠMessage Ġ= ĠMessage ( raw Input . map Ġ{ ĠLight . of ( it ) Ġ}) ĊĊĠĠĠ Ġfun Ġsolve Part 1 (): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġmessage . resolve Message (). first ĊĊĠĠĠ Ġfun Ġsolve Part 2 (): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġmessage . resolve Message (). second ĊĊĠĠĠ Ġprivate Ġclass ĠMessage ( val Ġlights : ĠList < Light >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġresolve Message (): ĠPair < String , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlast Area Ġ= ĠLong . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġthis Area Ġ= Ġsky Area () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtime To Resolve Ġ= Ġ- 1 Ġ// ĠAccount Ġfor Ġextra Ġstep Ġat Ġthe Ġend ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( this Area Ġ< Ġlast Area ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmove Lights () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Area Ġ= Ġthis Area ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Area Ġ= Ġsky Area () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime To Resolve ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove Lights ( false ) Ġ// ĠWe 've Ġmoved Ġone Ġtoo Ġfar , Ġback Ġeverything Ġup Ġone . ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPair ( this . toString (), Ġtime To Resolve ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġmove Lights ( forward : ĠBoolean Ġ= Ġtrue ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlights . forEach Ġ{ Ġit . move ( forward ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsky Area (): ĠLong Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrange X (). span Ġ* Ġrange Y (). span ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġrange X (): ĠInt Range Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt Range ( lights . min By Ġ{ Ġit . x Ġ} !!. x , Ġlights . max By Ġ{ Ġit . x Ġ} !!. x ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġrange Y (): ĠInt Range Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt Range ( lights . min By Ġ{ Ġit . y Ġ} !!. y , Ġlights . max By Ġ{ Ġit . y Ġ} !!. y ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlight Set Ġ= Ġlights . map Ġ{ ĠPair ( it . x , Ġit . y ) Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrange Y (). join ToString ( separator Ġ= Ġ"\ n ") Ġ{ Ġy Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrange X (). map Ġ{ Ġx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Pair ( x , Ġy ) Ġin Ġlight Set ) Ġ'#' Ġelse Ġ'.' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. join ToString ( separator Ġ= Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠLight ( var Ġx : ĠInt , Ġvar Ġy : ĠInt , Ġval Ġd X : ĠInt , Ġval Ġd Y : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġmove ( forward : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( forward ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ+= Ġd X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ+= Ġd Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ-= Ġd X ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ-= Ġd Y ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġof ( input : ĠString ): ĠLight Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . split (",", Ġ"< ", Ġ"> "). map Ġ{ Ġit . trim () Ġ}. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLight ( this [ 1 ]. toInt (), Ġthis [ 2 ]. toInt (), Ġthis [ 4 ]. toInt (), Ġthis [ 5 ]. toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ