Получение правильного вывода кода для чтения матрицы - PullRequest
0 голосов
/ 02 ноября 2019

У меня проблемы с получением правильного вывода кода. Учитывая порядок ключей, я хочу прочитать столбцы в этом порядке. Напримересли бы у меня было [4,2,3,1], я бы прочитал первый столбец последним, второй столбец вторым, третий столбец третьим, последний столбец первым. Сами числа - это порядок, а индекс - номер столбца.

Я уже создал матрицу, основанную на длине ключа. Заполнены в оставшихся местах '-1'

 col = len(key_order) 

# calculate maximum row of the matrix 
row = int(math.ceil(len(text) / col)) 

fill_null = int((row * col) - msg_len) 
msg_lst.extend('-1' * fill_null) 


matrix = [msg_lst[i: i + col]  
          for i in range(0, len(msg_lst), col)] 

    # read matrix column-wise
for i in range(col):
    current_index = key_order[i] 
    ciphertext += ''.join([row[current_index]  
                      for row in matrix]) 

Вышеуказанные работы. Однако это работает только в том случае, если ключ имеет разные значения. Мы можем получить тестовые случаи, когда ключ имеет дубликаты, например 5623143, в которых я должен читать значения по горизонтали, а не по вертикали. Любое направление о том, как получить мой код для этого? это объясняется лучше здесь: http://www.crypto -it.net / eng / simple / myszkowski-transposition.html? tab = 1

   Key: 5623143
   text:A Midsummer Nights Dream
 matrix would look like: [['A', 'M', 'I', 'D', 'S', 'U', 'M'], ['M', 'E', 'R', 'N', 'I', 'G', 'H'], ['T', 'S', 'D', 'R', 'E', 'A', 'M']]
correct result:   SIEIRDDMNHRMUGAAMTMES
my result: SIEUGAMESIRDAMTDNRIRD
...