33 lines
733 B
Python
33 lines
733 B
Python
|
|
def solve(data):
|
||
|
|
cols = len(data)
|
||
|
|
prevrow = [t == "." for t in data]
|
||
|
|
p1 = sum(prevrow) + sum(
|
||
|
|
sum(prevrow := [issafe(prevrow, i) for i in range(cols)]) for _ in range(39)
|
||
|
|
)
|
||
|
|
p2 = p1 + sum(
|
||
|
|
sum(prevrow := [issafe(prevrow, i) for i in range(cols)])
|
||
|
|
for _ in range(400_000 - 40)
|
||
|
|
)
|
||
|
|
return p1, p2
|
||
|
|
|
||
|
|
|
||
|
|
def issafe(row, i):
|
||
|
|
match i:
|
||
|
|
case 0:
|
||
|
|
return row[1]
|
||
|
|
case n if n == len(row) - 1:
|
||
|
|
return row[-2]
|
||
|
|
case _:
|
||
|
|
lt, rt = row[i - 1], row[i + 1]
|
||
|
|
return not lt != rt
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
with open("./input/18.txt", "r") as f:
|
||
|
|
inp = f.read().strip()
|
||
|
|
|
||
|
|
p1, p2 = solve(inp)
|
||
|
|
|
||
|
|
print(p1)
|
||
|
|
print(p2)
|