|
- def condition(x, y, on):
- is_on = (x, y) in on
- neighbours_on = sum(
- (x + dx, y + dy) in on
- for dx in [1, 0, -1] for dy in [1, 0, -1]
- if dx or dy
- )
- return (is_on and neighbours_on in {2, 3}) or neighbours_on == 3
-
-
- on1 = {
- (x, y)
- for y, ln in enumerate(df.read_text().splitlines())
- for x, ch in enumerate(ln)
- if ch == '#'
- }
- on2 = set(on1)
- grid = {(x, y) for x in range(100) for y in range(100)}
- corners = {(0, 0), (0, 99), (99, 0), (99, 99)}
- for _ in range(100):
- on1 = {(x, y) for x, y in grid if condition(x, y, on1)}
- on2 = {(x, y) for x, y in grid if condition(x, y, on2)} | corners
- ans1 = len(on1)
- ans2 = len(on2)
|