Day 24
This commit is contained in:
parent
ac21d58606
commit
560799271e
50
2019/day24.py
Normal file
50
2019/day24.py
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
from grid import Grid
|
||||||
|
|
||||||
|
|
||||||
|
DIM = 5
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
with open("day24.txt", "rt") as input_file:
|
||||||
|
lines = input_file.readlines()
|
||||||
|
eris = Eris(value_factory=str, lines=lines)
|
||||||
|
eris.dumb_print()
|
||||||
|
print()
|
||||||
|
|
||||||
|
snapshots = []
|
||||||
|
while True:
|
||||||
|
eris.dumb_print()
|
||||||
|
eris.step()
|
||||||
|
ss = eris.snapshot()
|
||||||
|
if ss in snapshots:
|
||||||
|
break
|
||||||
|
snapshots.append(ss)
|
||||||
|
biorate = sum(2 ** i for i in range(DIM ** 2) if ss[i] == "#")
|
||||||
|
print(f"Biodiv rate of first repeated layout: {biorate}.")
|
||||||
|
|
||||||
|
|
||||||
|
class Eris(Grid):
|
||||||
|
|
||||||
|
def step(self):
|
||||||
|
dying = []
|
||||||
|
infesting = []
|
||||||
|
for y in range(DIM ** 2):
|
||||||
|
x = y % DIM
|
||||||
|
y //= DIM
|
||||||
|
v = self.getv(x, y)
|
||||||
|
num_nears = sum(n == "#" for n in self.near_objects((x, y)).values())
|
||||||
|
if v == "#" and num_nears != 1:
|
||||||
|
dying.append((x, y))
|
||||||
|
elif v == "." and num_nears in (1, 2):
|
||||||
|
infesting.append((x, y))
|
||||||
|
for p in dying:
|
||||||
|
self.setv(p[0], p[1], ".")
|
||||||
|
for p in infesting:
|
||||||
|
self.setv(p[0], p[1], "#")
|
||||||
|
|
||||||
|
def snapshot(self):
|
||||||
|
return [self.getv(x, y) for y in range(DIM) for x in range(DIM)]
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in a new issue