from __future__ import annotations from dataclasses import dataclass from .aoc import Aoc2, AocSameParser @dataclass class Map: galaxies: list[tuple[int, int]] @classmethod def from_input(cls, inpt: str) -> Map: lines = inpt.splitlines() galaxies = [] for y, line in enumerate(lines): for x, char in enumerate(line): if char == "#": galaxies.append((x, y)) print(galaxies) height = len(lines) width = len(lines[0]) missing_ys = [] missing_xs = [] for y in range(height): if y not in (y for (_, y) in galaxies): missing_ys.append(y) for x in range(width): if x not in (x for (x, _) in galaxies): missing_xs.append(x) print(missing_xs) print(missing_ys) adjusted_galaxies = [] for x, y in galaxies: x_offset = len([m for m in missing_xs if m < x]) y_offset = len([m for m in missing_ys if m < y]) adjusted_galaxies.append((x + x_offset, y + y_offset)) return cls(galaxies) class Day11(AocSameParser[Map], Aoc2[Map, Map]): def parseinput(self, inpt: str) -> Map: return Map.from_input(inpt) def part1(self, inpt: Map) -> None: print(inpt) def part2(self, inpt: Map) -> None: print(inpt) def main() -> None: day11 = Day11(2023, 11) day11.run_example_1() if __name__ == "__main__": main()