-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpuzzle_17_a.py
103 lines (90 loc) · 2.9 KB
/
puzzle_17_a.py
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import sys
import pprint
import copy
def get_neighbours(x,y,z,ln):
#print(x,y,z,ln)
neighbours = set()
for i in range(ln):
if i+1 ==x or i==x or i-1 == x:
for j in range(ln):
if j+1 ==y or j==y or j-1 == y:
for k in range(ln):
if k+1 ==z or k==z or k-1 == z:
#print("Adding",x,y,z)
if not ( i==x and j == y and k==z):
neighbours.add((i,j,k))
#print(neighbours)
return neighbours
def get_active_neighbours_count(x,y,z,ln):
neighbours = get_neighbours(x,y,z,ln)
#print(x,y,z,"NNEIGH : ",neighbours)
ct = 0
for neighbour in neighbours:
if matrix[neighbour[0]][neighbour[1]][neighbour[2]] == '#':
#print(neighbour,"is the ACTIVE nei")
ct +=1
#print(ct)
return ct
def is_active(x,y,z):
if matrix[x][y][z] == '#':
return 1
else:
return 0
def copy_new_matrix():
for i in range(ln):
for j in range(ln):
for k in range(ln):
matrix[i][j][k] = new_matrix[i][j][k]
matrix = []
new_matrix = []
ln = 0
trs = 6
first = 0
firstln = 0
for line in sys.stdin:
line = line.strip()
if not first:
firstln = len(line)
ln = firstln + (trs*2)
matrix = [[['.' for k in range(ln)] for j in range(ln)] for i in range(ln)]
new_matrix = [[['.' for k in range(ln)] for j in range(ln)] for i in range(ln)]
tmp_list = list(line)
for j in range(firstln):
matrix[trs][trs+first][trs+j] = tmp_list[j]
first +=1
print("length is",ln)
pprint.pprint(matrix)
print("\n\n\n")
first = 1
for rnd in range(0,trs):
print("\n","ROUND ", rnd, ":\n")
start = 0
stop = ln
for i in range(start,stop):
for j in range(start,stop):
for k in range(start,stop):
active_neighbours_count = get_active_neighbours_count(i,j,k,ln)
#print(i,j,k,matrix[i][j][k], active_neighbours_count)
if is_active(i,j,k) and ( active_neighbours_count < 2 or active_neighbours_count > 3 ):
print("Deactivating",i,j,k)
new_matrix[i][j][k] = '.'
elif ( not is_active(i,j,k) ) and active_neighbours_count == 3 :
print("Activating",i,j,k)
new_matrix[i][j][k] = '#'
else:
new_matrix[i][j][k] = matrix[i][j][k]
pprint.pprint(new_matrix)
#pprint.pprint([{num: value} for num, value in enumerate(new_matrix)], width=20)
if first:
first = 0
rnd = -1
copy_new_matrix()
#pprint.pprint(matrix)
print("===========\n\n")
active = 0
for i in range(ln):
for j in range(ln):
for k in range(ln):
if matrix[i][j][k] == '#':
active+=1
print(active)