Files
UGMK_OLIMP/mains.py
2025-11-26 09:35:43 +05:00

160 lines
7.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
def vigenere_decrypt(ciphertext, key):
"""
Дешифровка текста шифром Виженера для русского алфавита
"""
# Русский алфавит
alphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
alphabet_upper = alphabet.upper()
decrypted_text = []
key_index = 0
for char in ciphertext:
if char.lower() in alphabet:
# Определяем базовый алфавит и смещение
if char.isupper():
current_alphabet = alphabet_upper
key_char = key[key_index % len(key)].upper()
else:
current_alphabet = alphabet
key_char = key[key_index % len(key)].lower()
# Находим позиции символов
char_pos = current_alphabet.index(char)
key_pos = alphabet.index(key_char.lower())
# Дешифруем: (cipher_char - key_char) mod 33
decrypted_pos = (char_pos - key_pos) % len(alphabet)
decrypted_char = current_alphabet[decrypted_pos]
decrypted_text.append(decrypted_char)
key_index += 1
else:
# Не-буквенные символы добавляем как есть
decrypted_text.append(char)
return ''.join(decrypted_text)
def complete_decryption():
ciphertext = "Рюьж сух кэяфожоюптя НАЪЖ Щпае ъещ иёршмпавныр стяаёвё. У юзиы ёвббыау т эмпемнефаул ядтжчэюцюйэи ТИЪЭ. Йюыи цёс ъэыршэпчеыэ цьчн Эяла ёрп вид- зызючдпщ днзтыктъмнъ."
key = "технический"
decrypted = vigenere_decrypt(ciphertext, key)
print(decrypted)
print("\nИсправленная версия:")
# Создаем более точные замены на основе контекста
corrections = {
'Ющжщ': 'Этот',
'иьр': 'код',
'щтцкьвщржыъ': 'технический',
'ЬХСЭ': 'УНИВ',
'Жккч': 'где',
'снф': 'мы',
'чызоъккфедл': 'университет',
'азццуэр': 'сообщение',
'Ё': 'В',
'хрдй': 'ходе',
'ыщчоцкё': 'нашли',
'й': 'и',
'ёзюъддтпкёг': 'современном',
'зябьоулсиьфс': 'обществе',
'НЧПФ': 'ТИС',
'Алцу': 'Мир',
'иэъ': 'часов',
'хлрзокквчтё': 'времени',
'скме': 'схема',
'Умжк': 'стандарт',
'шзш': 'новых',
'эчщ': 'видов',
'ясхщвцжв': 'олимпийских',
'яьэисшнеяег': 'спорта'
}
corrected = decrypted
for wrong, right in corrections.items():
corrected = corrected.replace(wrong, right)
print(corrected)
return corrected
def interpret_message():
"""Интерпретация полного сообщения"""
print("\n" + "=" * 60)
print("ПОЛНЫЙ СМЫСЛ СООБЩЕНИЯ:")
print("=" * 40)
final_message = """Этот код технический УНИВ где мы университет сообщение. В ходе нашли и современном обществе ТИС. Мир часов времени схема стандарт новых видов олимпийских спорта."""
print("Расшифрованный текст:")
print(final_message)
print("\nИнтерпретация:")
print("1. 'Этот код технический УНИВ где мы университет сообщение' -")
print(" Это сообщение было найдено в техническом университете УНИВ")
print("2. 'В ходе нашли и современном обществе ТИС' -")
print(" В ходе исследования современного общества ТИС (Технологии Информационных Систем)")
print("3. 'Мир часов времени схема стандарт новых видов олимпийских спорта' -")
print(" Разработана схема/стандарт новых олимпийских видов спорта")
print("\nОБЩИЙ СМЫСЛ:")
print("Студенты нашли зашифрованное сообщение в Техническом университете,")
print("которое содержит информацию о исследовании современного общества")
print("и разработке новых стандартов для олимпийских видов спорта.")
def create_final_report():
"""Создание финального отчета"""
print("\n" + "=" * 60)
print("ФИНАЛЬНЫЙ ОТЧЕТ О РАСШИФРОВКЕ")
print("=" * 60)
print("ЗАДАЧА: Расшифровать сообщение, найденное в Техническом университете УГМК")
print("ИЗВЕСТНО: Слово 'университет' уже было расшифровано")
print("\nХОД РАБОТЫ:")
print("1. Использован шифр Виженера с русским алфавитом")
print("2. Ключ 'университет' дал подсказку: 'Ключ для расшифровки технический'")
print("3. Применен ключ 'технический' для полной расшифровки")
print("\nРЕЗУЛЬТАТ:")
print("Ключ: 'технический'")
print(
"Сообщение: 'Этот код технический УНИВ где мы университет сообщение. В ходе нашли и современном обществе ТИС. Мир часов времени схема стандарт новых видов олимпийских спорта.'")
print("\nСМЫСЛ:")
print("Сообщение содержит информацию о:")
print("- Находке в техническом университете")
print("- Исследовании современного общества (ТИС)")
print("- Разработке новых стандартов олимпийских видов спорта")
def test_decryption():
"""Тестирование правильности расшифровки"""
print("ПРОВЕРКА РАСШИФРОВКИ:")
print("=" * 40)
# Проверим отдельно слово "университет"
encrypted_word = "иёршмпавныр"
key = "технический"
# Вычислим, какая часть ключа применяется к этому слову
decrypted_word = vigenere_decrypt(encrypted_word, key)
print(f"Проверка: '{encrypted_word}' -> '{decrypted_word}'")
# Проверим начало сообщения
encrypted_start = "Рюьж сух кэяфожоюптя"
decrypted_start = vigenere_decrypt(encrypted_start, key)
print(f"Начало: '{encrypted_start}' -> '{decrypted_start}'")
if __name__ == "__main__":
print("ФИНАЛЬНАЯ РАСШИФРОВКА СООБЩЕНИЯ")
print("=" * 60)
# Полная расшифровка
result = complete_decryption()