1. Главная
  2. Библиотека
  3. Программирование
  4. Запрограммируйте статичную машину. Напишите функцию, ко...
Разбор задачи

Запрограммируйте статичную машину. Напишите функцию, которая шифрует одну букву на «Энигме» без учёта движения роторов. Ваша функция должна симулировать полный путь сигнала: коммутационная панель —► 3 ротора (вперёд) —► рефлектор —► 3 ротора (назад) —►

  • Предмет: Программирование
  • Автор: Кэмп
  • #Основы алгоритмизации и программирования
  • #Языки программирования (C++, Java, Python и др.)
Запрограммируйте статичную машину. Напишите функцию, которая шифрует одну букву на «Энигме» без учёта движения роторов. Ваша функция должна симулировать полный путь сигнала: коммутационная панель —► 3 ротора (вперёд) —► рефлектор —► 3 ротора (назад) —►

Условие:

Запрограммируйте статичную машину.
Напишите функцию, которая шифрует одну букву на «Энигме» без учёта движения роторов.
Ваша функция должна симулировать полный путь сигнала: коммутационная панель —► 3 ротора (вперёд) —► рефлектор —► 3 ротора (назад) —► коммутационная панель.
При движении сигнала вдоль ротора назад входная строка — строка ротора, выходная — строка алфавита. При движении сигнала вдоль ротора вперёд — наоборот.
Строка рефлектора соответствует строке алфавита.
Константы:
Роторы:\nROTOR_I = "EKMFLGDQVZNTOWYHXUSPAIBRCJ"\nROTOR_II = "AJDKSIRUXBLHWTMCQGZNPYFVOE"\nROTOR_III = "BDFHJLCPRTXVZNYEIWGAKMUSQO"
Рефлектор:\nREFLECTOR_B = "YRUHQSLDPXNGOKMIEBFZCWVJAT"
\nALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"\nROTOR_I = "EKMFLGDQVZNTOWYHXUSPAIBRCJ"\nROTOR_II = "AJDKSIRUXBLHWTMCQGZNPYFVOE"\nROTOR_III = "BDFHJLCPRTXVZNYEIWGAKMUSQO"\nREFLECTOR_B = "YRUHQSLDPXNGOKMIEBFZCWVJAT"
\ndef encrypt_single_char(char, rotor_order, rotor_positions, plugboard_pairs):
# rotor_order — порядок роторов в формате (ROTOR_I, ROTOR_III, ROTOR_II)
# rotor_positions — позиции роторов в формате ('F', 'U', 'N')
# plugboard_pairs — коммутационная панель в формате {'Q':'Z','Z': 'Q',...}
# 1. Коммутационная панель (вход)
# 2. X__ Левый ротор
# 3. _X_ Средний ротор
# 4. __X Правый ротор
# 5. Рефлектор
# 6. __X Правый ротор (обратно)
# 7. _X_ Средний ротор (обратно)
# 8. X__ Левый ротор (обратно)
# 9. Коммутационная панель (выход)
return char

Решение:

Для реализации шифрования на «Энигме» нам необходимо учитывать смещение роторов относительно алфавита. При прохождении сигнала вперёд (от коммутационной панели к рефлектору) символ смещается на позицию ротора, проходит через него и возвращается в алфавит. При прохождении назад (от рефлектора к панели) логика обратная.

Вот реализация функции encrypt_single_char:

Внутри — полный разбор, аргументация, алгоритм решения, частые ошибки и как отвечать на каверзные вопросы препода, если спросит

Попробуй решить по шагам

Попробуй один шаг и продолжи в режиме обучения или посмотри готовое решение

Какое ключевое отличие в обработке сигнала ротором при движении «вперёд» (от коммутационной панели к рефлектору) и «назад» (от рефлектора к коммутационной панели) необходимо учитывать при симуляции работы «Энигмы»?

Что нужно знать по теме:

Что нужно знать по теме

Алгоритм решения

Топ 3 ошибок

Что спросит препод

Выбери предмет