aboutsummaryrefslogtreecommitdiff
path: root/day08/part2.rb
diff options
context:
space:
mode:
Diffstat (limited to 'day08/part2.rb')
-rw-r--r--day08/part2.rb64
1 files changed, 64 insertions, 0 deletions
diff --git a/day08/part2.rb b/day08/part2.rb
new file mode 100644
index 0000000..fa4a61c
--- /dev/null
+++ b/day08/part2.rb
@@ -0,0 +1,64 @@
+def score_up(grid, ri, ci)
+ tree = grid[ri][ci]
+ vis = 0
+ loop do
+ ri -= 1
+ break if ri < 0
+ vis += 1
+ break if grid[ri][ci] >= tree
+ end
+ vis
+end
+
+def score_down(grid, ri, ci)
+ tree = grid[ri][ci]
+ vis = 0
+ loop do
+ ri += 1
+ break if ri >= grid.count
+ vis += 1
+ break if grid[ri][ci] >= tree
+ end
+ vis
+end
+
+def score_left(grid, ri, ci)
+ tree = grid[ri][ci]
+ vis = 0
+ loop do
+ ci -= 1
+ break if ci < 0
+ vis += 1
+ break if grid[ri][ci] >= tree
+ end
+ vis
+end
+
+def score_right(grid, ri, ci)
+ tree = grid[ri][ci]
+ vis = 0
+ loop do
+ ci += 1
+ break if ci >= grid[ri].count
+ vis += 1
+ break if grid[ri][ci] >= tree
+ end
+ vis
+end
+
+grid = $stdin.readlines.map(&:strip).map(&:chars).map { |row| row.map(&:to_i) }
+
+max_score = 0
+
+grid.count.times do |ri|
+ grid[ri].count.times do |ci|
+ score = 1
+ score *= score_up(grid, ri, ci)
+ score *= score_down(grid, ri, ci)
+ score *= score_left(grid, ri, ci)
+ score *= score_right(grid, ri, ci)
+ max_score = score if score > max_score
+ end
+end
+
+puts max_score