Добавил:
t.me Инфо для ГУАП студентов от меня: https://kafaka.notion.site/99e6d9b70ca74f7baef3daea17839e5a Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР1 / 2249

.py
Скачиваний:
3
Добавлен:
18.06.2024
Размер:
6.04 Кб
Скачать
import 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