From fa75898ed35c732ba4e9d455f16dee48ba6c5ca8 Mon Sep 17 00:00:00 2001 From: Tom van der Lee Date: Fri, 16 Dec 2022 10:48:22 +0100 Subject: Day 15 [WIP] --- day15/__init__.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 day15/__init__.py (limited to 'day15/__init__.py') diff --git a/day15/__init__.py b/day15/__init__.py new file mode 100644 index 0000000..3ba49d3 --- /dev/null +++ b/day15/__init__.py @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +import re +from abc import ABC +from collections import namedtuple +from dataclasses import dataclass, field +from typing import Tuple, Iterator, Any, Set + +from aoc import BaseAssignment + + +class Coordinate(namedtuple("Coordinate", ["x", "y"])): + def distance(self, other: "Coordinate"): + return abs(other.x - self.x) + abs(other.y - self.y) + + +@dataclass +class Sensor: + coordinate: Coordinate + nearest: Coordinate + + def __post_init__(self): + self.radius = self.coordinate.distance(self.nearest) + + +@dataclass +class Map: + sensors: Set[Coordinate] = field(default_factory=set) + beacons: Set[Coordinate] = field(default_factory=set) + + +input_pattern = re.compile("x=(-?[-0-9]+), y=(-?[0-9]+)") + + +class Assignment(BaseAssignment, ABC): + def get_coordinates(self, line: str) -> Tuple[Coordinate, Coordinate]: + match = input_pattern.findall(line) + + if len(match) != 2: + raise RuntimeError() + + sensor_match, beacon_match = match + + beacon = Coordinate(int(beacon_match[0]), int(beacon_match[1])) + sensor = Sensor(Coordinate(int(sensor_match[0]), int(sensor_match[1])), beacon) + + result = tuple(Coordinate(int(x), int(y)) for x, y in match) + + return result + + def parse_input(self): + pass + + +class AssignmentOne(Assignment): + example_result = 10 + + def run(self, input: Iterator) -> Any: + sensors = set() + beacons = set() + + for line in input: + sensor, beacon = self.get_coordinates(line) + sensors.add(sensor) + beacons.add(beacon) + + pass + + +class AssignmentTwo(Assignment): + pass -- cgit v1.2.3