blob: 540640e78a58199e83e20c38cfcc06c02b4fd52f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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()}")
|