diff options
Diffstat (limited to 'problem8.py')
| -rw-r--r-- | problem8.py | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/problem8.py b/problem8.py new file mode 100644 index 0000000..552fc49 --- /dev/null +++ b/problem8.py @@ -0,0 +1,81 @@ +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) |
