diff --git a/src/Main.hs b/src/Main.hs index 455d784..27d9194 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -13,10 +13,23 @@ import Data.Maybe -} -- Шифр Цезаря. Сдвиг на N символов в X сторону. +-- Input, Direction(Y=right, N=left), Number +-- Algo: если сдвигаем вправо, то к алфавиту +-- [*начало+сдвиг*..'z'] прибавляем алфавит ['a'..*конец-сдвиг*] +-- если сдвиг влево, то [] : [] +caesarEnc :: String -> Bool -> Int -> String +caesarEnc input direction numb = do + let alp = ['a'..'z'] + if direction + then encEr input alp (concat [(drop numb alp), (take numb alp)]) + else "NaN" + +-- Подменялка алфавита. Input, AlphabetOrig, AlphabetNew +encEr :: String -> String -> String -> String +encEr input alp encAlp = map (\x -> encAlp !! (fromJust (elemIndex x alp))) input -- Шифр Атбаша. Инверсия алфавита. -- a = e, r=d и т.д. - atbashEnc :: String -> String atbashEnc input = do let alp = ['a'..'z'] @@ -47,4 +60,5 @@ main = do putStrLn "Шифр Атбаша, переворот алфавита:" print . atbashEnc $ "test" print . atbashDec $ ( atbashEnc "test" ) - + putStrLn "Шифт Цезаря (вправо на 3):" + print (caesarEnc "test" True 3)