based/src/Encoding/Rotate.hs

35 lines
968 B
Haskell

module Encoding.Rotate
( rotate ) where
import Data.Maybe (fromMaybe)
import Data.ByteString as B
import qualified Data.ByteString.Char8 as BC
upperCase = BC.pack ['A' .. 'Z']
lowerCase = BC.pack ['a' .. 'z']
-- rotate :: Int -> String -> String
-- rotate n s = map (rotchar n) s
-- where
-- rotchar n c =
-- case (lookup c $ transp n lowerCase) of
-- Just x -> x
-- Nothing -> fromMaybe c (lookup c $ transp n upperCase)
rotate :: Int -> BC.ByteString -> BC.ByteString
rotate n s = BC.map (rotchar n) s
where
rotchar :: Int -> Char -> Char
rotchar n c =
case (lookup c $ transp n lowerCase) of
Just x -> x
Nothing -> fromMaybe c (lookup c $ transp n upperCase)
-- transp :: Int -> [Char] -> [(Char, Char)]
-- transp n x = zip x ((drop n x) ++ (take n x))
transp :: Int -> BC.ByteString -> [(Char, Char)]
transp n x = Prelude.zip (BC.unpack x) (BC.unpack $ BC.append (BC.drop n x) (BC.take n x))