-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdecode.py
34 lines (26 loc) · 959 Bytes
/
decode.py
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
def getLastNumbers(lastNumber):
# Last number n = i * (i + 1) / 2
# Hence, i = (-1 + (1 + 8 * n)**0.5) / 2 by solving quadratic equation
numRows = int((-1 + (1 + 8 * lastNumber)**0.5) / 2)
rowLastNumbers = []
rowStartNumber = 1
for i in range(1, numRows + 1):
rowLastNumbers.append(rowStartNumber + i - 1)
rowStartNumber += i
return rowLastNumbers
def decode(encodedMessage):
with open(encodedMessage, "r") as f:
lines = f.readlines()
# Storing the words in a dictionary
wordMap = {}
for line in lines:
number, word = line.strip().split()
wordMap[int(number)] = word
# Sorting the keys to form pyramid and fetch last numbers of each row
numbers = sorted(wordMap.keys())
lastNumbers = getLastNumbers(numbers[-1])
message = []
for index in lastNumbers:
message.append(wordMap[index])
return " ".join(message)
print(decode("message.txt"))