Домашни > Енигма > Решения > Решението на Николай Николаев

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

10 точки общо

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

 1"""
 2Solution to homework 2 for Introduction to Python course at FMI
 3by Nikolay Nikolaev.
 4"""
 5
 6plugboard_pos = [{'a', 'c'}, {'t', 'z'}]
 7rotor_pos = {'v': 'd', 'd': 'v', 'y': 'u', 'n': 'n', 'i': 'w', 'z': 'p',
 8            's': 'e', 'x': 's', 'h': 'f', 'b': 'x', 'u': 'c', 'p': 'q',
 9            'r': 'g', 'q': 'j', 'e': 't', 'l': 'y', 'o': 'z', 'g': 'o',
10            'k': 'b', 't': 'h', 'j': 'm', 'a': 'a', 'w': 'i', 'f': 'l',
11            'm': 'r', 'c': 'k'}
12
13
14def plugboard(text, plugboard_position):
15    """
16    Changes every occurence of a letter with its plugboard_position pair,
17    using plugboard_position's values parsed into a helper dict.
18    """
19    new_text = ""
20    plugboard_dict = {}
21
22    for set_entity in plugboard_position:
23        set_entity = list(set_entity)
24        plugboard_dict[set_entity[0]] = set_entity[1]
25        plugboard_dict[set_entity[1]] = set_entity[0]
26        
27    for letter in text:
28        new_text = new_text + plugboard_dict.get(letter, letter)
29    return new_text
30
31
32def rotor(text, rotor_position):
33    """Changes every occurence of a letter with its rotor_position value."""
34    new_text = ""
35    for letter in text:
36        new_text = new_text + rotor_position.get(letter, letter)
37    return new_text
38
39
40def enigma_encrypt(plugboard_position=plugboard_pos, rotor_position=rotor_pos):
41    """
42    Encrypts the text, given to the decorated function, 
43    using the given list and dict.
44    """
45    def encrypt_decorator(func):
46        def wrapper(text):
47            new_text = plugboard(text, plugboard_position)
48            new_text = rotor(new_text, rotor_position)
49            return func(new_text)
50        return wrapper
51    return encrypt_decorator
52
53
54def enigma_decrypt(plugboard_position = plugboard_pos, rotor_position = rotor_pos):
55    """
56    Decrypts the text, given to the decorated function, 
57    using the given list and dict."""
58    def decrypt_decorator(func):
59        def wrapper(text):
60            swapped_dict = {value: key for key, value in rotor_position.items()}
61            new_text = rotor(text, swapped_dict)
62            new_text = plugboard(new_text, plugboard_position)
63            return func(new_text)
64        return wrapper
65    return decrypt_decorator

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

OK

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

