
Добавил:
KaFaka
t.me
Инфо для ГУАП студентов от меня: https://kafaka.notion.site/99e6d9b70ca74f7baef3daea17839e5a
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:ЛР1 / 2249
.pyimport random
from collections import Counter
# Зашифрованный текст
encrypted_text = "АНВОНЦЕЖОЛЫСИЗНАВЕТЧНГИНЕМЕЙПЗНАТОКНОЯОЫСИЗНАВЕТЧНОЯОНЕМЙАЛЫЕСЛГЕЛРВСЕВИТПЕЯОЛОШСАНДШУСВЕНАМАИНЕОНЖОКИТЫОУТИЙЕИЛОКИТОЬЕЗЧПНДУНАТИЙЕЕЯОЬГТИНАЫИРАНГЯОТОКТЪЬОЛЧДОВЕЦЕРВЛУИЫОДОСНОРВЧРУКЧЬЕОНХАТОЬНОЫЕТАОЬЕЗЧПНДАЫТПРАТАПРХАТИТРПНАКНИМИКАТИМВАТЕСОЬТАЯОКАСЪЛАРРДАЗАТМНЕНЕМЕЙЫСИХИМАПДЯСУКИВАТЕСЬТАЯОКАСЪКОМОЯИТГНЕЗАЬУКУЛАЮЕЯОЫОКАПНИПЛОЛВОСОИСАЗПЛРВСЕВИТЭВОЯОНЕМЙАЛОШСАНДШУСВЕНАОКЕСЕОНЖОКИТЫОУТИЙЕИЫСОКАЛАТХАСЕНГЕРОРИРДАЗАЛИКЕЛМЕНПОНЫСОРТЕЗИТРПЫОКНПТЯТАЗАДНЕЬУИРДАЗАТОЬТАЯОКАСЪЛАРМАИНЯЕССПНИДОЯКАНЕЗАЬУКУВОЯОВАТЕСАДОВОСГМЛГРЫАРТИОВЯОТОКАМЕНПИМОЪЫОДОИНУЪОЬЕЗЧПНУЛАЮВАТЕСВОЯКАКАТНАМДОМШОСВЛВСЕВИИСАЗПЛРВСЕВИТЕЯОЛСОРРИИЗКЕРЧОНЫСЕЫОКАЛАТСУРРДИМКЕВПМКСЕЛНИЕПЗГДИВСИЯОНОМЕВСИЪИВЕОСИЪМУЗГДИЛРЛОЬОКНОЕОВУСОДОЛЛСЕМПОНИРДАТРЕЬЕМЕРВОКИСЕДВОСАХЕТЕЗНОИКОСОЯИОПЫОМНЪЛАРРДАЗАТОНМНЕЫОХИМАПМОЪСУДУЛРЕСУРРДИЕТЪКИНЕЖОСОЮИЕТЪКИНОЛГИРДТЪЦЕНИЕПНЕТЪЬТЪСУРРДИЖНООЛАРИЛАЮЕМВАТЕСЕЬУКУЫОМНИВЧКОМОЯИТГЬОТЧЮЕМГРНИМНЕЛРВСЕЦАТИРЧ"
# Карта замены букв
key_mapping = {}
# Статистика частоты букв в русском языке
avg_stats = {'о': 0.1097, 'е': 0.0845, 'а': 0.0801, 'и': 0.0735, 'н': 0.0670, 'т': 0.0626, 'с': 0.0547, 'р': 0.0473,
'в': 0.0454, 'л': 0.0440, 'к': 0.0349, 'м': 0.0321, 'д': 0.0298, 'п': 0.0281, 'у': 0.0262, 'я': 0.0201,
'ы': 0.0190, 'ь': 0.0174, 'г': 0.0170, 'з': 0.0165, 'б': 0.0159, 'ч': 0.0144, 'й': 0.0121, 'х': 0.0097,
'ж': 0.0094, 'ш': 0.0073, 'ю': 0.0064, 'ц': 0.0048, 'щ': 0.0036, 'э': 0.0032, 'ф': 0.0026, 'ъ': 0.0004,
'ё': 0.0004}
# Проверка удовлетворенности пользователя
user_satisfaction = "нет" # Начальное значение
correct_letters = "" # Инициализация правильно расшифрованных букв
while user_satisfaction == "нет":
# Замена символов в зашифрованном тексте с учетом текущего ключа
decrypted_text = "".join([key_mapping.get(char, char) for char in encrypted_text])
# Вывод измененного текста
print("Измененный зашифрованный текст:")
print(decrypted_text)
# Проверка удовлетворенности пользователя
user_satisfaction = input("Подходит ли вам расшифрованный текст? (да/нет): ").lower()
if user_satisfaction == "нет":
# Получение от пользователя правильно расшифрованных букв
correct_letters = input("Введите буквы, которые были расшифрованы верно (без пробелов): ").upper()
# Подстановка новых букв для неверно расшифрованных символов
encrypted_counter = Counter(encrypted_text)
decrypted_counter = Counter(decrypted_text)
# Определение символов, для которых не было сделано правильной подстановки
incorrect_letters = set(encrypted_counter.keys()).difference(decrypted_counter.keys())
incorrect_letters.difference_update(set(correct_letters))
# Определение частоты встречаемости букв в зашифрованном тексте
encrypted_total = sum(encrypted_counter.values())
# Сортировка букв в порядке убывания частоты встречаемости в тексте
sorted_letters = [pair[0] for pair in sorted(encrypted_counter.items(), key=lambda x: x[1], reverse=True)]
# Подстановка новых значений для неверно расшифрованных символов
for letter in incorrect_letters:
# Поиск наиболее вероятной буквы на основе статистики русского языка
probable_letter = max(avg_stats.keys(), key=lambda x: avg_stats[x])
# Замена неверно расшифрованной буквы на новую наиболее вероятную
key_mapping[letter] = probable_letter
avg_stats.pop(probable_letter) # Удаляем использованную букву из статистики
sorted_letters.remove(letter) # Удаляем использованную букву из списка
elif user_satisfaction == "да":
print("Отлично! Расшифрованный текст:", decrypted_text)
break # Завершение цикла
else:
print("Пожалуйста, введите 'да' или 'нет'.")
# Код завершается, если пользователь удовлетворен расшифрованным текстом
Соседние файлы в папке ЛР1