package Ġad vent of code . y 2 0 1 7 Ċ Ċ import Ġad vent of code . Ad vent Solution Ċ Ċ object ĠDay 1 0 Ġ: ĠAd vent Solution ( 2 0 1 7 , Ġ 1 0 , Ġ" K not ĠHash ") Ġ{ ĊĊ ĉ override Ġfun Ġsolve Part One ( input : ĠString ): ĠString Ġ{ Ċĉ ĉ val Ġlengths Ġ= Ġinput . split ("," ). map Ġ{ Ġit . toInt () Ġ} ĊĊĉ ĉ val Ġlist Ġ= Ġk not ( lengths ) Ċĉ ĉ return Ġ( list [ 0 ] Ġ* Ġlist [ 1 ]). toString () Ċ ĉ } ĊĊ ĉ override Ġfun Ġsolve Part Two ( input : ĠString ): ĠString Ġ{ Ċĉ ĉ val Ġdense Hash Ġ= Ġk not Hash ( input ) Ċĉ ĉ return Ġdense Hash . join ToString ("") Ġ{ Ġit . toString ( 1 6 ). pad Start ( 2 , Ġ' 0 ') Ġ} Ċ ĉ } Ċ } Ċ Ċ fun Ġk not Hash ( input : ĠString ): ĠList < Int > Ġ{ Ċ ĉ val Ġlengths Ġ= Ġinput . map Ġ{ Ġit . code Ġ} Ġ+ ĠlistOf ( 1 7 , Ġ 3 1 , Ġ 7 3 , Ġ 4 7 , Ġ 2 3 ) Ċ ĉ val Ġrounds Ġ= Ġ( 1 .. 6 4 ). flatMap Ġ{ Ġlengths Ġ} ĊĊ ĉ val Ġsparse Hash Ġ= Ġk not ( rounds ) Ċ ĉ return Ġsparse Hash . chunk ed ( 1 6 ) Ġ{ Ġit . reduce ( Int :: xor ) Ġ} Ċ } Ċ Ċ private Ġfun Ġk not ( lengths : ĠList < Int >): ĠList < Int > Ġ{ Ċ ĉ val Ġinitial Ġ= Ġ( 0 .. 2 5 5 ). toList () Ċ ĉ val Ġlist Ġ= Ġlengths . fold Indexed ( initial ) Ġ{ Ġskip , Ġlist , Ġlength Ġ-> Ċĉ ĉ val Ġk not Ġ= Ġlist . drop ( length ) Ġ+ Ġlist . take ( length ). reversed () Ċĉ ĉ k not . rotate Left ( skip ) Ċ ĉ } ĊĊ ĉ // undo Ġall Ġprevious Ġrot ations Ċ ĉ val Ġrotation Ġ= Ġlengths . with Index () Ċĉĉ ĉ . sum Of Ġ{ Ġ( i , Ġl ) Ġ-> Ġi Ġ+ Ġl Ġ} Ġ% Ġlist . size Ċ ĉ return Ġlist . rotate Left ( list . size Ġ- Ġrotation ) Ċ } Ċ Ċ private Ġfun ĠList < Int >. rotate Left ( n : ĠInt ) Ġ= Ġdrop ( n Ġ% Ġsize ) Ġ+ Ġtake ( n Ġ% Ġsize ) Ċ