|
| 1 | +"""Wim's solutions for https://adventofcode.com/""" |
| 2 | +import logging |
| 3 | +import os |
| 4 | +import runpy |
| 5 | +import sys |
| 6 | +from argparse import ArgumentParser |
| 7 | +from datetime import datetime |
| 8 | +from shutil import copy |
| 9 | + |
| 10 | +from aocd.get import most_recent_year |
| 11 | +from aocd.models import Puzzle |
| 12 | +from aocd.utils import AOC_TZ |
| 13 | + |
| 14 | + |
| 15 | +def run_one(): |
| 16 | + parser = ArgumentParser(description=__doc__) |
| 17 | + aoc_now = datetime.now(tz=AOC_TZ) |
| 18 | + parser.add_argument( |
| 19 | + "day", |
| 20 | + nargs="?", |
| 21 | + type=int, |
| 22 | + choices=range(1, 26), |
| 23 | + default=min(aoc_now.day, 25) if aoc_now.month == 12 else 1, |
| 24 | + help="1-25 (default: %(default)s)", |
| 25 | + ) |
| 26 | + parser.add_argument( |
| 27 | + "year", |
| 28 | + nargs="?", |
| 29 | + type=int, |
| 30 | + choices=range(2015, aoc_now.year + int(aoc_now.month == 12)), |
| 31 | + default=most_recent_year(), |
| 32 | + help=">= 2015 (default: %(default)s)", |
| 33 | + ) |
| 34 | + parser.add_argument("-d", "--data") |
| 35 | + log_levels = "DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL" |
| 36 | + parser.add_argument("--log-level", choices=log_levels) |
| 37 | + args = parser.parse_args() |
| 38 | + if args.log_level: |
| 39 | + level_int = getattr(logging, args.log_level) |
| 40 | + logging.basicConfig(format="%(message)s", level=level_int) |
| 41 | + mod_name = f"aoc_wim.aoc{args.year}.q{args.day:02d}" |
| 42 | + sys.modules.pop(mod_name, None) |
| 43 | + if args.data is not None: |
| 44 | + os.environ["AOC_SESSION"] = "aocw" |
| 45 | + path = os.path.expanduser("~/.config/aocd/aocw/") |
| 46 | + os.makedirs(path, exist_ok=True) |
| 47 | + path += f"{args.year}_{args.day:02d}_input.txt" |
| 48 | + if os.path.isfile(args.data): |
| 49 | + copy(args.data, path) |
| 50 | + else: |
| 51 | + with open(path, "w") as f: |
| 52 | + print(args.data, file=f) |
| 53 | + print(f"--- {args.year} Day {args.day}: {Puzzle(args.year, args.day).title} ---") |
| 54 | + runpy.run_module(mod_name, run_name="__main__") |
0 commit comments