1
1
"""Advent of Code 2023 - Day 11."""
2
2
3
- from operator import itemgetter
4
3
from itertools import combinations
4
+ from operator import itemgetter
5
5
from typing import Generator
6
6
7
7
from aoc_2023 .input import Input
8
+ from aoc_2023 .navigation import XY , manhattan_distance
8
9
9
10
10
11
def expand (rows : list [str ], n : int ) -> list [list [tuple [int , int , str ]]]:
@@ -23,24 +24,17 @@ def expand(rows: list[str], n: int) -> list[list[tuple[int, int, str]]]:
23
24
return result
24
25
25
26
26
- def parse (grid : list [list [tuple [int , int , str ]]]) -> Generator [tuple [ int , int ] , None , None ]:
27
+ def parse (grid : list [list [tuple [int , int , str ]]]) -> Generator [XY , None , None ]:
27
28
y = 0
28
29
for row in grid :
29
30
x = 0
30
31
for w , h , c in row :
31
32
if c == "#" :
32
- yield x , y
33
+ yield XY ( x , y )
33
34
x += w
34
35
y += row [0 ][1 ]
35
36
36
37
37
- def manhattan_distance (p1 : tuple [int , int ], p2 : tuple [int , int ]) -> int :
38
- x1 , y1 = p1
39
- x2 , y2 = p2
40
-
41
- return abs (x2 - x1 ) + abs (y2 - y1 )
42
-
43
-
44
38
coordinates = list (parse (expand (Input ("11.txt" ).lines , 2 )))
45
39
distances = list ((p1 , p2 , manhattan_distance (p1 , p2 )) for p1 , p2 in combinations (coordinates , 2 ))
46
40
print ("Part one:" , sum (map (itemgetter (2 ), distances )))
0 commit comments