Learn You a Haskell presents the Caesar Cipher:
The Caesar cipher is a primitive method of encoding messages by shifting each character in them by a fixed number of positions in the alphabet
Since I'm not limiting this cipher to letters, it's not actually the Caesarian Cipher. Thanks to Anonymous. This implementation is only a Substitution Cipher.
Here's my implementation:
import Data.Char (ord, chr) encode :: Int -> String -> String encode n = map $ shift' n where shift' x = chr . (+ x) . ord decode :: Int -> String -> String decode n = map $ shift' n where shift' x = chr . abs . ((-) x) . ord
*Main Data.Char> encode 1 "AAA" "BBB" *Main Data.Char> *Main Data.Char> decode 1 "BBB" "AAA"
I don't like that I'm using
abs in my
decode. How can I write a function (through currying) that will subtract X from it?
Also, please critique my implementation.