class ĠR ail Fence Cipher ( private Ġval Ġkey : ĠInt ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsize : ĠInt Ġ= Ġkey Ġ* Ġ 2 Ġ- Ġ 2 ĊĊĠĠĠ Ġfun Ġget Encrypted Data ( input : ĠString ): ĠString Ġ= Ġinput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Indexed Ġ{ Ġi , Ġc Ġ-> ĠPair ( track ( i ), Ġc ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġit . first Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit Ġ-> Ġit . value . map Ġ{ Ġit . second Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("") ĊĊĠĠĠ Ġfun Ġget De crypted Data ( input : ĠString ): ĠString Ġ= Ġ( 0 Ġuntil Ġinput . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy Ġ{ Ġtrack ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . value Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. zip ( input . as Iterable ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . first Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("") ĊĊĠĠĠ Ġprivate Ġfun Ġtrack ( index : ĠInt ) Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġis Correct ( index ) Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠ Ġis Correct ( index Ġ- Ġkey Ġ+ Ġ 1 ) Ġ-> Ġkey Ġ- 1 ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ( 1 Ġuntil Ġkey ). first Ġ{ Ġis Correct ( index Ġ- Ġit ) Ġ|| Ġis Correct ( index Ġ- Ġsize Ġ+ Ġit )} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Correct ( index : ĠInt ): ĠBoolean Ġ= Ġindex Ġ% Ġsize Ġ== Ġ 0 Ċ } Ċ