f1"""f1"""
2Solution to homework 2 for Introduction to Python course at FMI2Solution to homework 2 for Introduction to Python course at FMI
3by Nikolay Nikolaev.3by Nikolay Nikolaev.
4"""4"""
55
6plugboard_pos = [{'a', 'c'}, {'t', 'z'}]6plugboard_pos = [{'a', 'c'}, {'t', 'z'}]
7rotor_pos = {'v': 'd', 'd': 'v', 'y': 'u', 'n': 'n', 'i': 'w', 'z': 'p',7rotor_pos = {'v': 'd', 'd': 'v', 'y': 'u', 'n': 'n', 'i': 'w', 'z': 'p',
8            's': 'e', 'x': 's', 'h': 'f', 'b': 'x', 'u': 'c', 'p': 'q',8            's': 'e', 'x': 's', 'h': 'f', 'b': 'x', 'u': 'c', 'p': 'q',
9            'r': 'g', 'q': 'j', 'e': 't', 'l': 'y', 'o': 'z', 'g': 'o',9            'r': 'g', 'q': 'j', 'e': 't', 'l': 'y', 'o': 'z', 'g': 'o',
10            'k': 'b', 't': 'h', 'j': 'm', 'a': 'a', 'w': 'i', 'f': 'l',10            'k': 'b', 't': 'h', 'j': 'm', 'a': 'a', 'w': 'i', 'f': 'l',
11            'm': 'r', 'c': 'k'}11            'm': 'r', 'c': 'k'}
1212
1313
14def plugboard(text, plugboard_position):14def plugboard(text, plugboard_position):
15    """15    """
16    Changes every occurence of a letter with its plugboard_position pair,16    Changes every occurence of a letter with its plugboard_position pair,
17    using plugboard_position's values parsed into a helper dict.17    using plugboard_position's values parsed into a helper dict.
18    """18    """
19    new_text = ""19    new_text = ""
20    plugboard_dict = {}20    plugboard_dict = {}
2121
22    for set_entity in plugboard_position:22    for set_entity in plugboard_position:
23        set_entity = list(set_entity)23        set_entity = list(set_entity)
24        plugboard_dict[set_entity[0]] = set_entity[1]24        plugboard_dict[set_entity[0]] = set_entity[1]
25        plugboard_dict[set_entity[1]] = set_entity[0]25        plugboard_dict[set_entity[1]] = set_entity[0]
t26 t26        
27    print(plugboard_dict)
28    for letter in text:27    for letter in text:
29        new_text = new_text + plugboard_dict.get(letter, letter)28        new_text = new_text + plugboard_dict.get(letter, letter)
30    return new_text29    return new_text
3130
3231
33def rotor(text, rotor_position):32def rotor(text, rotor_position):
34    """Changes every occurence of a letter with its rotor_position value."""33    """Changes every occurence of a letter with its rotor_position value."""
35    new_text = ""34    new_text = ""
36    for letter in text:35    for letter in text:
37        new_text = new_text + rotor_position.get(letter, letter)36        new_text = new_text + rotor_position.get(letter, letter)
38    return new_text37    return new_text
3938
4039
41def enigma_encrypt(plugboard_position=plugboard_pos, rotor_position=rotor_pos):40def enigma_encrypt(plugboard_position=plugboard_pos, rotor_position=rotor_pos):
42    """41    """
43    Encrypts the text, given to the decorated function, 42    Encrypts the text, given to the decorated function, 
44    using the given list and dict.43    using the given list and dict.
45    """44    """
46    def encrypt_decorator(func):45    def encrypt_decorator(func):
47        def wrapper(text):46        def wrapper(text):
48            new_text = plugboard(text, plugboard_position)47            new_text = plugboard(text, plugboard_position)
49            new_text = rotor(new_text, rotor_position)48            new_text = rotor(new_text, rotor_position)
50            return func(new_text)49            return func(new_text)
51        return wrapper50        return wrapper
52    return encrypt_decorator51    return encrypt_decorator
5352
5453
55def enigma_decrypt(plugboard_position = plugboard_pos, rotor_position = rotor_pos):54def enigma_decrypt(plugboard_position = plugboard_pos, rotor_position = rotor_pos):
56    """55    """
57    Decrypts the text, given to the decorated function, 56    Decrypts the text, given to the decorated function, 
58    using the given list and dict."""57    using the given list and dict."""
59    def decrypt_decorator(func):58    def decrypt_decorator(func):
60        def wrapper(text):59        def wrapper(text):
61            swapped_dict = {value: key for key, value in rotor_position.items()}60            swapped_dict = {value: key for key, value in rotor_position.items()}
62            new_text = rotor(text, swapped_dict)61            new_text = rotor(text, swapped_dict)
63            new_text = plugboard(new_text, plugboard_position)62            new_text = plugboard(new_text, plugboard_position)
64            return func(new_text)63            return func(new_text)
65        return wrapper64        return wrapper
66    return decrypt_decorator65    return decrypt_decorator
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

