advent-of-code/src/holt59/aoc/2015/day9.py

29 lines
901 B
Python
Raw Normal View History

2024-01-05 13:46:05 +00:00
import itertools
from collections import defaultdict
from typing import Any, Iterator, cast
2024-01-05 13:46:05 +00:00
import parse # type: ignore
from ..base import BaseSolver
2024-01-05 13:46:05 +00:00
class Solver(BaseSolver):
def solve(self, input: str) -> Iterator[Any]:
lines = input.splitlines()
2024-01-05 13:46:05 +00:00
distances: dict[str, dict[str, int]] = defaultdict(dict)
for line in lines:
origin, destination, length = cast(
tuple[str, str, int],
parse.parse("{} to {} = {:d}", line), # type: ignore
)
distances[origin][destination] = distances[destination][origin] = length
2024-01-05 13:46:05 +00:00
distance_of_routes = {
route: sum(distances[o][d] for o, d in zip(route[:-1], route[1:]))
for route in map(tuple, itertools.permutations(distances))
}
yield min(distance_of_routes.values())
yield max(distance_of_routes.values())