Алгоритм шифрования, используемый для создания зашифрованного текста [закрыто]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Алгоритм шифрования, используемый для создания зашифрованного текста [закрыто]

Сообщение Anonymous »


Вам дана строка зашифрованного текста (зашифрованный текст).
Алгоритм шифрования, используемый для создания зашифрованного текста, просто сдвигает
все буквы алфавита символов исходной (незашифрованной) строки
на такое же количество. Но вы не знаете, какова эта сумма. Напишите функцию
decipher, которая принимает на вход зашифрованную строку и
возвращает исходную незашифрованную строку. Например, представьте, что
исходное сообщение было «привет», и мы сдвинули каждую букву на две.
Результирующий зашифрованный текст будет «jgnnq».
Если исходное сообщение звучало так: «Тестирование кодирования — это весело и сложно!»
и мы сдвинули каждый символ на два, получившийся зашифрованный текст
был бы «Eqfkpi vguvu ctg hwp cpf ejcnngpikpi!»
Функция decipher принимает два аргумента: зашифрованный текст и слово,
которое, как мы знаем, появилось в исходном открытом тексте. Используя эти подсказки,
функция должна вывести исходный текст. Для ответа на этот вопрос мы будем использовать английский
алфавит. Обратите внимание, что за последней буквой алфавита
Z будет следовать A. Аналогично, за z будет следовать a.
Если искомое слово находится в исходной строке там
не отображается, верните «Недействительно».
Пример 1:

Код: Выделить всё

Input:
"Eqfkpi vguvu ctg hwp!"
"tests"
Output:
"Coding tests are fun!"
Объяснение:
"тесты" — это слово из пяти букв. В зашифрованной строке единственное
пятибуквенное слово — «вгуву». Поэтому зашифрованная версия
"тестов" может быть "вгуву". При сравнении «тестов» с «вгуву» становится ясно,
что процесс шифрования сместил каждый символ в
открытом тексте на 2. Таким образом, открытый текст в этом случае выглядит следующим образом: «Тесты кодирования
весело!".
Пример 2:

Код: Выделить всё

Input:
"cdeb nqxg"
"love"
Output:
"abcz love"
Объяснение:
В этом случае «love» могло быть зашифровано либо в «cdeb», либо в
«nqxg». При ближайшем рассмотрении становится ясно, что "nqxg" является правильным
вариантом, где каждый символ сдвинут на 2. (Между "love" и "cdeb" такой связи
не существует)
import re
def decipher(ciphertext,known_word):
defshift_char(char,shift):
if not char.isalpha( ):
возврат символа

Код: Выделить всё

    base = ord('A') if char.isupper() else ord('a')
return chr((ord(char) - base - shift) % 26 + base)

def shift_string(text, shift):
return ''.join(shift_char(c, shift) for c in text)

def word_appears_in_text(text, word):
# تقسيم النص إلى كلمات مع الحفاظ على حالة الأحرف
words = [''.join(c for c in w if c.isalpha()) for w in text.split()]
cleaned_known_word = re.sub(r'[\d\W]+$', '', word)

# البحث عن الكلمة بالضبط (مع مراعاة حالة الأحرف)
return cleaned_known_word in words

# التحقق من طول الكلمة المعروفة
if len(known_word) > len(ciphertext):
return "Invalid"

# تجربة كل الإزاحات الممكنة
for shift in range(26):
decrypted = shift_string(ciphertext, shift)
if word_appears_in_text(decrypted, known_word):
return decrypted

return "Invalid"

ciphertext = input().strip()
knownWord = input().strip()

result = decipher(ciphertext, knownWord)
print(result)
Я ожидал, что раскрыл все, но когда отправил ответ, обнаружил, что не ответил на весь вопрос. Не знаю, в этом ли причина.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ciphertext
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»