From f250bfa4ad962092ad96cb6bac7939e30f7251b0 Mon Sep 17 00:00:00 2001 From: rene-d Date: Wed, 25 Dec 2024 10:25:44 +0100 Subject: [PATCH] =?UTF-8?q?xmas=20=F0=9F=8E=84=F0=9F=8E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/extract_drawing.py | 10 ++-- scripts/xmas.py | 96 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 6 deletions(-) create mode 100755 scripts/xmas.py diff --git a/scripts/extract_drawing.py b/scripts/extract_drawing.py index b534d7c..a14b077 100755 --- a/scripts/extract_drawing.py +++ b/scripts/extract_drawing.py @@ -77,15 +77,13 @@ def rgb(s: str) -> str: code = rgb(line[2]) colors[color] = code - continue - if line.startswith('
'):
-        a = line.index(">") + 1
-        line = line[a:]
-        print(line)
-        continue
+
+calendar = re.search(r'
(.+?)
', calendar, re.DOTALL).group(1) +for line in calendar.splitlines(): if "calendar-verycomplete" not in line: + print(line) continue a = line.index(">") + 1 diff --git a/scripts/xmas.py b/scripts/xmas.py new file mode 100755 index 0000000..f2c3648 --- /dev/null +++ b/scripts/xmas.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 + +import subprocess + +AOC_10_YEARS = [ + "", + " .-----. .------------------.", + " .--'\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", + " .--'\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", + ".---'\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", + "|\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", + "|\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", + "| \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", + "|\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", + "|\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", + "'---' ||[][]_\\-| |\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", + " |------- | | \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", + " |\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", + " | \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", + " |\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", + " |\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", + " |\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", + " | \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", + " |\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", + " | \x1b[38;2;0;204;0m'..'\x1b[0m \x1b[38;2;0;204;0m.'\x1b[0m| |. 'o . | |┘*┤yrs├─| 18 \x1b[33m**\x1b[0m", + " | \x1b[38;2;85;85;187m~\x1b[0m \x1b[38;2;0;204;0m..'\x1b[0m | |: .'. .| |─┘├┬┬┬┴─| 19 \x1b[33m**\x1b[0m", + " |\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", + ".------'\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", + "| \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", + "|\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", + "|\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", + "|\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", + "'----------------------' '------------------'", +] + + +def osc8_link(url: str, text: str): + """Lien clickable dans le terminal.""" + OSC = "\033]" + ST = "\a" + return f"{OSC}8;;{url}{ST}{text}{OSC}8;;{ST}" + + +def lolcat(s: str, seed: int) -> str: + p = subprocess.Popen(f"lolcat -f --seed {seed}", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE) + s, _ = p.communicate(s.encode()) + return s.decode() + + +def figlet(s: str, seed: int = 10) -> str: + p = subprocess.Popen( + f"figlet -w 100 -f small | lolcat -f --seed {seed}", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE + ) + s, _ = p.communicate(s.encode()) + return s.decode() + + +def xmas(lang): + if lang == "fr": + xmas = "JOYEUX NOEL !" + indent1 = 1 + indent2 = 17 + else: + xmas = "Merry Christmas !" + indent1 = 6 + indent2 = 22 + + lines = [] + + lines.append("cat <<'EOF'") + + for line in AOC_10_YEARS: + lines.append(" " * indent1 + line) + + title = "Advent of Code 2024" + title = osc8_link("https://adventofcode.com/2024", lolcat(title, 100)) + title = lolcat("-" * indent2 + " [ ", 26) + title + lolcat("] " + "-" * indent2, 29) + lines.append(title) + + lines.append(figlet(xmas)) + + lines.append("EOF") + + return "\n".join(lines) + + +print( + f""" +#!/bin/sh +if [ "$1" = fr ]; then + {xmas('fr')} +else + {xmas('en')} +fi +""" +)