f1"""f1"""
2Solution to homework 2 for Introduction to Python course at FMI2Solution to homework 2 for Introduction to Python course at FMI
3by Nikolay Nikolaev.3by Nikolay Nikolaev.
4"""4"""
55
6plugboard_pos = [{'a', 'c'}, {'t', 'z'}]6plugboard_pos = [{'a', 'c'}, {'t', 'z'}]
7rotor_pos = {'v': 'd', 'd': 'v', 'y': 'u', 'n': 'n', 'i': 'w', 'z': 'p',7rotor_pos = {'v': 'd', 'd': 'v', 'y': 'u', 'n': 'n', 'i': 'w', 'z': 'p',
8            's': 'e', 'x': 's', 'h': 'f', 'b': 'x', 'u': 'c', 'p': 'q',8            's': 'e', 'x': 's', 'h': 'f', 'b': 'x', 'u': 'c', 'p': 'q',
9            'r': 'g', 'q': 'j', 'e': 't', 'l': 'y', 'o': 'z', 'g': 'o',9            'r': 'g', 'q': 'j', 'e': 't', 'l': 'y', 'o': 'z', 'g': 'o',
10            'k': 'b', 't': 'h', 'j': 'm', 'a': 'a', 'w': 'i', 'f': 'l',10            'k': 'b', 't': 'h', 'j': 'm', 'a': 'a', 'w': 'i', 'f': 'l',
11            'm': 'r', 'c': 'k'}11            'm': 'r', 'c': 'k'}
1212
1313
14def plugboard(text, plugboard_position):14def plugboard(text, plugboard_position):
nn15    """
15    """Changes every occurence of a letter with its plugboard_position pair."""16    Changes every occurence of a letter with its plugboard_position pair,
17    using plugboard_position's values parsed into a helper dict.
18    """
16    new_text = ""19    new_text = ""
n17    for text_index, letter in enumerate(text):n20    plugboard_dict = {}
21 
18        for set_index, set_entity in enumerate(plugboard_position):22    for set_entity in plugboard_position:
19            if letter in set_entity:23        set_entity = list(set_entity)
20                for item in set_entity:24        plugboard_dict[set_entity[0]] = set_entity[1]
21                    if item != letter:25        plugboard_dict[set_entity[1]] = set_entity[0]
22                        new_text = new_text + item26 
23                        break27    print(plugboard_dict)
24            elif (set_index + 1 == len(plugboard_position) and28    for letter in text:
25                text_index + 1 > len(new_text)):29        new_text = new_text + plugboard_dict.get(letter, letter)
26                new_text = new_text + letter
27    return new_text30    return new_text
2831
2932
30def rotor(text, rotor_position):33def rotor(text, rotor_position):
31    """Changes every occurence of a letter with its rotor_position value."""34    """Changes every occurence of a letter with its rotor_position value."""
32    new_text = ""35    new_text = ""
33    for letter in text:36    for letter in text:
n34        if letter in rotor_position:n
35            new_text = new_text + rotor_position[letter]37        new_text = new_text + rotor_position.get(letter, letter)
36        else:
37            new_text = new_text + letter
38    return new_text38    return new_text
3939
4040
t41def enigma_encrypt(plugboard_position = plugboard_pos, rotor_position = rotor_pos):t41def enigma_encrypt(plugboard_position=plugboard_pos, rotor_position=rotor_pos):
42    """42    """
43    Encrypts the text, given to the decorated function, 43    Encrypts the text, given to the decorated function, 
44    using the given list and dict.44    using the given list and dict.
45    """45    """
46    def encrypt_decorator(func):46    def encrypt_decorator(func):
47        def wrapper(text):47        def wrapper(text):
48            new_text = plugboard(text, plugboard_position)48            new_text = plugboard(text, plugboard_position)
49            new_text = rotor(new_text, rotor_position)49            new_text = rotor(new_text, rotor_position)
50            return func(new_text)50            return func(new_text)
51        return wrapper51        return wrapper
52    return encrypt_decorator52    return encrypt_decorator
5353
5454
55def enigma_decrypt(plugboard_position = plugboard_pos, rotor_position = rotor_pos):55def enigma_decrypt(plugboard_position = plugboard_pos, rotor_position = rotor_pos):
56    """56    """
57    Decrypts the text, given to the decorated function, 57    Decrypts the text, given to the decorated function, 
58    using the given list and dict."""58    using the given list and dict."""
59    def decrypt_decorator(func):59    def decrypt_decorator(func):
60        def wrapper(text):60        def wrapper(text):
61            swapped_dict = {value: key for key, value in rotor_position.items()}61            swapped_dict = {value: key for key, value in rotor_position.items()}
62            new_text = rotor(text, swapped_dict)62            new_text = rotor(text, swapped_dict)
63            new_text = plugboard(new_text, plugboard_position)63            new_text = plugboard(new_text, plugboard_position)
64            return func(new_text)64            return func(new_text)
65        return wrapper65        return wrapper
66    return decrypt_decorator66    return decrypt_decorator
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op