-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdecoder_ring.py
More file actions
39 lines (27 loc) · 827 Bytes
/
decoder_ring.py
File metadata and controls
39 lines (27 loc) · 827 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import itertools
import re
import sys
from collections import defaultdict
class DecoderRing(defaultdict):
def __missing__(self, key):
return key
letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
numbers = range(1, 27)
inF = open(sys.argv[1])
lines = inF.readlines()
key = (lines[0].split(" ")[0], int(lines[0].split(" ")[1]))
message = lines[1].rstrip()
inF.close()
ring = DecoderRing()
letter_ring = itertools.cycle(letters)
number_ring = itertools.cycle(numbers)
ring[str(key[1])] = key[0]
while key[0] != letter_ring.next():
continue
while key[1] != number_ring.next():
continue
for i in range(26):
ring[str(number_ring.next())] = letter_ring.next()
pattern = re.compile(r'\b(' + '|'.join(ring.keys()) + r')\b')
result = pattern.sub(lambda x: ring[x.group()], message)
print re.sub('-', '', result)