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 {Результаты работы программы}