package Ġf if teen čĊč Ċ class ĠDisk Def ragment ation Challenge Ġ{ čĊĠĠĠ Ġfun Ġused S quares ( salt : ĠString ): ĠInt Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġdisk Grid Ġ= Ġget Disk Grid ( salt ) čĊĠĠĠĠĠĠĠ Ġreturn Ġdisk Grid . sum By Ġ{ Ġit . count Ġ{ Ġit Ġ} Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġget Disk Grid ( salt : ĠString ): ĠList < List < Boolean >> Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġ( 0 .. 1 2 7 ). map Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġk not Hash ( salt Ġ+ Ġ'-' Ġ+ Ġit . toString ()). flatMap Ġ{ Ġto Bit List ( it ) Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġto Bit List ( n : ĠInt ): ĠList < Boolean > Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 7 Ġdown To Ġ 0 ). map Ġ{ Ġ( n Ġshr Ġit ) Ġ% Ġ 2 Ġ== Ġ 1 Ġ} čĊčĊĠĠĠ Ġfun Ġregion Count ( salt : ĠString ): ĠInt Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġdisk Grid Ġ= Ġget Disk Grid ( salt ) čĊĠĠĠĠĠĠĠ Ġval Ġregion Grid Ġ= Ġbuild Int Disk Grid ( 1 2 8 ) čĊčĊĠĠĠĠĠĠĠ Ġvar Ġregion Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġdisk Grid . forEach Indexed Ġ{ Ġx , Ġdisk List Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisk List . forEach Indexed Ġ{ Ġy , Ġ_ Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Unknown Region ( x , Ġy , Ġdisk Grid , Ġregion Grid )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregion ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf lood Fill ( disk Grid , Ġregion Grid , Ġx , Ġy , Ġregion ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġregion čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġbuild Int Disk Grid ( size : ĠInt ): ĠList < Mutable List < Int >> Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ ĠList ( size , Ġ{ ĠMutable List ( size , Ġ{ Ġ 0 Ġ}) Ġ}) čĊčĊĠĠĠ Ġprivate Ġfun Ġf lood Fill ( disk Grid : ĠList < List < Boolean >>, Ġregion Grid : ĠList < Mutable List < Int >>, Ġx : ĠInt , Ġy : ĠInt , Ġregion : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġregion Grid [ x ][ y ] Ġ= Ġregion čĊĠĠĠĠĠĠĠ Ġborders ( x , Ġy ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġis Unknown Region ( it , Ġdisk Grid , Ġregion Grid ) Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġf lood Fill ( disk Grid , Ġregion Grid , Ġit . first , Ġit . second , Ġregion ) Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġborders ( x : ĠInt , Ġy : ĠInt ): ĠList < Pair < Int , ĠInt >> Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf (- 1 , Ġ 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĠlistOf ( Pair ( x Ġ+ Ġit , Ġy ), ĠPair ( x , Ġy Ġ+ Ġit )) Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . first Ġin Ġ 0 .. 1 2 7 Ġ&& Ġit . second Ġin Ġ 0 .. 1 2 7 Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġis Unknown Region ( p : ĠPair < Int , ĠInt >, Ġdisk Grid : ĠList < List < Boolean >>, Ġregion Grid : ĠList < List < Int >> ): ĠBoolean Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Unknown Region ( p . first , Ġp . second , Ġdisk Grid , Ġregion Grid ) čĊčĊĠĠĠ Ġprivate Ġfun Ġis Unknown Region ( x : ĠInt , Ġy : ĠInt , Ġdisk Grid : ĠList < List < Boolean >>, Ġregion Grid : ĠList < List < Int >> ): ĠBoolean Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisk Grid [ x ][ y ] Ġ&& Ġregion Grid [ x ][ y ] Ġ== Ġ 0 čĊčĊčĊĠĠĠ Ġ/* čĊĠĠĠĠ Ġ* ĠI Ġtotally Ġst ole Ġthis Ġone Ġfrom ĠR u ud . ĠSorry . čĊĠĠĠĠ Ġ* ĠI Ġmade Ġmy Ġk not Ġhash Ġversion Ġin ĠPython Ġbecause Ġat Ġthat Ġpoint Ġin Ġtime ĠI Ġdidn 't Ġhave Ġaccess Ġto Ġthe Ġcomputer Ġthat ĠI Ġuse Ġfor ĠKotlin . čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġk not Hash ( input : ĠString ): ĠList < Int > Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġlengths Ġ= Ġinput . map Ġ{ Ġit . toInt () Ġ} Ġ+ Ġ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 By Ġ{ Ġ( 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 ) č Ċ }