diff options
Diffstat (limited to '2022/18/solve.py')
-rw-r--r-- | 2022/18/solve.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/2022/18/solve.py b/2022/18/solve.py new file mode 100644 index 0000000..540640e --- /dev/null +++ b/2022/18/solve.py @@ -0,0 +1,34 @@ +import numpy as np + +cubes = set( + [ + tuple(int(c) for c in dat.split(",")) + for dat in open("input").readlines() + if dat != "" + ] +) + + +def sides(cube): + i = np.identity(3, dtype=int) + return set([tuple(cube + m) for m in np.vstack([i, -i])]) + + +def part1(): + return sum(len(sides(cube) - cubes) for cube in cubes) + + +def part2(): + visited = set() + q = [(0, 0, 0)] + high = max(max(np.array(cubes).max(axis=0))) + 1 + while q: + current = q.pop() + sub = sides(current) - cubes - visited + q += [side for side in sub if all(-1 <= val <= high for val in side)] + visited.add(current) + return sum((side in visited) for cube in cubes for side in sides(cube)) + + +print(f"Part 1: {part1()}") +print(f"Part 2: {part2()}") |