Кодирование и декодирование
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.
|
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
|
\newpage
|
||||||
\section {Результаты работы программы}
|
\section {Результаты работы программы}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user