Домашни > Енигма > Решения > Решението на Теодора Стоилова

Резултати
6 точки от тестове
0 точки от учител

6 точки общо

5 успешни теста
4 неуспешни теста
Код
Скрий всички коментари

 1def plugboard_for_letter(letter, plugboard_position):
 2    for pair in plugboard_position:
 3        if letter in pair:
 4            for pair_item in pair:
 5                if pair_item != letter:
 6                    return pair_item
 7    return letter
 8
 9
10def plugboard(string, plugboard_position):
11    return "".join([plugboard_for_letter(l, plugboard_position) for l in string])
12
13
14def rotor(string, rotor_position):
15    return "".join([rotor_position[letter] for letter in string])
16
17
18def enigma_encrypt(plugboard_position, rotor_position):
19    def decorator(function):
20        def encrypted_function(string):
21            return function(rotor(plugboard(string, plugboard_position), rotor_position))
22        return encrypted_function
23    return decorator
24
25
26def rotor_decryptor_letter(letter, rotor_position):
27    for key, value in rotor_position.items():
28        if value == letter:
29            return key
30
31
32def rotor_decryptor(string, rotor_position):
33    return "".join([rotor_decryptor_letter(l, rotor_position) for l in string])
34
35
36def enigma_decrypt(plugboard_position, rotor_position):
37    def decorator(function):
38        def decrypted_function(string):
39            return function(plugboard(rotor_decryptor(string, rotor_position), plugboard_position))
40        return decrypted_function
41    return decorator

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 39, in decrypted_function
return function(plugboard(rotor_decryptor(string, rotor_position), plugboard_position))
File "/tmp/solution.py", line 33, in rotor_decryptor
return "".join([rotor_decryptor_letter(l, rotor_position) for l in string])
TypeError: sequence item 1: expected str instance, NoneType found

======================================================================
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 39, in decrypted_function
return function(plugboard(rotor_decryptor(string, rotor_position), plugboard_position))
File "/tmp/solution.py", line 33, in rotor_decryptor
return "".join([rotor_decryptor_letter(l, rotor_position) for l in string])
TypeError: sequence item 3: expected str instance, NoneType found

======================================================================
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 21, in encrypted_function
return function(rotor(plugboard(string, plugboard_position), rotor_position))
File "/tmp/solution.py", line 15, in rotor
return "".join([rotor_position[letter] for letter in string])
File "/tmp/solution.py", line 15, in <listcomp>
return "".join([rotor_position[letter] for letter in string])
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 15, in rotor
return "".join([rotor_position[letter] for letter in string])
File "/tmp/solution.py", line 15, in <listcomp>
return "".join([rotor_position[letter] for letter in string])
KeyError: ' '

----------------------------------------------------------------------
Ran 9 tests in 0.001s

FAILED (errors=4)

Дискусия
История

f1def plugboard_for_letter(letter, plugboard_position):f1def plugboard_for_letter(letter, plugboard_position):
2    for pair in plugboard_position:2    for pair in plugboard_position:
3        if letter in pair:3        if letter in pair:
4            for pair_item in pair:4            for pair_item in pair:
5                if pair_item != letter:5                if pair_item != letter:
6                    return pair_item6                    return pair_item
7    return letter7    return letter
88
99
10def plugboard(string, plugboard_position):10def plugboard(string, plugboard_position):
11    return "".join([plugboard_for_letter(l, plugboard_position) for l in string])11    return "".join([plugboard_for_letter(l, plugboard_position) for l in string])
1212
1313
14def rotor(string, rotor_position):14def rotor(string, rotor_position):
15    return "".join([rotor_position[letter] for letter in string])15    return "".join([rotor_position[letter] for letter in string])
1616
1717
18def enigma_encrypt(plugboard_position, rotor_position):18def enigma_encrypt(plugboard_position, rotor_position):
19    def decorator(function):19    def decorator(function):
20        def encrypted_function(string):20        def encrypted_function(string):
21            return function(rotor(plugboard(string, plugboard_position), rotor_position))21            return function(rotor(plugboard(string, plugboard_position), rotor_position))
22        return encrypted_function22        return encrypted_function
23    return decorator23    return decorator
tt24 
25 
26def rotor_decryptor_letter(letter, rotor_position):
27    for key, value in rotor_position.items():
28        if value == letter:
29            return key
30 
31 
32def rotor_decryptor(string, rotor_position):
33    return "".join([rotor_decryptor_letter(l, rotor_position) for l in string])
34 
35 
36def enigma_decrypt(plugboard_position, rotor_position):
37    def decorator(function):
38        def decrypted_function(string):
39            return function(plugboard(rotor_decryptor(string, rotor_position), plugboard_position))
40        return decrypted_function
41    return decorator
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op