-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday17.py
More file actions
73 lines (69 loc) · 3.19 KB
/
day17.py
File metadata and controls
73 lines (69 loc) · 3.19 KB
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import numpy as np
with open('/Users/relyea/data/input_day17.txt') as aoc_fp:
zz = [[int(xx) for xx in theline.rstrip().replace('#','1,').replace('.','0,')[0:15].split(',')] for theline in aoc_fp.readlines()]
zz = np.array(zz)
# zz = [
# '.#.',
# '..#',
# '###'
# ]
# zz = [[int(xx) for xx in theline.rstrip().replace('#','1,').replace('.','0,')[0:5].split(',')] for theline in zz]
# zz = np.array(zz)
zz = zz[:,:,np.newaxis,np.newaxis]
for cyc in range(6):
newzz = np.zeros((zz.shape[0]+2,zz.shape[1]+2,zz.shape[2]+2,zz.shape[3]+2))
newzz[1:-1,1:-1,1:-1,1:-1] = zz
newzzcopy = newzz.copy()
for izx in range(newzz.shape[0]):
for izy in range(newzz.shape[1]):
for izz in range(newzz.shape[2]):
for iza in range(newzz.shape[3]):
nnact = 0
for ii in (-1,0,1):
if izx + ii < 0 or izx + ii == newzz.shape[0]:
continue
for jj in (-1,0,1):
if izy + jj < 0 or izy + jj == newzz.shape[1]:
continue
for kk in (-1,0,1):
if izz + kk < 0 or izz + kk == newzz.shape[2]:
continue
for mm in (-1,0,1):
if iza + mm < 0 or iza + mm == newzz.shape[3]:
continue
if ii==jj==kk==mm==0:
continue
nnact += newzz[izx+ii, izy+jj, izz+kk, iza+mm]
# print(izx,izy,nnact)
if newzz[izx,izy,izz,iza] == 1:
newzzcopy[izx,izy,izz,iza] = int(nnact == 2 or nnact == 3)
else:
newzzcopy[izx,izy,izz,iza] = int(nnact == 3)
zz= newzzcopy
# zz = zz[:,:,np.newaxis]
# for cyc in range(6):
# newzz = np.zeros((zz.shape[0]+2,zz.shape[1]+2,zz.shape[2]+2))
# newzz[1:-1,1:-1,1:-1] = zz
# newzzcopy = newzz.copy()
# for izx in range(newzz.shape[0]):
# for izy in range(newzz.shape[1]):
# for izz in range(newzz.shape[2]):
# nnact = 0
# for ii in (-1,0,1):
# if izx + ii < 0 or izx + ii == newzz.shape[0]:
# continue
# for jj in (-1,0,1):
# if izy + jj < 0 or izy + jj == newzz.shape[1]:
# continue
# for kk in (-1,0,1):
# if izz + kk < 0 or izz + kk == newzz.shape[2]:
# continue
# if ii==jj==kk==0:
# continue
# nnact += newzz[izx+ii, izy+jj, izz+kk]
# # print(izx,izy,nnact)
# if newzz[izx,izy,izz] == 1:
# newzzcopy[izx,izy,izz] = int(nnact == 2 or nnact == 3)
# else:
# newzzcopy[izx,izy,izz] = int(nnact == 3)
# zz= newzzcopy