58 lines
1.2 KiB
Python
Executable File
58 lines
1.2 KiB
Python
Executable File
#!/usr/bin/env python
|
|
from common import parse
|
|
|
|
|
|
def scenic_score(forest: list[list[int]], x: int, y: int) -> int:
|
|
height = forest[y][x]
|
|
sw = se = sn = ss = 0
|
|
west = reversed(forest[y][0:x])
|
|
for w in west:
|
|
if w < height:
|
|
sw += 1
|
|
continue
|
|
elif w == height:
|
|
sw += 1
|
|
break
|
|
east = forest[y][x + 1 :]
|
|
for e in east:
|
|
if e < height:
|
|
se += 1
|
|
continue
|
|
elif e == height:
|
|
se += 1
|
|
break
|
|
north = reversed([forest[i][x] for i in range(y)])
|
|
for n in north:
|
|
if n < height:
|
|
sn += 1
|
|
continue
|
|
elif n == height:
|
|
sn += 1
|
|
break
|
|
south = [forest[i][x] for i in range(y + 1, len(forest))]
|
|
for s in south:
|
|
if s < height:
|
|
ss += 1
|
|
continue
|
|
elif s == height:
|
|
ss += 1
|
|
break
|
|
|
|
return sw * se * sn * ss
|
|
|
|
|
|
def solve(input: list[list[int]]) -> int:
|
|
maxi = 0
|
|
for y, line in enumerate(input):
|
|
for x, tree in enumerate(input):
|
|
maxi = max(maxi, scenic_score(input, x, y))
|
|
return maxi
|
|
|
|
|
|
def main():
|
|
print(solve(parse("input")))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|