advent2022/eight.py

19 lines
666 B
Python
Executable File

#!/usr/bin/env python3
from useful import *
m = np.asarray([[int(c) for c in l] for l in lines(open(0))])
def sight(y, x, m, line):
return len(line) == 0 or np.all(m[y,x] > line)
print(sum(any(sight(y, x, m, line) for line in [m[:y, x], m[y+1:, x], m[y, :x], m[y, x+1:]])
for (y, x), _ in np.ndenumerate(m)))
def view(y, x, m, line):
l = len(list(takewhile(lambda t: m[y,x] > t, line)))
return l if l == len(line) else l + 1
def views(y, x, m):
return [view(y, x, m, line) for line in [m[:y, x][::-1], m[y+1:, x], m[y, :x][::-1], m[y, x+1:]]]
print(max([reduce(lambda a, b: a * b,
views(y, x, m))
for (y, x), _ in np.ndenumerate(m)]))