Домашни > Енигма > Решения > Решението на Клементина Картевска

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

10 точки общо

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

 1def plugboard(text, plugboard_position):
 2    '''
 3    The function swaps letters in the input text according to the plugboard_position.
 4
 5    :param text: A string containing the text to be converted.
 6    :param plugboard_position: A list of sets, each set containing two letters to be swapped.
 7    :return: The converted text with letters swapped based on the plugboard_position.
 8    '''
 9    keys = dict(plugboard_position)
10    result = []
11    for char in text:
12        if char in keys:
13            result.append(keys[char])
14        elif char in keys.values():
15            for key, value in keys.items():
16                if value == char:
17                    result.append(key)
18        else:
19            result.append(char)
20    return ''.join(result)  
21
22def rotor(text, rotor_position):
23    '''
24    The function swaps letters in the input text according to the rotor_position.
25
26    :param text: A string containing the text to be converted.
27    :param rotor_position: A dictionary containing letter mappings for conversion.
28    :return: The converted text with letters swapped based on the rotor_position.
29    '''
30    text.split()
31    result = []
32    for symbol in text:
33        if symbol in rotor_position:
34            result.append(rotor_position[symbol])
35        else:
36            result.append(symbol)
37    return ''.join(result)
38
39def enigma_encrypt(plugboard_position, rotor_position):
40    '''
41    A decorator that encrypts text using plugboard and rotor configurations.
42
43    :param plugboard_position: A list of sets, each set containing two letters to be swapped.
44    :param rotor_position: A dictionary containing letter mappings for conversion.
45    :return: A decorator function that encrypts text before calling the decorated function.
46    '''
47    def decorator(func):
48        def encrypt(text):
49            text = plugboard(text, plugboard_position)
50            text = rotor(text, rotor_position)
51            return func(text)
52        return encrypt
53    return decorator
54
55def enigma_decrypt(plugboard_position, rotor_position):
56    '''
57    A decorator that decrypts text using plugboard and rotor configurations.
58
59    :param plugboard_position: A list of sets, each set containing two letters to be swapped.
60    :param rotor_position: A dictionary containing letter mappings for conversion.
61    :return: A decorator function that decrypts text before calling the decorated function.
62    '''
63    def decrypt_decorator(func):
64        def decrypt_text(text):
65            rotor_reverse = {v: k for k, v in rotor_position.items()}
66            text = rotor(text, rotor_reverse) 
67            text = plugboard(text, plugboard_position)
68            return func(text)
69        return decrypt_text
70    return decrypt_decorator

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

OK

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

