From b7e2fe6160280472a625a8867ea5177b0155737c Mon Sep 17 00:00:00 2001 From: mathiasmagnusson Date: Sun, 11 Dec 2022 23:04:39 +0100 Subject: Aoc day 6, 7 & 8 --- aoc22/day8/src/main.rs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 aoc22/day8/src/main.rs (limited to 'aoc22/day8/src/main.rs') diff --git a/aoc22/day8/src/main.rs b/aoc22/day8/src/main.rs new file mode 100644 index 0000000..f73543d --- /dev/null +++ b/aoc22/day8/src/main.rs @@ -0,0 +1,46 @@ +fn main() { + let input = lib::read_input(8); + + part1(&input); + part2(&input); +} + +fn part1(input: &str) { + let input = input.split_whitespace().map(|x| x.bytes().collect::>()).collect::>(); + + let mut ans = 0; + for (y, line) in input.iter().enumerate() { + for (x, c) in line.iter().enumerate() { + if visible(&input, x, y) { + ans += 1; + } + } + } + println!("{}", ans); +} + +fn part2(input: &str) { +} + +fn visible(heights: &[Vec], x: usize, y: usize) -> bool { + for (dy, dx) in &[(0, 1), (0, -1), (1, 0), (-1, 0)] { + let height = heights[y][x]; + + let mut sx = x as i32; + let mut sy = y as i32; + + loop { + sx += dx; + sy += dy; + + if sx < 0 || sy < 0 || sx >= heights[0].len() as i32 || sy >= heights.len() as i32 { + return true; + } + + if heights[sy as usize][sx as usize] >= height { + break; + } + } + } + return false; +} -- cgit v1.2.3