Skip to content

Commit e2543f5

Browse files
committed
script
1 parent 0c6c008 commit e2543f5

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

scripts/extract_drawing.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#!/usr/bin/env python3
2+
3+
# verified for the following years: 2024
4+
5+
# curl -H "Cookie: session=$(cat ~/.adventofcode.session)" https://adventofcode.com/2024 -o 2024.html
6+
7+
8+
import re
9+
import sys
10+
from pathlib import Path
11+
12+
if len(sys.argv) != 2:
13+
print(f"Usage: {sys.argv[0]} <file>")
14+
exit(1)
15+
16+
17+
def rgb(s: str) -> str:
18+
rgb = re.search(r"#([\da-f]+);", s).group(1)
19+
if len(rgb) == 3:
20+
if rgb == "ccc":
21+
rgb = "cccccc"
22+
elif rgb == "333":
23+
rgb = "333333"
24+
else:
25+
print(f"Unknown color: {rgb}")
26+
exit()
27+
elif len(rgb) == 6:
28+
pass
29+
else:
30+
print(f"Unknown color: {rgb}")
31+
exit()
32+
33+
rgb = int(rgb, 16)
34+
r = rgb >> 16
35+
g = (rgb >> 8) & 0xFF
36+
b = rgb & 0xFF
37+
return f"\033[38;2;{r};{g};{b}m"
38+
39+
40+
colors = {}
41+
42+
colors[None] = rgb("#606060;") # "\033[0m"
43+
44+
45+
for line in Path(sys.argv[1]).read_text().splitlines():
46+
47+
if line.startswith(".calendar .calendar-color-"):
48+
49+
line = line.split(maxsplit=2)
50+
color = line[1][1:]
51+
code = rgb(line[2])
52+
53+
colors[color] = code
54+
continue
55+
56+
if line.startswith('<pre class="calendar">'):
57+
a = line.index(">") + 1
58+
line = line[a:]
59+
print(line)
60+
continue
61+
62+
if "calendar-verycomplete" not in line:
63+
continue
64+
65+
a = line.index(">") + 1
66+
b = line.find('<span class="calendar-day">')
67+
line = line[a:b]
68+
69+
line = re.sub(r'<span class="(.+?)">', lambda x: colors[x.group(1)], line)
70+
71+
# line = re.sub(r"(<span.+?>)(.+?)(</span>)", lambda m: f"{rgb(m[1])}{m[2]}\033[0m", line)
72+
line = re.sub(r"(<span.+?>)(.+?)(</span>)", lambda m: "", line)
73+
74+
line = line.replace("</span>", colors[None])
75+
line = line.replace("</i>", colors[None])
76+
line = line.replace("<i>", "\033[2m")
77+
78+
line = line.replace("&gt;", ">")
79+
line = line.replace("&lt;", "<")
80+
line = line.replace("&quot;", "'")
81+
82+
print(line + "\033[0m")

0 commit comments

Comments
 (0)