from common import day import numpy as np fh = open(f"input/{day()}") M = [] for line in fh: line = line.rstrip() M.append(np.array([int(c) for c in line], dtype=np.int8)) M = np.array(M) m, n = M.shape visible = set() for i, row in enumerate(M): curr = -1 for j, e in enumerate(row): if e > curr: visible.add((i, j)) curr = e for i, row in enumerate(M): curr = -1 for j, e in enumerate(row[::-1]): if e > curr: visible.add((i, n - 1 - j)) curr = e for j, col in enumerate(M.T): curr = -1 for i, e in enumerate(col): if e > curr: visible.add((i, j)) curr = e for j, col in enumerate(M.T): curr = -1 for i, e in enumerate(col[::-1]): if e > curr: visible.add((m - 1 - i, j)) curr = e print(len(visible)) max_score = -1 for i in range(m): for j in range(n): k = j + 1 curr = M[i,j] right_view = 0 while k < n: right_view += 1 if M[i,k] < curr: k += 1 else: break k = j - 1 left_view = 0 while k >= 0: left_view += 1 if M[i,k] < curr: k -= 1 else: break k = i + 1 down_view = 0 while k < m: down_view += 1 if M[k,j] < curr: k += 1 else: break k = i - 1 up_view = 0 while k >= 0: up_view += 1 if M[k,j] < curr: k -= 1 else: break scenic_score = left_view * right_view * up_view * down_view max_score = max(max_score, scenic_score)