forked from BlockOG/Level-Code-Tools
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcompressV3.py
More file actions
39 lines (31 loc) · 1.88 KB
/
compressV3.py
File metadata and controls
39 lines (31 loc) · 1.88 KB
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 re
from encoder import encode_number
def compressV3(code):
code = code[::-1]
lastRepeatingPattern = re.match(r"(.+?)\1{2,}", code)
while lastRepeatingPattern is not None:
lastRepeatingPattern = re.match(r"(.+?)\1{2,}", code)
code = list(code)
counter = 0
for i in range(lastRepeatingPattern.span()[0]-1, lastRepeatingPattern.span()[1] - len(lastRepeatingPattern[1])-1):
code.pop(i - counter)
counter += 1
if len(lastRepeatingPattern[1]) - 1 > 73:
if len(lastRepeatingPattern[0]) - len(lastRepeatingPattern[1]) > 73:
code.insert(lastRepeatingPattern.span()[0], "(")
code.insert(lastRepeatingPattern.span()[0], encode_number(len(lastRepeatingPattern[1]) - 1))
code.insert(lastRepeatingPattern.span()[0], "(")
code.insert(lastRepeatingPattern.span()[0], encode_number(len(lastRepeatingPattern[0]) - len(lastRepeatingPattern[1])))
code.insert(lastRepeatingPattern.span()[0], ")")
else:
code.insert(lastRepeatingPattern.span()[0], "(")
code.insert(lastRepeatingPattern.span()[0], encode_number(len(lastRepeatingPattern[1]) - 1))
code.insert(lastRepeatingPattern.span()[0], ")")
code.insert(lastRepeatingPattern.span()[0], encode_number(len(lastRepeatingPattern[0]) - len(lastRepeatingPattern[1])))
else:
code.insert(lastRepeatingPattern.span()[0], ")")
code.insert(lastRepeatingPattern.span()[0], encode_number(len(lastRepeatingPattern[1]) - 1))
code.insert(lastRepeatingPattern.span()[0], encode_number(len(lastRepeatingPattern[0]) - len(lastRepeatingPattern[1])))
code = "".join(code)
lastRepeatingPattern = re.match(r"(.+?)\1{2,}", code)
return code[::-1]