From 64f92b2533880bc41a4b89c4ebd09cf8afe58333 Mon Sep 17 00:00:00 2001 From: lulzette Date: Thu, 27 May 2021 20:44:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A8=D0=B8=D1=84=D1=80=20=D0=A6=D0=B5=D0=B7?= =?UTF-8?q?=D0=B0=D1=80=D1=8F=20=D1=83=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Main.hs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) 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)