Кодирование и декодирование
This commit is contained in:
@@ -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 {Результаты работы программы}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user