Как сделать декодер и енкодер с нуля
И так, как мне из этой строчки Learn english please! каждую букву первую букву сдвинуть налево 13раз а каждую вторую букву направо 7 раз, и как при получении закодированного текста этим скриптом расшифровать его?
Ответы (1 шт):
алгоритм:
идти по позиции в строке от
0доlen(text)четную и нечётную позицию буквы проверять через
pos % 2 == 0найти позицию буквы в словаре через
dictionary.index(letter), где словарь содержит все буквы английского алфавитавычислить новую позицию через
pos_new = (pos_old + shift + len(dictionary)) % pos_old + shift + len(dictionary)- такой подход сделан чтобы и отрицательные позиции корректно обрабатыватьизвлечь букву в словаре по новой позиции и заменить старую (или собрать новую строку)
при расшифровке просто менять знак у смещения влево или вправо
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