# Advent of code 2023 day 10 initial

Dec 10th, 2023 (edited)
661
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. def day10(s, *, part2=False, offset=(1, -1)):  # Offset must be set manually as (+-1, +-1).
2.   grid = np.array([list(line) for line in s.splitlines()])
3.   (yx_start,) = np.argwhere(grid == 'S')
4.   loop = [tuple(yx_start)]
5.   dy, dx = 1, 0
6.   yx = tuple(yx_start + (dy, dx))
7.   while (ch := grid[yx]) != 'S':
8.     loop.append(yx)
9.     dy, dx = (dx, dy) if ch in 'L7' else (-dx, -dy) if ch in 'JF' else (dy, dx)
10.     yx = yx[0] + dy, yx[1] + dx
11.
12.   if not part2:
13.     return len(loop) // 2
14.
15.   grid2 = np.full(np.array(grid.shape) * 2 + 1, 0)
16.   for (y0, x0), (y1, x1) in itertools.pairwise(loop + [loop[0]]):
17.     grid2[y0 * 2, x0 * 2] = grid2[y0 + y1, x0 + x1] = 1
18.
19.   seed_point = tuple(yx_start * 2 + offset)
20.   skimage.segmentation.flood_fill(grid2, seed_point, 2, in_place=True)
21.   return np.count_nonzero(grid2[::2, ::2] == 2)