1def plugboard(text, conversion_list):
 2    conversion_dict = {}
 3    for conversion_set in conversion_list:
 4        letter_one, letter_two = conversion_set
 5        conversion_dict[letter_one] = letter_two
 6        conversion_dict[letter_two] = letter_one
 7    return "".join(conversion_dict.get(letter, letter) for letter in text)
 8
 9def rotor(text, converion_dict):
10    return "".join(converion_dict[letter] for letter in text)
11
12def get_enigma_decorator(first_operation, first_operation_arg, second_operation, second_operation_arg):
13    def enigma_decorator(decorated_function):
14        def text_converter(text):
15                return decorated_function(second_operation(first_operation(text, first_operation_arg), second_operation_arg))
16        return text_converter
17    return enigma_decorator
18
19def enigma_encrypt(plugboard_position, rotor_position):
20    return get_enigma_decorator(plugboard, plugboard_position, rotor, rotor_position)
21
22def enigma_decrypt(plugboard_position, rotor_position):
23    decrypt_rotor_position = {rotor_position[key]: key for key in rotor_position}
24    return get_enigma_decorator(rotor, decrypt_rotor_position, plugboard, plugboard_position)
E.EE....E
======================================================================
ERROR: test_full_letter_set (test.TestCombination)
Test decrypting an encrypted text against itself.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/tmp/test.py", line 139, in test_full_letter_set
    self.assertEqual(combined('i love python'), 'i love python')
  File "/tmp/solution.py", line 15, in text_converter
    return decorated_function(second_operation(first_operation(text, first_operation_arg), second_operation_arg))
  File "/tmp/solution.py", line 10, in rotor
    return "".join(converion_dict[letter] for letter in text)
  File "/tmp/solution.py", line 10, in <genexpr>
    return "".join(converion_dict[letter] for letter in text)
KeyError: ' '
======================================================================
ERROR: test_full_letter_set (test.TestDecryptor)
Test the decryptor function with all letters in the rotor.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/tmp/test.py", line 112, in test_full_letter_set
    self.assertEqual(decrypted('mlx fuver cbakn jad guoyq aixb mlx pzhw sat'),
  File "/tmp/solution.py", line 15, in text_converter
    return decorated_function(second_operation(first_operation(text, first_operation_arg), second_operation_arg))
  File "/tmp/solution.py", line 10, in rotor
    return "".join(converion_dict[letter] for letter in text)
  File "/tmp/solution.py", line 10, in <genexpr>
    return "".join(converion_dict[letter] for letter in text)
KeyError: ' '
======================================================================
ERROR: test_full_letter_set (test.TestEncryptor)
Test the encryptor function with all letters in the rotor.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/tmp/test.py", line 89, in test_full_letter_set
    self.assertEqual(encrypted('the quick brown fox jumps over the lazy dog'),
  File "/tmp/solution.py", line 15, in text_converter
    return decorated_function(second_operation(first_operation(text, first_operation_arg), second_operation_arg))
  File "/tmp/solution.py", line 10, in rotor
    return "".join(converion_dict[letter] for letter in text)
  File "/tmp/solution.py", line 10, in <genexpr>
    return "".join(converion_dict[letter] for letter in text)
KeyError: ' '
======================================================================
ERROR: test_normal_case (test.TestRotor)
Test the rotor function with normally expected input.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/tmp/test.py", line 67, in test_normal_case
    self.assertEqual(rotor('this is a test input', self.ROTOR_POSITION), 'kbjo jo c kdok jylqk')
  File "/tmp/solution.py", line 10, in rotor
    return "".join(converion_dict[letter] for letter in text)
  File "/tmp/solution.py", line 10, in <genexpr>
    return "".join(converion_dict[letter] for letter in text)
KeyError: ' '
----------------------------------------------------------------------
Ran 9 tests in 0.001s
FAILED (errors=4)
| f | 1 | def plugboard(text, conversion_list): | f | 1 | def plugboard(text, conversion_list): | 
| 2 | conversion_dict = {} | 2 | conversion_dict = {} | ||
| n | 3 | for set in conversion_list: | n | 3 | for conversion_set in conversion_list: | 
| 4 | letter_one, letter_two = set | 4 | letter_one, letter_two = conversion_set | ||
| 5 | conversion_dict[letter_one] = letter_two | 5 | conversion_dict[letter_one] = letter_two | ||
| 6 | conversion_dict[letter_two] = letter_one | 6 | conversion_dict[letter_two] = letter_one | ||
| t | 7 | return "".join(conversion_dict[letter] if letter in conversion_dict else letter for letter in text) | t | 7 | return "".join(conversion_dict.get(letter, letter) for letter in text) | 
| 8 | 8 | ||||
| 9 | def rotor(text, converion_dict): | 9 | def rotor(text, converion_dict): | ||
| 10 | return "".join(converion_dict[letter] for letter in text) | 10 | return "".join(converion_dict[letter] for letter in text) | ||
| 11 | 11 | ||||
| 12 | def get_enigma_decorator(first_operation, first_operation_arg, second_operation, second_operation_arg): | 12 | def get_enigma_decorator(first_operation, first_operation_arg, second_operation, second_operation_arg): | ||
| 13 | def enigma_decorator(decorated_function): | 13 | def enigma_decorator(decorated_function): | ||
| 14 | def text_converter(text): | 14 | def text_converter(text): | ||
| 15 | return decorated_function(second_operation(first_operation(text, first_operation_arg), second_operation_arg)) | 15 | return decorated_function(second_operation(first_operation(text, first_operation_arg), second_operation_arg)) | ||
| 16 | return text_converter | 16 | return text_converter | ||
| 17 | return enigma_decorator | 17 | return enigma_decorator | ||
| 18 | 18 | ||||
| 19 | def enigma_encrypt(plugboard_position, rotor_position): | 19 | def enigma_encrypt(plugboard_position, rotor_position): | ||
| 20 | return get_enigma_decorator(plugboard, plugboard_position, rotor, rotor_position) | 20 | return get_enigma_decorator(plugboard, plugboard_position, rotor, rotor_position) | ||
| 21 | 21 | ||||
| 22 | def enigma_decrypt(plugboard_position, rotor_position): | 22 | def enigma_decrypt(plugboard_position, rotor_position): | ||
| 23 | decrypt_rotor_position = {rotor_position[key]: key for key in rotor_position} | 23 | decrypt_rotor_position = {rotor_position[key]: key for key in rotor_position} | ||
| 24 | return get_enigma_decorator(rotor, decrypt_rotor_position, plugboard, plugboard_position) | 24 | return get_enigma_decorator(rotor, decrypt_rotor_position, plugboard, plugboard_position) | 
| Legends | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 
 | 
 | |||||||||