Day 17 (Part 2)

This commit is contained in:
Sebastian Seedorf
2020-12-17 11:52:45 +01:00
parent ce4e8322c9
commit ad8a6b1a67
3 changed files with 13 additions and 6 deletions

View File

@@ -1,3 +1,8 @@
.#. .##..#.#
..# #...##.#
### ##...#.#
.##.##..
...#.#.#
.##.#..#
...#..##
###..##.

View File

@@ -20,6 +20,6 @@ for iter in range(6):
x = np.flatnonzero(grid.sum(axis=(1, 2))) x = np.flatnonzero(grid.sum(axis=(1, 2)))
y = np.flatnonzero(grid.sum(axis=(0, 2))) y = np.flatnonzero(grid.sum(axis=(0, 2)))
z = np.flatnonzero(grid.sum(axis=(0, 1))) z = np.flatnonzero(grid.sum(axis=(0, 1)))
grid = grid[x, :, :][:, y, :][:, :, z] grid = grid[min(x):max(x)+1, :, :][:, min(y):max(y)+1, :][:, :, min(z):max(z)+1]
print(np.sum(grid)) print(np.sum(grid))

View File

@@ -12,18 +12,20 @@ kernel = np.ones((3, 3, 3, 3), dtype=np.byte)
kernel[1, 1, 1, 1] = 0 kernel[1, 1, 1, 1] = 0
for iter in range(2): for iter in range(6):
grid = np.pad(grid, pad_width=1, mode='constant', constant_values=0) grid = np.pad(grid, pad_width=1, mode='constant', constant_values=0)
neighbors = signal.convolve(grid, kernel, mode='same') neighbors = signal.convolve(grid, kernel, mode='same')
set_inactive = np.logical_and(grid == 1, np.floor_divide(neighbors, 2) != 1) set_inactive = np.logical_and(grid == 1, np.floor_divide(neighbors, 2) != 1)
set_active = np.logical_and(grid == 0, neighbors == 3) set_active = np.logical_and(grid == 0, neighbors == 3)
grid[set_inactive] = 0 grid[set_inactive] = 0
grid[set_active] = 1 grid[set_active] = 1
#if iter == 1: print(grid)
print(iter+1, grid.shape)
x = np.flatnonzero(grid.sum(axis=(1, 2, 3))) x = np.flatnonzero(grid.sum(axis=(1, 2, 3)))
y = np.flatnonzero(grid.sum(axis=(0, 2, 3))) y = np.flatnonzero(grid.sum(axis=(0, 2, 3)))
z = np.flatnonzero(grid.sum(axis=(0, 1, 3))) z = np.flatnonzero(grid.sum(axis=(0, 1, 3)))
w = np.flatnonzero(grid.sum(axis=(0, 1, 2))) w = np.flatnonzero(grid.sum(axis=(0, 1, 2)))
grid = grid[x, :, :, :][:, y, :, :][:, :, z, :][:, :, :, w] grid = grid[min(x):max(x)+1, :, :, :][:, min(y):max(y)+1, :, :][:, :, min(z):max(z)+1, :][:, :, :, min(w):max(w)+1]
print(iter+1, grid.shape) print(iter+1, grid.shape)