|
| 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