72 lines
1.9 KiB
Python
72 lines
1.9 KiB
Python
import argparse
|
|
import datetime
|
|
|
|
|
|
def get_latest_event_year() -> int:
|
|
now = datetime.datetime.now()
|
|
year = now.year
|
|
|
|
if now.month < 12:
|
|
year -= 1
|
|
|
|
return year
|
|
|
|
|
|
def argument_parser() -> argparse.ArgumentParser:
|
|
parser = argparse.ArgumentParser(description="aoc")
|
|
|
|
subcli = parser.add_subparsers(title="command", required=True, dest="command")
|
|
|
|
solve = subcli.add_parser("solve", help="solve a given day's puzzle")
|
|
solve.add_argument(
|
|
"-e",
|
|
"--example",
|
|
action="store_true",
|
|
required=False,
|
|
help="use example input file instead of real input file",
|
|
)
|
|
solve.add_argument(
|
|
"-y",
|
|
"--year",
|
|
type=int,
|
|
required=False,
|
|
help="year of the puzzle (default: current year)",
|
|
default=get_latest_event_year(),
|
|
)
|
|
solve.add_argument("day", type=int, help="day of the puzzle (1-25)")
|
|
|
|
create = subcli.add_parser(
|
|
"create", help="create template and input files for a given day's puzzle"
|
|
)
|
|
create.add_argument(
|
|
"-y",
|
|
"--year",
|
|
type=int,
|
|
required=False,
|
|
help="year of the puzzle (default: current year)",
|
|
default=get_latest_event_year(),
|
|
)
|
|
create.add_argument("day", type=int, help="day of the puzzle (1-25)")
|
|
|
|
download = subcli.add_parser(
|
|
"download", help="download input file for a given day's puzzle"
|
|
)
|
|
download.add_argument(
|
|
"-f",
|
|
"--force",
|
|
action="store_true",
|
|
required=False,
|
|
help="force re-download even if input file already exists",
|
|
)
|
|
download.add_argument(
|
|
"-y",
|
|
"--year",
|
|
type=int,
|
|
required=False,
|
|
help="year of the puzzle (default: current year)",
|
|
default=get_latest_event_year(),
|
|
)
|
|
download.add_argument("day", type=int, help="day of the puzzle (1-25)")
|
|
|
|
return parser
|