/
Day09.py
27 lines (24 loc) · 1.12 KB
/
Day09.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
def getDecompressedLengthUtil(line, startIndex, endIndex, decompressAllMarkers = False):
decompressedLength = 0
lineIndex = startIndex
while lineIndex < endIndex:
if line[lineIndex] != '(': #if it's a letter
decompressedLength += 1
lineIndex += 1
else:
lineIndex += 1 #skip '('
indexRightParen = line.index(')', lineIndex)
length, repeat = map(int, line[lineIndex:indexRightParen].split('x'))
lineIndex = indexRightParen + 1
if decompressAllMarkers:
decompressedLength += repeat * getDecompressedLengthUtil(line, lineIndex, lineIndex + length, decompressAllMarkers)
else:
decompressedLength += repeat * length
lineIndex += length
return decompressedLength
def getDecompressedLength(line, decompressAllMarkers = False):
return getDecompressedLengthUtil(line, 0, len(line), decompressAllMarkers)
DATA_FILENAME = "data.txt"
line = open(DATA_FILENAME).read().strip()
print(getDecompressedLength(line)) #part 1 answer
print(getDecompressedLength(line, True)) #part 2 answer