Spaces:
Runtime error
Runtime error
# CREDIT: generated by GPT-4 | |
import string | |
class EnigmaMachine: | |
def __init__(self, rotor_settings): | |
self.alphabet = string.ascii_uppercase | |
self.rotors = [list(self.alphabet) for _ in range(3)] # Create 3 rotors | |
self.reflector = list(self.alphabet) # Create reflector | |
# Initialize rotors based on the given rotor settings | |
for i, setting in enumerate(rotor_settings): | |
self.rotate_rotor(i, setting) | |
def rotate_rotor(self, rotor_index, positions): | |
# Rotate the specified rotor by the given number of positions | |
self.rotors[rotor_index] = self.rotors[rotor_index][positions:] + self.rotors[rotor_index][:positions] | |
def encode_character(self, char): | |
# For simplicity, this method only encodes a character (not full encoding process) | |
index = self.alphabet.index(char) | |
# Pass through rotors | |
for rotor in self.rotors: | |
index = self.alphabet.index(rotor[index]) | |
# Pass through reflector | |
reflected = self.reflector[index] | |
# Inverse pass through rotors | |
# for rotor in reversed(self.rotors): | |
# index = rotor.index(reflected) | |
# reflected = self.alphabet[index] | |
return reflected | |
def encode_message(self, message): | |
encoded = '' | |
for char in message: | |
if char.upper() in self.alphabet: | |
# Rotate the first rotor by 1 for each character | |
self.rotate_rotor(0, 1) | |
encoded += self.encode_character(char.upper()) | |
else: | |
encoded += char # For non-alphabetic characters, we keep the original | |
return encoded | |
# Using the enigma machine to encode a message | |
rotor_settings = [0, 0, 0] # Starting positions for the rotors | |
enigma = EnigmaMachine(rotor_settings) | |
original_message = "HELLO" | |
encoded_message = enigma.encode_message(original_message) | |
# print(f"Original: {original_message}") | |
# print(f"Encoded: {encoded_message}") | |