|                                 | 123456789101112131415161718192021222324252627282930313233 | from itertools import count, takewhile
def heights(t, dt):
    return takewhile(lambda h: h is not None, (grid.get(t + dt * i) for i in count(1)))
def is_visible(t):
    return any(grid[t] > max(heights(t, dt), default=-1) for dt in udlr)
def score(t):
    score = 1
    for dt in udlr:
        count = 0
        for h in heights(t, dt):
            count += 1
            if h >= grid[t]:
                break
        score *= count
    return score
udlr = [-1j, 1j, -1, 1]
text = open(0).read()
grid = {complex(x, y): int(v) for y, line in enumerate(text.splitlines(), 1) for x, v in enumerate(line, 1)}
ans1 = sum(is_visible(t) for t in grid)
print(ans1)
ans2 = max(score(t) for t in grid)
print(ans2)
 |