From 06cb539f69f0b501afaa9ef5b6d89863e1c9d111 Mon Sep 17 00:00:00 2001 From: Tom van der Lee Date: Sat, 17 Dec 2022 17:25:46 +0100 Subject: Added some utilities --- aoc/datastructures.py | 23 +++++++++++++---------- day9/__init__.py | 18 +++++------------- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/aoc/datastructures.py b/aoc/datastructures.py index c49f564..81a68e4 100644 --- a/aoc/datastructures.py +++ b/aoc/datastructures.py @@ -3,25 +3,28 @@ from collections import namedtuple class Coordinate(namedtuple("Coordinate", ["x", "y"])): - def __sub__(self, other: "Coordinate"): + def __sub__(self, other: "Coordinate") -> "Coordinate": return Coordinate(self.x - other.x, self.y - other.y) - def __add__(self, other: "Coordinate"): + def __add__(self, other: "Coordinate") -> "Coordinate": return Coordinate(self.x + other.x, self.y + other.y) - def manhattan_distance(self, other: "Coordinate"): + def manhattan_distance(self, other: "Coordinate") -> int: return abs(self.x - other.x) + abs(self.y - other.y) @property - def polarity_x(self): + def polarity(self) -> "Coordinate": try: - return abs(self.x) / self.x + px = abs(self.x) / self.x except ZeroDivisionError: - return 0 + px = 0 - @property - def polarity_y(self): try: - return abs(self.y) / self.y + py = abs(self.y) / self.y except ZeroDivisionError: - return 0 + py = 0 + + return Coordinate( + px, + py, + ) diff --git a/day9/__init__.py b/day9/__init__.py index a2d6d82..ba29708 100644 --- a/day9/__init__.py +++ b/day9/__init__.py @@ -36,26 +36,18 @@ class Assignment(BaseAssignment, ABC): if abs(delta.x) < 2 and abs(delta.y) < 2: return tail elif abs(delta.x) > 1 and delta.y == 0: - return tail + Coordinate( - delta.x - delta.polarity_x, - 0, - ) + return tail + delta - delta.polarity elif abs(delta.x) > 1 and abs(delta.y) == 1: - return tail + Coordinate(delta.x - delta.polarity_x, delta.y) + return tail + Coordinate(delta.x - delta.polarity.x, delta.y) elif abs(delta.y) > 1 and delta.x == 0: - return tail + Coordinate( - 0, - delta.y - delta.polarity_y, - ) + return tail + delta - delta.polarity elif abs(delta.y) > 1 and abs(delta.x) == 1: return tail + Coordinate( delta.x, - delta.y - delta.polarity_y, + delta.y - delta.polarity.y, ) elif abs(delta.x) > 1 and abs(delta.y) > 1: - return tail + Coordinate( - delta.x - delta.polarity_x, delta.y - delta.polarity_y - ) + return tail + delta - delta.polarity def tail_positions(self, input: Iterator[str], length: int) -> Iterator[Coordinate]: knots = [Coordinate(0, 0) for _ in range(length)] -- cgit v1.2.3