#!/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()