From f6ad00ad279b27aec4fa14b3123d5e04d9f7a5b7 Mon Sep 17 00:00:00 2001 From: Max Hohlfeld Date: Fri, 9 Dec 2022 09:07:26 +0100 Subject: [PATCH] aoc2022 day08 part 2 --- src/aoc2022/day08/mod.rs | 70 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/src/aoc2022/day08/mod.rs b/src/aoc2022/day08/mod.rs index bfecd98..e46e707 100644 --- a/src/aoc2022/day08/mod.rs +++ b/src/aoc2022/day08/mod.rs @@ -1,8 +1,7 @@ const COLUMNS: usize = 99; const ROWS: usize = 99; -pub fn task_one(input: &str) -> String { - let mut visible_trees = 0; +fn parse_into_grid(input: &str) -> [[u8; COLUMNS]; ROWS] { let mut grid: [[u8; COLUMNS]; ROWS] = [[0; COLUMNS]; ROWS]; for (i, line) in input.trim().lines().enumerate() { @@ -13,6 +12,13 @@ pub fn task_one(input: &str) -> String { // println!("{:?}", grid); + grid +} + +pub fn task_one(input: &str) -> String { + let mut visible_trees = 0; + let grid = parse_into_grid(&input); + for i in 0..ROWS { for j in 0..COLUMNS { let tree = grid[i][j]; @@ -65,5 +71,63 @@ pub fn task_one(input: &str) -> String { } pub fn task_two(input: &str) -> String { - String::new() + let mut score = 0; + let grid = parse_into_grid(&input); + + for i in 0..ROWS { + for j in 0..COLUMNS { + let tree = grid[i][j]; + + // check upwards + let mut visible_up = 0; + for k in (0..i).rev() { + visible_up += 1; + if grid[k][j] >= tree { + break; + } + } + + // check to the right + let mut visible_right = 0; + for k in (j + 1)..COLUMNS { + visible_right += 1; + if grid[i][k] >= tree { + break; + } + } + + // check downwards + let mut visible_down = 0; + for k in (i + 1)..ROWS { + visible_down += 1; + if grid[k][j] >= tree { + break; + } + } + + // check to the left + let mut visible_left = 0; + for k in (0..j).rev() { + visible_left += 1; + if grid[i][k] >= tree { + break; + } + } + + let new_score = visible_up * visible_right * visible_down * visible_left; + if new_score > score { + score = new_score; + } + } + } + + score.to_string() +} + +#[test] +fn test_example() { + // set ROWS and COLUMNS to 5 for the test to pass + let input = "30373\n25512\n65332\n33549\n35390\n"; + + assert_eq!(task_two(&input), 8.to_string()); }