Skip to content

Commit f250bfa

Browse files
committed
xmas 🎄🎅
1 parent 573cf73 commit f250bfa

File tree

2 files changed

+100
-6
lines changed

2 files changed

+100
-6
lines changed

scripts/extract_drawing.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,15 +77,13 @@ def rgb(s: str) -> str:
7777
code = rgb(line[2])
7878

7979
colors[color] = code
80-
continue
8180

82-
if line.startswith('<pre class="calendar">'):
83-
a = line.index(">") + 1
84-
line = line[a:]
85-
print(line)
86-
continue
81+
82+
calendar = re.search(r'<pre class="calendar.*?">(.+?)</pre>', calendar, re.DOTALL).group(1)
83+
for line in calendar.splitlines():
8784

8885
if "calendar-verycomplete" not in line:
86+
print(line)
8987
continue
9088

9189
a = line.index(">") + 1

scripts/xmas.py

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
#!/usr/bin/env python3
2+
3+
import subprocess
4+
5+
AOC_10_YEARS = [
6+
"",
7+
" .-----. .------------------.",
8+
" .--'\x1b[38;2;227;181;133m~\x1b[0m \x1b[38;2;227;181;133m~\x1b[0m \x1b[38;2;227;181;133m~\x1b[0m| .-' \x1b[38;2;255;255;102m*\x1b[0m \x1b[38;2;136;102;85m\\\x1b[0m \x1b[38;2;136;102;85m/\x1b[0m '-. 1 \x1b[33m**\x1b[0m",
9+
" .--'\x1b[38;2;227;181;133m~\x1b[0m \x1b[38;2;0;204;0m,\x1b[0m\x1b[38;2;255;255;102m*\x1b[0m \x1b[38;2;227;181;133m~\x1b[0m | | \x1b[38;2;0;153;0m>\x1b[0mo\x1b[38;2;0;153;0m<\x1b[0m \x1b[38;2;136;102;85m\\_\\_\\|_/__/\x1b[0m | 2 \x1b[33m**\x1b[0m",
10+
".---'\x1b[38;2;227;181;133m:\x1b[0m \x1b[38;2;227;181;133m~\x1b[0m \x1b[38;2;0;204;0m'\x1b[0m\x1b[38;2;85;85;187m(~)\x1b[0m\x1b[38;2;0;204;0m,\x1b[0m \x1b[38;2;227;181;133m~\x1b[0m| | \x1b[38;2;0;153;0m>\x1b[0m@\x1b[38;2;0;153;0m>\x1b[0mO\x1b[38;2;0;153;0m<\x1b[0m \x1b[38;2;255;0;0mo\x1b[0m\x1b[38;2;136;102;85m-_/\x1b[0m\x1b[38;2;204;204;204m.\x1b[0m\x1b[38;2;204;204;204m()\x1b[0m\x1b[38;2;136;102;85m__------\x1b[0m| 3 \x1b[33m**\x1b[0m",
11+
"|\x1b[38;2;66;115;34m#\x1b[0m\x1b[38;2;94;171;180m..\x1b[0m\x1b[38;2;127;189;57m@\x1b[0m\x1b[38;2;227;181;133m'.\x1b[0m \x1b[38;2;227;181;133m~\x1b[0m \x1b[38;2;0;204;0m\"\x1b[0m \x1b[38;2;0;204;0m'\x1b[0m \x1b[38;2;227;181;133m~\x1b[0m | |\x1b[38;2;0;153;0m>\x1b[0mO\x1b[38;2;0;153;0m>\x1b[0mo\x1b[38;2;0;153;0m<\x1b[0m@\x1b[38;2;0;153;0m<\x1b[0m \x1b[38;2;136;102;85m\\____\x1b[0m \x1b[38;2;0;204;0m.'\x1b[0m| 4 \x1b[33m**\x1b[0m",
12+
"|\x1b[38;2;127;189;57m_\x1b[0m.~.\x1b[38;2;77;139;3m_\x1b[0m\x1b[38;2;127;189;57m@\x1b[0m\x1b[38;2;227;181;133m'..\x1b[0m \x1b[38;2;227;181;133m~\x1b[0m \x1b[38;2;227;181;133m~\x1b[0m \x1b[38;2;255;255;102m*\x1b[0m| | \x1b[38;2;170;170;170m_|\x1b[0m \x1b[38;2;170;170;170m|_\x1b[0m ..\x1b[38;2;204;204;204m\\_\x1b[0m\x1b[38;2;136;102;85m\\_\x1b[0m \x1b[38;2;0;204;0m..'\x1b[0m\x1b[38;2;255;255;102m*\x1b[0m | 5 \x1b[33m**\x1b[0m",
13+
"| \x1b[38;2;255;255;255m|||\x1b[0m \x1b[38;2;72;136;19m#\x1b[0m\x1b[38;2;66;115;34m@\x1b[0m\x1b[38;2;127;189;57m#@\x1b[0m\x1b[38;2;227;181;133m'''...\x1b[0m| |\x1b[38;2;162;81;81m...\x1b[0m .' '.\x1b[38;2;0;204;0m'''..\x1b[0m\x1b[38;2;212;221;228m/\x1b[0m\x1b[38;2;0;204;0m..\x1b[0m| 6 \x1b[33m**\x1b[0m",
14+
"|\x1b[38;2;72;136;19m#\x1b[0m\x1b[38;2;255;255;255m~~~\x1b[0m\x1b[38;2;127;189;57m#\x1b[0m\x1b[38;2;66;115;34m@\x1b[0m\x1b[38;2;127;189;57m#\x1b[0m \x1b[38;2;127;189;57m@\x1b[0m \x1b[38;2;72;136;19m@\x1b[0m | |\x1b[38;2;165;168;175m/\\\x1b[0m \x1b[38;2;162;81;81m''.\x1b[0m | | \x1b[38;2;204;204;255m-\x1b[0m\x1b[38;2;212;221;228m/\x1b[0m \x1b[38;2;255;255;255m:\x1b[0m| 7 \x1b[33m**\x1b[0m",
15+
"|\x1b[38;2;94;171;180m~~.\x1b[0m.--. ____ | |\x1b[38;2;255;255;102m*\x1b[0m \x1b[38;2;165;168;175m/\x1b[0m\x1b[38;2;223;35;8m~\x1b[0m\x1b[38;2;165;168;175m\\\x1b[0m \x1b[38;2;162;81;81m'.\x1b[0m| | \x1b[38;2;204;204;255m-\x1b[0m \x1b[38;2;212;221;228m/\x1b[0m \x1b[38;2;255;255;255m.'\x1b[0m| 8 \x1b[33m**\x1b[0m",
16+
"'---' ||[][]_\\-| |\x1b[38;2;223;35;8m~\x1b[0m\x1b[38;2;165;168;175m/\x1b[0m \x1b[38;2;255;255;102m*\x1b[0m \x1b[38;2;165;168;175m\\\x1b[0m \x1b[38;2;162;81;81m:\x1b[0m| | \x1b[38;2;255;255;102m*\x1b[0m\x1b[38;2;255;255;255m..'\x1b[0m | 9 \x1b[33m**\x1b[0m",
17+
" |------- | | \x1b[38;2;165;168;175m/\\\x1b[0m \x1b[38;2;162;81;81m.'\x1b[0m| |\x1b[38;2;255;255;255m'''\x1b[0m\x1b[38;2;0;200;255m~~~~~\x1b[0m| 10 \x1b[33m**\x1b[0m",
18+
" |\x1b[38;2;204;204;255m.......\x1b[0m\x1b[38;2;255;0;0m|\x1b[0m| |\x1b[38;2;165;168;175m/\\\x1b[0m \x1b[38;2;162;81;81m..'\x1b[0m | |\x1b[38;2;0;181;237m~\x1b[0m \x1b[38;2;255;255;255m.\x1b[0m \x1b[38;2;0;181;237m.\x1b[0m| 11 \x1b[33m**\x1b[0m",
19+
" | \x1b[38;2;255;255;255m-\x1b[0m \x1b[38;2;255;255;255m-\x1b[0m | |\x1b[38;2;162;81;81m'''\x1b[0m\x1b[38;2;51;51;51m::\x1b[0m\x1b[38;2;255;255;102m:\x1b[0m\x1b[38;2;51;51;51m::\x1b[0m| | \x1b[38;2;255;255;255m.\x1b[0m .| 12 \x1b[33m**\x1b[0m",
20+
" |\x1b[38;2;255;255;255m'.\x1b[0m \x1b[38;2;255;255;255m-\x1b[0m \x1b[38;2;255;255;255m-\x1b[0m| | \x1b[38;2;51;51;51m::\x1b[0m\x1b[38;2;0;153;0m:\x1b[0m\x1b[38;2;51;51;51m::\x1b[0m| |. \x1b[38;2;255;255;255m.'\x1b[0m . | 13 \x1b[33m**\x1b[0m",
21+
" |\x1b[38;2;0;204;0m...\x1b[0m\x1b[38;2;255;255;255m'..''\x1b[0m| |. \x1b[38;2;51;51;51m:\x1b[0m\x1b[38;2;0;153;0m:::\x1b[0m\x1b[38;2;51;51;51m:\x1b[0m| |\x1b[38;2;199;76;48m.\x1b[0m\x1b[38;2;255;0;0m.\x1b[0m\x1b[38;2;255;255;255m|\\\x1b[0m\x1b[38;2;255;0;0m.\x1b[0m\x1b[38;2;199;76;48m.\x1b[0m\x1b[38;2;164;122;77m''\x1b[0m| 14 \x1b[33m**\x1b[0m",
22+
" |\x1b[38;2;0;204;0m.\x1b[0m \x1b[38;2;0;204;0m''.\x1b[0m | |. .\x1b[38;2;0;153;0m:::::\x1b[0m| |──┬┴┴┴┬─| 15 \x1b[33m**\x1b[0m",
23+
" | \x1b[38;2;0;204;0m'.\x1b[0m\x1b[38;2;85;85;187m~\x1b[0m \x1b[38;2;0;204;0m'.\x1b[0m| | : \x1b[38;2;51;51;51m:\x1b[0m\x1b[38;2;51;51;51m:\x1b[0m\x1b[38;2;85;51;34m:\x1b[0m\x1b[38;2;51;51;51m::\x1b[0m| |──┤AoC├o| 16 \x1b[33m**\x1b[0m",
24+
" |\x1b[38;2;0;204;0m.\x1b[0m \x1b[38;2;255;255;102m*\x1b[0m\x1b[38;2;0;204;0m'.\x1b[0m\x1b[38;2;85;85;187m~\x1b[0m \x1b[38;2;0;204;0m:\x1b[0m| | '. . | |┬o┤ten├─| 17 \x1b[33m**\x1b[0m",
25+
" | \x1b[38;2;0;204;0m'..'\x1b[0m \x1b[38;2;0;204;0m.'\x1b[0m| |. 'o . | |┘*┤yrs├─| 18 \x1b[33m**\x1b[0m",
26+
" | \x1b[38;2;85;85;187m~\x1b[0m \x1b[38;2;0;204;0m..'\x1b[0m | |: .'. .| |─┘├┬┬┬┴─| 19 \x1b[33m**\x1b[0m",
27+
" |\x1b[38;2;0;204;0m'''\x1b[0m)) | | .o \x1b[38;2;255;255;102m*\x1b[0m: '. .'──┘\x1b[38;2;0;153;0m>>\x1b[0m\x1b[38;2;255;153;0mo\x1b[0m\x1b[38;2;0;153;0m<<\x1b[0m| 20 \x1b[33m**\x1b[0m",
28+
".------'\x1b[38;2;0;102;255m.-\x1b[0m((\x1b[38;2;0;102;255m---.\x1b[0m'------. | :\x1b[38;2;255;0;0m|\x1b[0m\x1b[38;2;204;204;204m\\|\x1b[0m \x1b[38;2;51;51;153m~\x1b[0m \x1b[38;2;153;0;255m_\x1b[0m'' \x1b[38;2;153;0;255mO>\x1b[0m \x1b[38;2;0;153;0m>>\x1b[0m\x1b[38;2;255;0;0m@\x1b[0m\x1b[38;2;0;153;0m<\x1b[0m\x1b[38;2;255;153;0mo\x1b[0m\x1b[38;2;0;153;0m<\x1b[0m| 21 \x1b[33m**\x1b[0m",
29+
"| \x1b[38;2;255;0;0m.---_\x1b[0m \x1b[38;2;0;102;255m'------'_\x1b[0m \x1b[38;2;170;170;170m.~'\x1b[0m | | \x1b[38;2;204;204;204m|\x1b[0m\x1b[38;2;255;0;0m\\|\x1b[0m\x1b[38;2;153;0;255m\\\x1b[0m \x1b[38;2;153;0;255m/\x1b[0m \x1b[38;2;153;0;255m\\\x1b[0m \x1b[38;2;153;0;255m/\x1b[0m\x1b[38;2;51;51;153m~\x1b[0m \x1b[38;2;0;153;0m>\x1b[0m\x1b[38;2;255;0;0m@\x1b[0m\x1b[38;2;0;153;0m<<\x1b[0m\x1b[38;2;255;255;102m*\x1b[0m\x1b[38;2;0;153;0m<\x1b[0m\x1b[38;2;0;102;255mO\x1b[0m| 22 \x1b[33m**\x1b[0m",
30+
"|\x1b[38;2;255;0;0m/\x1b[0m \x1b[38;2;136;0;0m/\x1b[0m \x1b[38;2;255;0;0m/\\|\x1b[0m\x1b[38;2;0;102;255m|\x1b[0m \x1b[38;2;0;102;255m|\x1b[0m \x1b[38;2;0;102;255m)\x1b[0m\x1b[38;2;170;170;170m/\x1b[0m\x1b[38;2;230;65;11m~\x1b[0m\x1b[38;2;170;170;170m\\\x1b[0m | |\x1b[38;2;0;102;255m___\x1b[0m\x1b[38;2;255;0;0m|\x1b[0m\x1b[38;2;204;204;204m\\|\x1b[0m\x1b[38;2;0;102;255m________\x1b[0m\x1b[38;2;0;153;0m>\x1b[0m\x1b[38;2;0;102;255mO\x1b[0m\x1b[38;2;0;153;0m>>\x1b[0m\x1b[38;2;255;153;0mo\x1b[0m\x1b[38;2;0;153;0m>>\x1b[0m\x1b[38;2;255;153;0mo\x1b[0m| 23 \x1b[33m**\x1b[0m",
31+
"|\x1b[38;2;136;0;0m/\x1b[0m \x1b[38;2;136;0;0m|\x1b[0m \x1b[38;2;255;0;0m\\\x1b[0m \x1b[38;2;255;255;102m*\x1b[0m\x1b[38;2;0;102;255m|\x1b[0m \x1b[38;2;0;102;255m|/\x1b[0m\x1b[38;2;170;170;170m/\x1b[0m \x1b[38;2;230;65;11m/\x1b[0m \x1b[38;2;170;170;170m\\\x1b[0m | | \x1b[38;2;155;113;91m----@\x1b[0m \x1b[38;2;170;170;170m_\x1b[0m\x1b[38;2;208;179;118m|%%%=%%|\x1b[0m\x1b[38;2;170;170;170m_\x1b[0m | 24 \x1b[33m**\x1b[0m",
32+
"|\x1b[38;2;136;0;0m/\x1b[0m \x1b[38;2;136;0;0m\\\x1b[0m \x1b[38;2;255;0;0m\\\x1b[0m \x1b[38;2;0;102;255m'------'\x1b[0m\x1b[38;2;170;170;170m/\x1b[0m \x1b[38;2;230;65;11m/\x1b[0m \x1b[38;2;230;65;11m\\\x1b[0m \x1b[38;2;170;170;170m\\\x1b[0m| '-.\x1b[38;2;155;113;91m!\x1b[0m \x1b[38;2;155;113;91m/^\\\x1b[0m \x1b[38;2;170;170;170m/\x1b[0m \x1b[38;2;170;170;170m\\\x1b[0m\x1b[38;2;94;171;180m.~~.\x1b[0m\x1b[38;2;170;170;170m/\x1b[0m \x1b[38;2;170;170;170m\\\x1b[0m.-' 25 \x1b[33m**\x1b[0m",
33+
"'----------------------' '------------------'",
34+
]
35+
36+
37+
def osc8_link(url: str, text: str):
38+
"""Lien clickable dans le terminal."""
39+
OSC = "\033]"
40+
ST = "\a"
41+
return f"{OSC}8;;{url}{ST}{text}{OSC}8;;{ST}"
42+
43+
44+
def lolcat(s: str, seed: int) -> str:
45+
p = subprocess.Popen(f"lolcat -f --seed {seed}", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
46+
s, _ = p.communicate(s.encode())
47+
return s.decode()
48+
49+
50+
def figlet(s: str, seed: int = 10) -> str:
51+
p = subprocess.Popen(
52+
f"figlet -w 100 -f small | lolcat -f --seed {seed}", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE
53+
)
54+
s, _ = p.communicate(s.encode())
55+
return s.decode()
56+
57+
58+
def xmas(lang):
59+
if lang == "fr":
60+
xmas = "JOYEUX NOEL !"
61+
indent1 = 1
62+
indent2 = 17
63+
else:
64+
xmas = "Merry Christmas !"
65+
indent1 = 6
66+
indent2 = 22
67+
68+
lines = []
69+
70+
lines.append("cat <<'EOF'")
71+
72+
for line in AOC_10_YEARS:
73+
lines.append(" " * indent1 + line)
74+
75+
title = "Advent of Code 2024"
76+
title = osc8_link("https://adventofcode.com/2024", lolcat(title, 100))
77+
title = lolcat("-" * indent2 + " [ ", 26) + title + lolcat("] " + "-" * indent2, 29)
78+
lines.append(title)
79+
80+
lines.append(figlet(xmas))
81+
82+
lines.append("EOF")
83+
84+
return "\n".join(lines)
85+
86+
87+
print(
88+
f"""
89+
#!/bin/sh
90+
if [ "$1" = fr ]; then
91+
{xmas('fr')}
92+
else
93+
{xmas('en')}
94+
fi
95+
"""
96+
)

0 commit comments

Comments
 (0)