Figured out that the center position did not matter, as long as left hand side tile and right hand side tile on previous row are not equal. Also tried to find a recurring pattern to speed p2 up a bit, but it seems it does not have a recurring pattern in the 400 000s first rows.
32 lines
733 B
Python
32 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)
|