Files
aocpy/2015/d18.py
2024-02-01 19:21:22 -05:00

41 lines
1.1 KiB
Python

data = open(0).read().strip()
part_2 = False
rows = list(map(str, data.splitlines()))
nrows = len(rows)
ncols = len(rows[0])
for _ in range(100):
new_field = []
for r in range(nrows):
nrow = []
for c in range(ncols):
count = 0
for nb in [(-1, 0), (-1, 1), (0, 1), (1, 1), (1, 0), (1, -1), (0, -1), (-1, -1)]:
nr = r + nb[0]
nc = c + nb[1]
if nr < 0 or nr >= nrows or nc < 0 or nc >= ncols:
continue
if rows[nr][nc] == "#":
count += 1
if rows[r][c] == "#" and (count == 2 or count == 3):
nrow.append("#")
elif rows[r][c] == "." and count == 3:
nrow.append("#")
else:
nrow.append(".")
new_field.append(nrow)
rows = new_field
if part_2:
rows[0][0] = "#"
rows[0][ncols - 1] = "#"
rows[nrows - 1][0] = "#"
rows[nrows - 1][ncols - 1] = "#"
r = 0
for row in rows:
for c in row:
if c == "#":
r += 1
print(r)