commit 3124dadd09fe9eedf3d9eab85596ceb4dc99c74d
parent cdeecb07c7c3a9194aafef271d63047008f23d13
Author: Eamon Caddigan <eamon.caddigan@gmail.com>
Date:   Thu,  8 Dec 2022 10:14:22 -0800
Solution to day 8, part 2.
Diffstat:
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/src/day_8.jl b/src/day_8.jl
@@ -52,7 +52,30 @@ end
 @assert part_1(example) == 21
 @info part_1(input)
 
+# Find the component of a scenic score looking along one direction
+function score_component(treeheight::Int, neighbortrees::Vector{Int})::Int
+    trees_seen = findfirst(x->x>=treeheight, neighbortrees)
+    if trees_seen == nothing
+        trees_seen = length(neighbortrees)
+    end
+    trees_seen
+end
+
 function part_2(input)
-    nothing
+    trees = parse_input(input)
+    mapheight, mapwidth = size(trees)
+    scenicscore = fill(0, (mapheight, mapwidth))
+
+    for (row, col) = Iterators.product(2:mapheight-1, 2:mapwidth-1)
+        scenicscore[row, col] = mapreduce(
+            Base.Fix1(score_component, trees[row, col]),
+            *,
+            (trees[row, col-1:-1:1], trees[row, col+1:end],
+             trees[row-1:-1:1, col], trees[row+1:end, col])
+        )
+    end
+
+    maximum(scenicscore)
 end
+@assert part_2(example) == 8
 @info part_2(input)