RosettaCodeData/Task/Caesar-cipher/Haskell/caesar-cipher.hs
Ingy döt Net 86c034bb8b new files
2013-04-10 12:38:42 -07:00

17 lines
418 B
Haskell

import Data.Char (ord, chr)
import Data.Ix (inRange)
caesar :: Int -> String -> String
caesar k = map f
where
f c
| inRange ('a','z') c = tr 'a' k c
| inRange ('A','Z') c = tr 'A' k c
| otherwise = c
unCaesar :: Int -> String -> String
unCaesar k = caesar (-k)
-- char addition
tr :: Char -> Int -> Char -> Char
tr base offset char = chr $ ord base + (ord char - ord base + offset) `mod` 26