From 2781fbabbcffc20e24c6db4fec1694ab092e8feb Mon Sep 17 00:00:00 2001 From: Arity-T Date: Tue, 19 Nov 2024 19:12:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=B4=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B8=20=D0=B4=D0=B5=D0=BA=D0=BE?= =?UTF-8?q?=D0=B4=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab3/report/report.tex | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/lab3/report/report.tex b/lab3/report/report.tex index c425c5e..43bb2fe 100644 --- a/lab3/report/report.tex +++ b/lab3/report/report.tex @@ -208,6 +208,38 @@ His work on quantum algorithms began with a 1985 paper, later expanded in 1992 along with Richard Jozsa, to produce the DeutschJozsa algorithm, one of the first examples of a quantum algorithm that is exponentially faster than any possible deterministic classical algorithm. } + \subsection{Кодирование и декодирование текста с помощью шифра Цезаря} + + Код функций для кодирования и декодирования текста с помощью шифра Цезаря представлен в листинге~\ref{lst:encrypt-caesar}. Функция \texttt{encryptCaesar} принимает алфавит в виде списка символов, смещение и сам текст, а возвращает зашифрованный текст. В её коде используется вспомогательная функция \texttt{indexOf}. Функция принимает список и элемент списка, а возвращает индекс этого элемента. Для создания алфавита используется функция \texttt{createAlphabetFromText}. Она принимает текст, а возвращает алфавит, который в нём используется, в виде списка символов. Для декодирования текста используется функция \texttt{decryptCaesar}, которая, по-сути, является лишь обёрткой над функцией \texttt{encryptCaesar}, так как процесс кодирования осуществляется почти так же как и декодирования. Функция \texttt{decryptCaesar} принимает на вход алфавит, смещение и закодированный текст, а возвращает декодированный текст. + +\begin{lstlisting}[caption={Функции для кодирования и декодирования текста с помощью шифра Цезаря.}, label={lst:encrypt-caesar}] +encryptCaesar :: [Char] -> Int -> String -> String +encryptCaesar alphabet shift text = map caesarChar text + where + caesarChar c = alphabet !! ((indexOf alphabet c + shift) `mod` length alphabet) + +indexOf :: (Eq t) => [t] -> t -> Int +indexOf [] _ = -1 +indexOf (x : xs) target + | x == target = 0 + | otherwise = 1 + indexOf xs target + +createAlphabetFromText :: String -> [Char] +createAlphabetFromText [] = [] +createAlphabetFromText (x:xs) + | x `elem` alphabet = alphabet + | otherwise = x : alphabet + where + alphabet = createAlphabetFromText xs + +decryptCaesar :: [Char] -> Int -> String -> String +decryptCaesar alphabet shift = + encryptCaesar alphabet (alphabetLength - (shift `mod` alphabetLength)) + where + alphabetLength = length alphabet +\end{lstlisting} + + \newpage \section {Результаты работы программы}