Implement day 1

This commit is contained in:
2024-12-01 10:48:35 +01:00
parent 6adfbd29f1
commit 16092fe5b2
5 changed files with 45 additions and 8 deletions

View File

@@ -1,5 +1,6 @@
import datetime
import time
from typing import IO
import click
@@ -19,8 +20,9 @@ from aoc import days
"-t", "--time", "timing", is_flag=True, help="Print elapsed time afterwards"
)
@click.argument("day", required=True)
def main(day: int, timing: bool, data: str) -> None:
def main(day: int, timing: bool, data: IO[str]) -> None:
runner_class = days.get_runner(day)
data = data.read()
start = time.perf_counter_ns()

View File

@@ -1,13 +1,28 @@
from collections import defaultdict
from io import StringIO
from typing import Any
from . import SeparateRunner
import numpy
from . import CombinedRunner
class DayRunner(SeparateRunner):
class DayRunner(CombinedRunner):
@classmethod
def part1(cls, _data: str) -> Any:
return "Hello"
def run_both(cls, data: str) -> tuple[Any, Any]:
data = StringIO(data)
nums = numpy.loadtxt(data, dtype=numpy.int32)
@classmethod
def part2(cls, _data: str) -> Any:
return "world!"
left = nums[..., 0]
right = nums[..., 1]
left.sort()
right.sort()
diff = numpy.abs(left - right).sum()
counts = defaultdict(int)
for val in right:
counts[val] += 1
return diff, sum(counts[v] * v for v in left)