def decode(self, ctext: T) -> Optional[U]: """ Takes an encoded string and attempts to decode it according to the Atbash cipher. The Atbash cipher is a very simple substitution cipher without a key. It operates by replacing every letter in the input by its 'counterpoint' in the alphabet. Example: A -> Z, B -> Y, ... , M -> N and vice versa. """ result = "" letters = list("abcdefghijklmnopqrstuvwxyz") atbash_dict = {letters[i]: letters[::-1][i] for i in range(26)} # Ensure that ciphertext is a string if type(ctext) == str: # Normalize the string to all-lowercase letters ctext = ctext.lower() else: return None for letter in ctext: if letter in atbash_dict.keys(): # Match every letter of the input to its atbash counterpoint result += atbash_dict[letter] else: # If the current character is not in the defined alphabet, # just accept it as-is (useful for numbers, punctuation,...) result += letter return result
def decode(self, ctext: T) -> Optional[U]: """ Takes an encoded string and attempts to decode it according to the Atbash cipher. The Atbash cipher is a very simple substitution cipher without a key. It operates by replacing every letter in the input by its 'counterpoint' in the alphabet. Example: A -> Z, B -> Y, ... , M -> N and vice versa. """ result = "" atbash_dict = {self.ALPHABET[i]: self.ALPHABET[::-1][i] for i in range(26)} for letter in ctext.lower(): if letter in atbash_dict.keys(): # Match every letter of the input to its atbash counterpoint result += atbash_dict[letter] else: # If the current character is not in the defined alphabet, # just accept it as-is (useful for numbers, punctuation,...) result += letter return fix_case(result, ctext)