Алгоритм наклонного шифрования - PullRequest
0 голосов
/ 22 октября 2019

Строка кодируется с использованием наклонного транспонирующего шифра, который использует целое число numberOfRows. Например, предположим, что входной строкой является «мое имя», а количество строк - 3. Входная строка закодирована наклонным способом в 3 строки, как показано ниже. Пробелы в строке воспринимаются как пустые символы. Выходные данные затем читаются построчно, а пробелы читаются как подчеркивание. Поэтому для примера, приведенного в image,

данная закодированная входная строка «mnes__ya_____mi» читается как «мое имя есть» после декодирования, что является обязательным выводом. Учитывая количество используемых строк и закодированную строку, найдите требуемую выходную строку.

Мне просто нужно как мыслительный процесс.

1 Ответ

0 голосов
/ 22 октября 2019

ПРИМЕЧАНИЕ. При ссылках на строки и столбцы в предложениях я нумерую их индексом, основанным на 1, но в формулах они всегда должны индексироваться нулями. Строка 1 на самом деле является строкой 0. Столбец 1 на самом деле является столбцом 0.

Если мы предполагаем, что столбцы будут добавляться вправо до тех пор, пока мы не достигнем конечной буквы, то это довольно просто. .

Пусть R - количество строк, а C - текущий столбец.

Кодировка:

  • Строка 1 состоит из символов встрока, индекс которой соответствует этому выражению: C * R (при условии нулевого индекса).

  • Строка 2: добавьте один пустой символ впереди, затем 1 + C * R

  • Строка 3: добавить два пустых символа, затем 2 + C * R

  • Строка R: добавить пустые символы R-1, затем R-1 + C* R

Добавьте строки вместе, чтобы получить закодированную строку.


Декодирование:

Пусть L будет длиной строки всимволов.

Каждая строка на один символ длиннее последней, поэтому, учитывая количество строк и длину строки, мы можем определить длину каждой строки.

  • Длина строки 1 равна L / R - ((R - 1) / 2)
  • Длина строки 2 равна L / R - ((R - 1) / 2) + 1
  • Длина строки R равна L / R - ((R - 1) / 2) + (R - 1)

Разделите вашу закодированную строку на подстроки каждой строки и выполните обратный процесс кодирования.

Обрежьте передние пробелы в начале каждого ряда. В N-й строке есть N-1 ведущих пробелов.

Теперь у вас должно быть R строк, которые содержат одинаковое количество символов. Теперь вы просто переходите от столбца к столбцу, беря символ Cth из каждой строки и добавляя его к своему выводу.

Начните с столбца 1, строки 1. Добавьте столбец 1, строку 2, затем столбец 1, строку 3, ... столбец 1, строка R, затем столбец 2, строка 1, затем столбец 2, строка 2 ... и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...