fork download
  1. import Data.Char (ord, chr, isUpper, isAlpha)
  2.  
  3. encrypt :: Int -> String -> String
  4. encrypt = (<$>) . shift
  5.  
  6. decrypt :: Int -> String -> String
  7. decrypt = encrypt . negate
  8.  
  9. shift :: Int -> Char -> Char
  10. shift key char
  11. |isAlpha char = chr $ intAlpha + mod ((ord char - intAlpha) + key) 26
  12. |otherwise = char
  13. where
  14. intAlpha =
  15. ord
  16. (if isUpper char
  17. then 'A'
  18. else 'a')
  19.  
  20. solve :: String -> Int -> Int -> IO ()
  21. solve str loop numLoops = do
  22. let encode = encrypt (loop) str
  23. let out = "Caesar " ++ show loop ++ ": " ++ encode
  24. let c = loop + 1
  25. if loop /= numLoops
  26. then solve str c numLoops
  27. else putStrLn ""
  28.  
  29. main :: IO ()
  30. main = do
  31. let message = "I love Haskell"
  32. let key = 10
  33. let originalMessage = "Original: " ++ message
  34. putStrLn originalMessage
  35. let encrypted = encrypt key message
  36. let encryptedMessage = "Encrypted: " ++ encrypted
  37. putStrLn encryptedMessage
  38. let decrypted = decrypt key encrypted
  39. let decryptedMessage = "Decrypted: " ++ decrypted
  40. putStrLn decryptedMessage
  41. solve message 0 26
Success #stdin #stdout 0s 4456KB
stdin
Standard input is empty
stdout
Original: I love Haskell
Encrypted: S vyfo Rkcuovv
Decrypted: I love Haskell
Caesar 0: I love Haskell
Caesar 1: J mpwf Ibtlfmm
Caesar 2: K nqxg Jcumgnn
Caesar 3: L oryh Kdvnhoo
Caesar 4: M pszi Lewoipp
Caesar 5: N qtaj Mfxpjqq
Caesar 6: O rubk Ngyqkrr
Caesar 7: P svcl Ohzrlss
Caesar 8: Q twdm Piasmtt
Caesar 9: R uxen Qjbtnuu
Caesar 10: S vyfo Rkcuovv
Caesar 11: T wzgp Sldvpww
Caesar 12: U xahq Tmewqxx
Caesar 13: V ybir Unfxryy
Caesar 14: W zcjs Vogyszz
Caesar 15: X adkt Wphztaa
Caesar 16: Y belu Xqiaubb
Caesar 17: Z cfmv Yrjbvcc
Caesar 18: A dgnw Zskcwdd
Caesar 19: B ehox Atldxee
Caesar 20: C fipy Bumeyff
Caesar 21: D gjqz Cvnfzgg
Caesar 22: E hkra Dwogahh
Caesar 23: F ilsb Exphbii
Caesar 24: G jmtc Fyqicjj
Caesar 25: H knud Gzrjdkk
Caesar 26: I love Haskell