Как сделать декодер и енкодер с нуля

И так, как мне из этой строчки Learn english please! каждую букву первую букву сдвинуть налево 13раз а каждую вторую букву направо 7 раз, и как при получении закодированного текста этим скриптом расшифровать его?


Ответы (1 шт):

Автор решения: Zhihar

алгоритм:

  1. идти по позиции в строке от 0 до len(text)

  2. четную и нечётную позицию буквы проверять через pos % 2 == 0

  3. найти позицию буквы в словаре через dictionary.index(letter), где словарь содержит все буквы английского алфавита

  4. вычислить новую позицию через pos_new = (pos_old + shift + len(dictionary)) % pos_old + shift + len(dictionary) - такой подход сделан чтобы и отрицательные позиции корректно обрабатывать

  5. извлечь букву в словаре по новой позиции и заменить старую (или собрать новую строку)

при расшифровке просто менять знак у смещения влево или вправо

dictionary = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ! '

#    ENCODE
def encode(text):
  encoded = ''
  left = 13
  right = 7
  
  for pos in range(len(text)):
    index = dictionary.index(text[pos])
    if pos % 2 == 0:
      index = (index + right + len(dictionary)) % len(dictionary)
    else:
      index = (index - left + len(dictionary)) % len(dictionary)
    encoded += dictionary[index]
    
  return encoded

#    DECODE
def decode(encoded_text):
  decoded = ''
  left = 13
  right = 7
  
  for pos in range(len(encoded_text)):
    index = dictionary.index(encoded_text[pos])
    if pos % 2 == 0:
      index = (index - right + len(dictionary)) % len(dictionary)
    else:
      index = (index + left + len(dictionary)) % len(dictionary)
    decoded += dictionary[index]
  return decoded
→ Ссылка