f1def plugboard(text, plugboard_position):f1def plugboard(text, plugboard_position):
nn2    '''
3    The function swaps letters in the input text according to the plugboard_position.
4 
5    :param text: A string containing the text to be converted.
6    :param plugboard_position: A list of sets, each set containing two letters to be swapped.
7    :return: The converted text with letters swapped based on the plugboard_position.
8    '''
2    keys = dict(plugboard_position)9    keys = dict(plugboard_position)
3    result = []10    result = []
4    for char in text:11    for char in text:
5        if char in keys:12        if char in keys:
6            result.append(keys[char])13            result.append(keys[char])
7        elif char in keys.values():14        elif char in keys.values():
8            for key, value in keys.items():15            for key, value in keys.items():
9                if value == char:16                if value == char:
10                    result.append(key)17                    result.append(key)
11        else:18        else:
12            result.append(char)19            result.append(char)
13    return ''.join(result)  20    return ''.join(result)  
1421
15def rotor(text, rotor_position):22def rotor(text, rotor_position):
nn23    '''
24    The function swaps letters in the input text according to the rotor_position.
25 
26    :param text: A string containing the text to be converted.
27    :param rotor_position: A dictionary containing letter mappings for conversion.
28    :return: The converted text with letters swapped based on the rotor_position.
29    '''
16    text.split()30    text.split()
17    result = []31    result = []
18    for symbol in text:32    for symbol in text:
19        if symbol in rotor_position:33        if symbol in rotor_position:
20            result.append(rotor_position[symbol])34            result.append(rotor_position[symbol])
21        else:35        else:
22            result.append(symbol)36            result.append(symbol)
23    return ''.join(result)37    return ''.join(result)
2438
n25def enigma_encrypt(plugboard_position , rotor_position):n39def enigma_encrypt(plugboard_position, rotor_position):
40    '''
41    A decorator that encrypts text using plugboard and rotor configurations.
42 
43    :param plugboard_position: A list of sets, each set containing two letters to be swapped.
44    :param rotor_position: A dictionary containing letter mappings for conversion.
45    :return: A decorator function that encrypts text before calling the decorated function.
46    '''
26    def decorator(func):47    def decorator(func):
27        def encrypt(text):48        def encrypt(text):
28            text = plugboard(text, plugboard_position)49            text = plugboard(text, plugboard_position)
29            text = rotor(text, rotor_position)50            text = rotor(text, rotor_position)
30            return func(text)51            return func(text)
31        return encrypt52        return encrypt
32    return decorator53    return decorator
3354
34def enigma_decrypt(plugboard_position, rotor_position):55def enigma_decrypt(plugboard_position, rotor_position):
tt56    '''
57    A decorator that decrypts text using plugboard and rotor configurations.
58 
59    :param plugboard_position: A list of sets, each set containing two letters to be swapped.
60    :param rotor_position: A dictionary containing letter mappings for conversion.
61    :return: A decorator function that decrypts text before calling the decorated function.
62    '''
35    def decrypt_decorator(func):63    def decrypt_decorator(func):
36        def decrypt_text(text):64        def decrypt_text(text):
37            rotor_reverse = {v: k for k, v in rotor_position.items()}65            rotor_reverse = {v: k for k, v in rotor_position.items()}
38            text = rotor(text, rotor_reverse) 66            text = rotor(text, rotor_reverse) 
39            text = plugboard(text, plugboard_position)67            text = plugboard(text, plugboard_position)
40            return func(text)68            return func(text)
41        return decrypt_text69        return decrypt_text
42    return decrypt_decorator70    return decrypt_decorator
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    keys = dict(plugboard_position)2    keys = dict(plugboard_position)
3    result = []3    result = []
4    for char in text:4    for char in text:
5        if char in keys:5        if char in keys:
6            result.append(keys[char])6            result.append(keys[char])
7        elif char in keys.values():7        elif char in keys.values():
8            for key, value in keys.items():8            for key, value in keys.items():
9                if value == char:9                if value == char:
10                    result.append(key)10                    result.append(key)
11        else:11        else:
12            result.append(char)12            result.append(char)
13    return ''.join(result)  13    return ''.join(result)  
1414
15def rotor(text, rotor_position):15def rotor(text, rotor_position):
16    text.split()16    text.split()
17    result = []17    result = []
18    for symbol in text:18    for symbol in text:
19        if symbol in rotor_position:19        if symbol in rotor_position:
20            result.append(rotor_position[symbol])20            result.append(rotor_position[symbol])
21        else:21        else:
22            result.append(symbol)22            result.append(symbol)
23    return ''.join(result)23    return ''.join(result)
2424
25def enigma_encrypt(plugboard_position , rotor_position):25def enigma_encrypt(plugboard_position , rotor_position):
26    def decorator(func):26    def decorator(func):
27        def encrypt(text):27        def encrypt(text):
28            text = plugboard(text, plugboard_position)28            text = plugboard(text, plugboard_position)
29            text = rotor(text, rotor_position)29            text = rotor(text, rotor_position)
30            return func(text)30            return func(text)
31        return encrypt31        return encrypt
32    return decorator32    return decorator
3333
34def enigma_decrypt(plugboard_position, rotor_position):34def enigma_decrypt(plugboard_position, rotor_position):
35    def decrypt_decorator(func):35    def decrypt_decorator(func):
36        def decrypt_text(text):36        def decrypt_text(text):
n37            # Reverse the rotor configuration dictionaryn
38            rotor_reverse = {v: k for k, v in rotor_position.items()}37            rotor_reverse = {v: k for k, v in rotor_position.items()}
t39            text = rotor(text, rotor_reverse)  # Decrypt using the reverse rotor configurationt38            text = rotor(text, rotor_reverse) 
40            text = plugboard(text, plugboard_position)39            text = plugboard(text, plugboard_position)
41            return func(text)40            return func(text)
42        return decrypt_text41        return decrypt_text
43    return decrypt_decorator42    return decrypt_decorator
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    keys = dict(plugboard_position)2    keys = dict(plugboard_position)
3    result = []3    result = []
4    for char in text:4    for char in text:
5        if char in keys:5        if char in keys:
6            result.append(keys[char])6            result.append(keys[char])
7        elif char in keys.values():7        elif char in keys.values():
8            for key, value in keys.items():8            for key, value in keys.items():
9                if value == char:9                if value == char:
10                    result.append(key)10                    result.append(key)
11        else:11        else:
12            result.append(char)12            result.append(char)
13    return ''.join(result)  13    return ''.join(result)  
1414
15def rotor(text, rotor_position):15def rotor(text, rotor_position):
16    text.split()16    text.split()
17    result = []17    result = []
18    for symbol in text:18    for symbol in text:
19        if symbol in rotor_position:19        if symbol in rotor_position:
20            result.append(rotor_position[symbol])20            result.append(rotor_position[symbol])
21        else:21        else:
22            result.append(symbol)22            result.append(symbol)
23    return ''.join(result)23    return ''.join(result)
2424
25def enigma_encrypt(plugboard_position , rotor_position):25def enigma_encrypt(plugboard_position , rotor_position):
n26   def decorator(func):n26    def decorator(func):
27        def encrypt(text):27        def encrypt(text):
28            text = plugboard(text, plugboard_position)28            text = plugboard(text, plugboard_position)
29            text = rotor(text, rotor_position)29            text = rotor(text, rotor_position)
30            return func(text)30            return func(text)
31        return encrypt31        return encrypt
32    return decorator32    return decorator
3333
34def enigma_decrypt(plugboard_position, rotor_position):34def enigma_decrypt(plugboard_position, rotor_position):
35    def decrypt_decorator(func):35    def decrypt_decorator(func):
36        def decrypt_text(text):36        def decrypt_text(text):
37            # Reverse the rotor configuration dictionary37            # Reverse the rotor configuration dictionary
38            rotor_reverse = {v: k for k, v in rotor_position.items()}38            rotor_reverse = {v: k for k, v in rotor_position.items()}
39            text = rotor(text, rotor_reverse)  # Decrypt using the reverse rotor configuration39            text = rotor(text, rotor_reverse)  # Decrypt using the reverse rotor configuration
40            text = plugboard(text, plugboard_position)40            text = plugboard(text, plugboard_position)
41            return func(text)41            return func(text)
42        return decrypt_text42        return decrypt_text
43    return decrypt_decorator43    return decrypt_decorator
t44 t
45 
46plugboard_position = [{'a', 'c'}, {'t', 'z'}]
47rotor_position = {'v': 'd', 'd': 'v', 'y': 'u', 'n': 'n', 'i': 'w', 'z': 'p',
48                  's': 'e', 'x': 's', 'h': 'f', 'b': 'x', 'u': 'c', 'p': 'q',
49                  'r': 'g', 'q': 'j', 'e': 't', 'l': 'y', 'o': 'z', 'g': 'o',
50                  'k': 'b', 't': 'h', 'j': 'm', 'a': 'a', 'w': 'i', 'f': 'l',
51                  'm': 'r', 'c': 'k'}
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op