Шифр Цезаря ура
This commit is contained in:
parent
7e8959363c
commit
64f92b2533
18
src/Main.hs
18
src/Main.hs
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user