Домашни > Енигма > Решения > Решението на Десислава Белчева

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

10 точки общо

9 успешни теста
0 неуспешни теста
Код

 1def plugboard(text, plugboard_position):
 2    letter_mapping = {}
 3    for a, b in plugboard_position:
 4        letter_mapping[a], letter_mapping[b] = b, a
 5    return ''.join(letter_mapping.get(letter, letter) for letter in text)
 6
 7
 8def rotor(text, rotor_position):
 9    return ''.join(rotor_position.get(letter, letter) for letter in text)
10
11
12def reversed_rotor(rotor_position):
13    return {value: key for key, value in rotor_position.items()}
14
15
16def enigma_encrypt(plugboard_position=[], rotor_position={}):
17    def decorator(func):
18        def wrapper(text):
19            encrypted_text = plugboard(text, plugboard_position)
20            encrypted_text = rotor(encrypted_text, rotor_position)
21            return func(encrypted_text)
22        return wrapper
23    return decorator
24
25
26def enigma_decrypt(plugboard_position=[], rotor_position={}):
27    reversed_rotor_mapping = reversed_rotor(rotor_position)
28
29    def decorator(func):
30        def wrapper(text):
31            decrypted_text = rotor(text, reversed_rotor_mapping)
32            decrypted_text = plugboard(decrypted_text, plugboard_position)
33            return func(decrypted_text)
34        return wrapper
35    return decorator

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

OK

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

f1def plugboard(text, plugboard_position):f1def plugboard(text, plugboard_position):
2    letter_mapping = {}2    letter_mapping = {}
3    for a, b in plugboard_position:3    for a, b in plugboard_position:
4        letter_mapping[a], letter_mapping[b] = b, a4        letter_mapping[a], letter_mapping[b] = b, a
5    return ''.join(letter_mapping.get(letter, letter) for letter in text)5    return ''.join(letter_mapping.get(letter, letter) for letter in text)
66
77
8def rotor(text, rotor_position):8def rotor(text, rotor_position):
9    return ''.join(rotor_position.get(letter, letter) for letter in text)9    return ''.join(rotor_position.get(letter, letter) for letter in text)
1010
1111
12def reversed_rotor(rotor_position):12def reversed_rotor(rotor_position):
13    return {value: key for key, value in rotor_position.items()}13    return {value: key for key, value in rotor_position.items()}
1414
1515
16def enigma_encrypt(plugboard_position=[], rotor_position={}):16def enigma_encrypt(plugboard_position=[], rotor_position={}):
17    def decorator(func):17    def decorator(func):
18        def wrapper(text):18        def wrapper(text):
19            encrypted_text = plugboard(text, plugboard_position)19            encrypted_text = plugboard(text, plugboard_position)
20            encrypted_text = rotor(encrypted_text, rotor_position)20            encrypted_text = rotor(encrypted_text, rotor_position)
21            return func(encrypted_text)21            return func(encrypted_text)
22        return wrapper22        return wrapper
23    return decorator23    return decorator
2424
2525
26def enigma_decrypt(plugboard_position=[], rotor_position={}):26def enigma_decrypt(plugboard_position=[], rotor_position={}):
27    reversed_rotor_mapping = reversed_rotor(rotor_position)27    reversed_rotor_mapping = reversed_rotor(rotor_position)
2828
29    def decorator(func):29    def decorator(func):
30        def wrapper(text):30        def wrapper(text):
31            decrypted_text = rotor(text, reversed_rotor_mapping)31            decrypted_text = rotor(text, reversed_rotor_mapping)
32            decrypted_text = plugboard(decrypted_text, plugboard_position)32            decrypted_text = plugboard(decrypted_text, plugboard_position)
33            return func(decrypted_text)33            return func(decrypted_text)
34        return wrapper34        return wrapper
35    return decorator35    return decorator
t36 t
37plugboard_position = [{'a', 'c'}, {'t', 'z'}]
38rotor_position = {'v': 'd', 'd': 'v', 'y': 'u', 'n': 'n', 'i': 'w', 'z': 'p',
39                  's': 'e', 'x': 's', 'h': 'f', 'b': 'x', 'u': 'c', 'p': 'q',
40                  'r': 'g', 'q': 'j', 'e': 't', 'l': 'y', 'o': 'z', 'g': 'o',
41                  'k': 'b', 't': 'h', 'j': 'm', 'a': 'a', 'w': 'i', 'f': 'l',
42                  'm': 'r', 'c': 'k'}
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

f1def plugboard(text, plugboard_position):f1def plugboard(text, plugboard_position):
2    letter_mapping = {}2    letter_mapping = {}
n3    for pair in plugboard_position:n3    for a, b in plugboard_position:
4        a, b = pair
5        letter_mapping[a], letter_mapping[b] = b, a4        letter_mapping[a], letter_mapping[b] = b, a
6    return ''.join(letter_mapping.get(letter, letter) for letter in text)5    return ''.join(letter_mapping.get(letter, letter) for letter in text)
76
87
9def rotor(text, rotor_position):8def rotor(text, rotor_position):
10    return ''.join(rotor_position.get(letter, letter) for letter in text)9    return ''.join(rotor_position.get(letter, letter) for letter in text)
1110
1211
13def reversed_rotor(rotor_position):12def reversed_rotor(rotor_position):
14    return {value: key for key, value in rotor_position.items()}13    return {value: key for key, value in rotor_position.items()}
1514
1615
n17def enigma_encrypt(*, plugboard_position, rotor_position):n16def enigma_encrypt(plugboard_position=[], rotor_position={}):
18    def decorator(func):17    def decorator(func):
19        def wrapper(text):18        def wrapper(text):
20            encrypted_text = plugboard(text, plugboard_position)19            encrypted_text = plugboard(text, plugboard_position)
21            encrypted_text = rotor(encrypted_text, rotor_position)20            encrypted_text = rotor(encrypted_text, rotor_position)
22            return func(encrypted_text)21            return func(encrypted_text)
23        return wrapper22        return wrapper
24    return decorator23    return decorator
2524
2625
n27def enigma_decrypt(*, plugboard_position, rotor_position):n26def enigma_decrypt(plugboard_position=[], rotor_position={}):
28    reversed_rotor_mapping = reversed_rotor(rotor_position)27    reversed_rotor_mapping = reversed_rotor(rotor_position)
2928
30    def decorator(func):29    def decorator(func):
31        def wrapper(text):30        def wrapper(text):
32            decrypted_text = rotor(text, reversed_rotor_mapping)31            decrypted_text = rotor(text, reversed_rotor_mapping)
33            decrypted_text = plugboard(decrypted_text, plugboard_position)32            decrypted_text = plugboard(decrypted_text, plugboard_position)
34            return func(decrypted_text)33            return func(decrypted_text)
35        return wrapper34        return wrapper
36    return decorator35    return decorator
tt36 
37plugboard_position = [{'a', 'c'}, {'t', 'z'}]
38rotor_position = {'v': 'd', 'd': 'v', 'y': 'u', 'n': 'n', 'i': 'w', 'z': 'p',
39                  's': 'e', 'x': 's', 'h': 'f', 'b': 'x', 'u': 'c', 'p': 'q',
40                  'r': 'g', 'q': 'j', 'e': 't', 'l': 'y', 'o': 'z', 'g': 'o',
41                  'k': 'b', 't': 'h', 'j': 'm', 'a': 'a', 'w': 'i', 'f': 'l',
42                  'm': 'r', 'c': 'k'}
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op