61 lines
1.4 KiB
Python
61 lines
1.4 KiB
Python
|
|
from math import prod
|
||
|
|
|
||
|
|
from output import matrix
|
||
|
|
|
||
|
|
|
||
|
|
def solve(data):
|
||
|
|
M, R, C = matrix(data)
|
||
|
|
p1 = 2 * R + 2 * C - 4
|
||
|
|
p2 = 0
|
||
|
|
for row in range(1, R - 1):
|
||
|
|
for col in range(1, C - 1):
|
||
|
|
h = int(M[row][col])
|
||
|
|
visible = 0
|
||
|
|
score = []
|
||
|
|
|
||
|
|
for i, dy in enumerate(range(row - 1, -1, -1), start=1):
|
||
|
|
if h <= int(M[dy][col]):
|
||
|
|
break
|
||
|
|
else:
|
||
|
|
visible += 1
|
||
|
|
score.append(i)
|
||
|
|
|
||
|
|
for i, dx in enumerate(range(col + 1, C), start=1):
|
||
|
|
if h <= int(M[row][dx]):
|
||
|
|
break
|
||
|
|
else:
|
||
|
|
visible += 1
|
||
|
|
score.append(i)
|
||
|
|
|
||
|
|
for i, dy in enumerate(range(row + 1, R), start=1):
|
||
|
|
if h <= int(M[dy][col]):
|
||
|
|
break
|
||
|
|
else:
|
||
|
|
visible += 1
|
||
|
|
score.append(i)
|
||
|
|
|
||
|
|
for i, dx in enumerate(range(col - 1, -1, -1), start=1):
|
||
|
|
if h <= int(M[row][dx]):
|
||
|
|
break
|
||
|
|
else:
|
||
|
|
visible += 1
|
||
|
|
score.append(i)
|
||
|
|
|
||
|
|
if visible:
|
||
|
|
p1 += 1
|
||
|
|
p2 = max(prod(score), p2)
|
||
|
|
return p1, p2
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
with open("./input/08.txt", "r") as f:
|
||
|
|
inp = f.read().strip()
|
||
|
|
|
||
|
|
p1, p2 = solve(inp)
|
||
|
|
|
||
|
|
print(p1)
|
||
|
|
print(p2)
|
||
|
|
|
||
|
|
assert p1 == 1812
|
||
|
|
assert p2 == 315495
|