Шифр Цезаря ура

This commit is contained in:
lulzette 2021-05-27 20:44:15 +03:00
parent 7e8959363c
commit 64f92b2533

View File

@ -13,10 +13,23 @@ import Data.Maybe
-} -}
-- Шифр Цезаря. Сдвиг на N символов в X сторону. -- Шифр Цезаря. Сдвиг на 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 и т.д. -- a = e, r=d и т.д.
atbashEnc :: String -> String atbashEnc :: String -> String
atbashEnc input = do atbashEnc input = do
let alp = ['a'..'z'] let alp = ['a'..'z']
@ -47,4 +60,5 @@ main = do
putStrLn "Шифр Атбаша, переворот алфавита:" putStrLn "Шифр Атбаша, переворот алфавита:"
print . atbashEnc $ "test" print . atbashEnc $ "test"
print . atbashDec $ ( atbashEnc "test" ) print . atbashDec $ ( atbashEnc "test" )
putStrLn "Шифт Цезаря (вправо на 3):"
print (caesarEnc "test" True 3)