-
Notifications
You must be signed in to change notification settings - Fork 0
/
kit_logo_encoding.py
executable file
·56 lines (46 loc) · 1.59 KB
/
kit_logo_encoding.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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/bin/python3
def invert(char):
return " " if char == "@" else "@"
# needs to be monochrome
raw = """
@@@@@ @@@@@@@ @@@@@@ @@@@@@@@@@@@@@
@@@ @@@@ @@@@@@@ @@@@@@ @@@@@@@@@@@@@@
@@@@@ @@@@ @@@@@@@@ @@@@@@ @@@@@@
@@@@@ @@@ @@@@@@@ @@@@@@ @@@@@@
@@@ @@@@ @@@ @@@@@@ @@@@@@ @@@@@@
@@@@@@ @@@@ @@ @@@@@@ @@@@@@ @@@@@@
@@@@@@@@ @@@ @@ @@@@@@@ @@@@@@ @@@@@@
@@@@@ @@ @ @@@@@@@ @@@@@@ @@@@@@
@@@@ @@@ @ @ @@@@@@@ @@@@@@ @@@@@@
@@@@@@@@@@@@@ @@ @@@@@@ @@@@@@ @@@@@@
@@@@@@@@@@@@@@@@@@@@@ @@@@@@@ @@@@@@ @@@@@@
"""
lines = raw.strip("\n").split("\n")
width = len(lines[0])
height = len(lines)
single_line = "".join(lines)
first_char = single_line[0]
run_length_encoding = [0]
cur_char = first_char
for i in single_line:
if i == cur_char:
run_length_encoding[-1] += 1
else:
run_length_encoding.append(1)
cur_char = i
print(f"run_length_encoding: {run_length_encoding}")
print(f"first char: '{first_char}'")
print(f"width: {width}")
cur_char = first_char
new_single_line = ""
for i in run_length_encoding:
new_single_line += i * cur_char
cur_char = invert(cur_char)
new_lines = []
for i in range(0, len(new_single_line), width):
new_lines.append(new_single_line[i : i + width])
out = "\n".join(new_lines)
print(out)
print(
f"compression: 1-{len(run_length_encoding)}/{len(raw)} = {1-len(run_length_encoding)/len(raw)}"
)