|
@@ -0,0 +1,24 @@
|
|
|
+-- Slide 58
|
|
|
+
|
|
|
+import Data.Char
|
|
|
+
|
|
|
+cechar n c = chr ((mod ((ord c) + n - ord 'a') ((ord 'z') - ord 'a' + 1)) + ord 'a')
|
|
|
+
|
|
|
+cesar n = map (cechar n)
|
|
|
+
|
|
|
+inlinecesar n s = map (chr.(+ ord 'a').(flip mod 26).(+ n).(subtract (ord 'a')).ord) s
|
|
|
+
|
|
|
+getCorrectValue::IO Int
|
|
|
+getCorrectValue = do
|
|
|
+ putStrLn "Please give a number in [1, 26["
|
|
|
+ x <- getLine
|
|
|
+ let i = (read x)::Int
|
|
|
+ if i > 0 && i < 26 then return i else getCorrectValue
|
|
|
+
|
|
|
+main::IO ()
|
|
|
+main = do
|
|
|
+ n <- getCorrectValue
|
|
|
+ putStrLn "Please give a word"
|
|
|
+ s <- getLine
|
|
|
+ putStrLn (cesar n s)
|
|
|
+ putStrLn (inlinecesar n s)
|