67 lines
1.5 KiB
Python
67 lines
1.5 KiB
Python
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()
|