package Ġnet . o leg g . a oc . year 2 0 1 6 . day 1 7 Ċ Ċ import Ġnet . o leg g . a oc . so med ay . Some Day Ċ import Ġnet . o leg g . a oc . utils . md 5 Ċ import Ġnet . o leg g . a oc . year 2 0 1 6 . Day Of 2 0 1 6 Ċ Ċ /** Ċ Ġ* ĠSee Ġ[ Year Ġ 2 0 1 6 , ĠDay Ġ 1 7 ]( https :// ad vent of code . com / 2 0 1 6 / day / 1 7 ) Ċ Ġ*/ Ċ object ĠDay 1 7 Ġ: ĠDay Of 2 0 1 6 ( 1 7 ) Ġ{ ĊĠ Ġoverride Ġfun Ġfirst ( data : ĠString ): ĠAny ? Ġ{ ĊĠĠĠ Ġval Ġstart Ġ= ĠTrip le ( 1 , Ġ 1 , Ġ"") ĊĠĠĠ Ġval Ġmoves Ġ= ĠlistOf ( ĊĠĠĠĠĠ ĠTrip le ( 0 , Ġ- 1 , Ġ' U '), ĊĠĠĠĠĠ ĠTrip le ( 0 , Ġ 1 , Ġ' D '), ĊĠĠĠĠĠ ĠTrip le (- 1 , Ġ 0 , Ġ' L '), ĊĠĠĠĠĠ ĠTrip le ( 1 , Ġ 0 , Ġ' R ') ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġqueue Ġ= Ġmutable ListOf ( start ) ĊĊĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠ Ġval Ġ( x , Ġy , Ġtail ) Ġ= Ġqueue . remove At ( 0 ) ĊĊĠĠĠĠĠ Ġval Ġnext Ġ= Ġmoves ĊĠĠĠĠĠĠĠ Ġ. zip ("$ data $ tail ". md 5 (). substring ( 0 , Ġ 4 ). uppercase (). toList ()) ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . second Ġin Ġ" BC DEF " Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠTrip le ( x Ġ+ Ġit . first . first , Ġy Ġ+ Ġit . first . second , Ġtail Ġ+ Ġit . first . third ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . first Ġin Ġ 1 .. 4 Ġ&& Ġit . second Ġin Ġ 1 .. 4 Ġ} ĊĊĠĠĠĠĠ Ġqueue . addAll ( next ) ĊĊĠĠĠĠĠ Ġval Ġfound Ġ= Ġnext . find Ġ{ Ġit . first Ġ== Ġ 4 Ġ&& Ġit . second Ġ== Ġ 4 Ġ} Ġ!= Ġnull ĊĠĠĠ Ġ} Ġwhile Ġ(! found ) ĊĊĠĠĠ Ġreturn Ġqueue . first Ġ{ Ġit . first Ġ== Ġ 4 Ġ&& Ġit . second Ġ== Ġ 4 Ġ}. third ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġsecond ( data : ĠString ): ĠAny ? Ġ{ ĊĠĠĠ Ġval Ġstart Ġ= ĠTrip le ( 1 , Ġ 1 , Ġ"") ĊĠĠĠ Ġval Ġmoves Ġ= ĠlistOf ( ĊĠĠĠĠĠ ĠTrip le ( 0 , Ġ- 1 , Ġ' U '), ĊĠĠĠĠĠ ĠTrip le ( 0 , Ġ 1 , Ġ' D '), ĊĠĠĠĠĠ ĠTrip le (- 1 , Ġ 0 , Ġ' L '), ĊĠĠĠĠĠ ĠTrip le ( 1 , Ġ 0 , Ġ' R ') ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġvar Ġbest Ġ= Ġ 0 ĊĠĠĠ Ġval Ġqueue Ġ= Ġmutable ListOf ( start ) ĊĊĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠ Ġval Ġ( x , Ġy , Ġtail ) Ġ= Ġqueue . remove At ( 0 ) ĊĊĠĠĠĠĠ Ġif Ġ( x Ġ== Ġ 4 Ġ&& Ġy Ġ== Ġ 4 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbest Ġ= Ġmax Of ( best , Ġtail . length ) ĊĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġval Ġnext Ġ= Ġmoves ĊĠĠĠĠĠĠĠ Ġ. zip ("$ data $ tail ". md 5 (). substring ( 0 , Ġ 4 ). uppercase (). toList ()) ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . second Ġin Ġ" BC DEF " Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠTrip le ( x Ġ+ Ġit . first . first , Ġy Ġ+ Ġit . first . second , Ġtail Ġ+ Ġit . first . third ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . first Ġin Ġ 1 .. 4 Ġ&& Ġit . second Ġin Ġ 1 .. 4 Ġ} ĊĊĠĠĠĠĠ Ġqueue . addAll ( next ) ĊĠĠĠ Ġ} Ġwhile Ġ( queue . isNotEmpty ()) ĊĊĠĠĠ Ġreturn Ġbest . toString () ĊĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ= ĠSome Day . main ify ( Day 1 7 ) Ċ