Initial commit

This commit is contained in:
2024-12-01 14:47:03 -08:00
commit 6828b39aa3
7 changed files with 144 additions and 0 deletions

1
.envrc Normal file
View File

@@ -0,0 +1 @@
use flake

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
__pycache__/
.direnv/
.env
.venv/
*.egg-info

27
flake.lock generated Normal file
View File

@@ -0,0 +1,27 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1733016324,
"narHash": "sha256-8qwPSE2g1othR1u4uP86NXxm6i7E9nHPyJX3m3lx7Q4=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "7e1ca67996afd8233d9033edd26e442836cc2ad6",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

26
flake.nix Normal file
View File

@@ -0,0 +1,26 @@
{
description = "Advent of Code 2024";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
};
outputs = { nixpkgs, ... }:
let
pkgs = import nixpkgs {
system = "x86_64-linux";
};
in
{
devShells.x86_64-linux.default = pkgs.mkShell {
packages = with pkgs; [
python313
python313Packages.venvShellHook
];
venvDir = "./.venv";
postVenvCreation = ''
pip install --editable .
'';
};
};
}

5
pyproject.toml Normal file
View File

@@ -0,0 +1,5 @@
[project]
name = "advent-of-code-2024"
version = "0.0.0"
description = "Advent of Code 2024"
dependencies = ["advent"]

11
readme.md Normal file
View File

@@ -0,0 +1,11 @@
# Advent of Code 2024 Solvers
https://adventofcode.com/2024
## Usage
Install python 3.13 or higher.
```
python solve.py <day>
```

69
solve.py Normal file
View File

@@ -0,0 +1,69 @@
import sys
from time import time
from importlib import import_module
from advent.errors import InvalidSessionIDError, PuzzleNotFoundError
from advent.functions import get_puzzle_input
def usage():
print("Usage: python solve.py <day>")
def main():
if len(sys.argv) != 2:
usage()
sys.exit(1)
try:
day = int(sys.argv[1])
except ValueError:
print("Day must be an integer")
usage()
sys.exit(1)
try:
print(f"Loading 2024, day {day} solver")
mod = import_module(f"puzzles.{day}")
except ModuleNotFoundError:
print(f"Solver for day {day} not found")
sys.exit(1)
try:
print("Fetching puzzle input...")
puzzle_input = get_puzzle_input(2024, int(day))
except (PuzzleNotFoundError, InvalidSessionIDError) as exc:
print(exc)
sys.exit(1)
try:
print("Testing part 1 solution...")
start = time()
assert mod.solve_p1(mod.test_input) == mod.test_solution_p1
print(f"Test passed in {time() - start:.3f} seconds")
print("Solving part 1...")
start = time()
solution_p1 = mod.solve_p1(puzzle_input)
print(f"Part 1 solution: {solution_p1} ({time() - start:.3f} seconds)")
print("Testing part 2 solution...")
start = time()
assert mod.solve_p2(mod.test_input) == mod.test_solution_p2
print(f"Test passed in {time() - start:.3f} seconds")
print("Solving part 2...")
solution_p2 = mod.solve_p2(puzzle_input)
print(f"Part 2 solution: {solution_p2} ({time() - start:.3f} seconds)")
except NotImplementedError:
print("Puzzle solver is incomplete. Exiting")
sys.exit(1)
except exc:
print("Error:", exc)
sys.exit(1)
if __name__ == "__main__":
main()