data Ġclass ĠEncoding Bounds ( val Ġlower Bound : ĠInt , Ġval Ġupper Bound : ĠInt ) Ċ Ċ fun Ġencoding Bounds For Char Value ( c : ĠChar ): ĠEncoding Bounds ? Ġ{ ĊĠĠĠ Ġval Ġlower Case Bounds Ġ= ĠEncoding Bounds (' a '. toInt (), Ġ' z '. toInt ()) ĊĠĠĠ Ġval Ġupper Case Bounds Ġ= ĠEncoding Bounds (' A '. toInt (), Ġ' Z '. toInt ()) ĊĠĠĠ Ġreturn Ġwhen Ġ( c ) Ġ{ ĊĠĠĠĠĠĠĠ Ġin Ġ' a ' .. ' z ' Ġ-> Ġlower Case Bounds ĊĠĠĠĠĠĠĠ Ġin Ġ' A ' .. ' Z ' Ġ-> Ġupper Case Bounds ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġcalculate Rot ated Char ( char : ĠChar , Ġrotation : ĠInt , Ġbounds : ĠEncoding Bounds ): ĠChar Ġ{ ĊĠĠĠ Ġval Ġrotated Char Val Ġ= Ġchar . toInt () Ġ+ Ġrotation ĊĠĠĠ Ġval Ġremainder Ġ= Ġrotated Char Val Ġ- Ġ( bounds . upper Bound Ġ+ Ġ 1 ) ĊĠĠĠ Ġreturn Ġ( if Ġ( rot ated Char Val Ġ> Ġbounds . upper Bound ) Ġbounds . lower Bound Ġ+ Ġremainder Ġelse Ġrotated Char Val ). to Char () Ċ } Ċ Ċ fun Ġparse Input ( args : ĠArray < String >): ĠString ? Ġ{ ĊĠĠĠ Ġif Ġ( args . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġtext Ġ= Ġargs [ 0 ] ĊĠĠĠ Ġif Ġ( text . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtext Ċ } Ċ Ċ fun Ġrot 1 3 Encode ( text : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġval Ġrotation Ġ= Ġ 1 3 ĊĊĠĠĠ Ġreturn Ġtext . map Ġ{ Ġc Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġencoding Bounds For Char Value ( c ) ĊĠĠĠĠĠĠĠ Ġif Ġ( bounds Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . toString () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculate Rot ated Char ( c , Ġrotation , Ġbounds ). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. reduce Ġ{ Ġencoded Text , Ġencoded Char Ġ-> ĊĠĠĠĠĠĠĠ Ġencoded Text Ġ+ Ġencoded Char ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġstr To Encode Ġ= Ġparse Input ( args ) ĊĠĠĠ Ġif Ġ( str To Encode Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Usage : Ġplease Ġprovide Ġa Ġstring Ġto Ġencrypt ") ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( rot 1 3 Encode ( str To Encode )) ĊĠĠĠ Ġ} Ċ } Ċ