ПРИМЕЧАНИЕ. При ссылках на строки и столбцы в предложениях я нумерую их индексом, основанным на 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 ... и т. д.