Day 18.
This commit is contained in:
parent
89a71c175f
commit
ea5b757180
53
2022/day18.py
Normal file
53
2022/day18.py
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys
|
||||||
|
from typing import FrozenSet
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
xyz = np.asarray(
|
||||||
|
[
|
||||||
|
tuple(int(x) for x in row.split(",")) # type: ignore
|
||||||
|
for row in sys.stdin.read().splitlines()
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
xyz = xyz - xyz.min(axis=0) + 1
|
||||||
|
|
||||||
|
cubes = np.zeros(xyz.max(axis=0) + 3, dtype=bool)
|
||||||
|
cubes[xyz[:, 0], xyz[:, 1], xyz[:, 2]] = True
|
||||||
|
|
||||||
|
n_dims = len(cubes.shape)
|
||||||
|
|
||||||
|
faces = [(-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0), (0, 0, -1), (0, 0, 1)]
|
||||||
|
|
||||||
|
answer_1 = sum(
|
||||||
|
1 for x, y, z in xyz for dx, dy, dz in faces if not cubes[x + dx, y + dy, z + dz]
|
||||||
|
)
|
||||||
|
print(f"answer 1 is {answer_1}")
|
||||||
|
|
||||||
|
visited = np.zeros_like(cubes, dtype=bool)
|
||||||
|
queue = [(0, 0, 0)]
|
||||||
|
|
||||||
|
n_faces = 0
|
||||||
|
while queue:
|
||||||
|
x, y, z = queue.pop(0)
|
||||||
|
|
||||||
|
if visited[x, y, z]:
|
||||||
|
continue
|
||||||
|
|
||||||
|
visited[x, y, z] = True
|
||||||
|
|
||||||
|
for dx, dy, dz in faces:
|
||||||
|
nx, ny, nz = x + dx, y + dy, z + dz
|
||||||
|
if not all(n >= 0 and n < cubes.shape[i] for i, n in enumerate((nx, ny, nz))):
|
||||||
|
continue
|
||||||
|
|
||||||
|
if visited[nx, ny, nz]:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if cubes[nx, ny, nz]:
|
||||||
|
n_faces += 1
|
||||||
|
else:
|
||||||
|
queue.append((nx, ny, nz))
|
||||||
|
print(f"answer 2 is {n_faces}")
|
2150
2022/inputs/day18.txt
Normal file
2150
2022/inputs/day18.txt
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user