summaryrefslogtreecommitdiffstats
path: root/problem8.py
diff options
context:
space:
mode:
authorGuillaume Horel <guillaume.horel@gmail.com>2023-01-04 21:46:23 -0500
committerGuillaume Horel <guillaume.horel@gmail.com>2023-01-04 21:46:23 -0500
commit6373305f20fdbb47cb6f676cf462374e043dedf6 (patch)
treea022bb2fbfebd2ace7ce15a4d82d0b77403a9572 /problem8.py
download2022-6373305f20fdbb47cb6f676cf462374e043dedf6.tar.gz
initial importHEADmaster
Diffstat (limited to 'problem8.py')
-rw-r--r--problem8.py81
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)