From 457c2af984ac34e6615a8b49b953c4499809255c Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Sat, 16 Dec 2023 06:55:42 +0100 Subject: day16 --- src/day16pt1.rs | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/day16pt1.rs (limited to 'src/day16pt1.rs') diff --git a/src/day16pt1.rs b/src/day16pt1.rs new file mode 100644 index 0000000..5377074 --- /dev/null +++ b/src/day16pt1.rs @@ -0,0 +1,65 @@ +use std::collections::HashMap; + +fn bfs( + input: &Vec>, + was: &mut Vec>, + x: i32, + y: i32, + dx: i32, + dy: i32, + comb: &mut HashMap<(i32, i32, i32, i32), i32>, +) { + if x < 0 + || x >= input[0].len() as i32 + || y < 0 + || y >= input.len() as i32 + || comb.contains_key(&(x, y, dx, dy)) + { + return; + } + + let c = input[y as usize][x as usize]; + was[y as usize][x as usize] = true; + comb.insert((x, y, dx, dy), 1); + + if c == '/' { + bfs(input, was, x - dy, y - dx, -dy, -dx, comb); + } else if c == '\\' { + bfs(input, was, x + dy, y + dx, dy, dx, comb); + } else if c == '|' { + if dy != 0 { + bfs(input, was, x + dx, y + dy, dx, dy, comb); + } else { + bfs(input, was, x, y - 1, 0, -1, comb); + bfs(input, was, x, y + 1, 0, 1, comb); + } + } else if c == '-' { + if dx != 0 { + bfs(input, was, x + dx, y + dy, dx, dy, comb); + } else { + bfs(input, was, x - 1, y, -1, 0, comb); + bfs(input, was, x + 1, y, 1, 0, comb); + } + } else if c == '.' { + bfs(input, was, x + dx, y + dy, dx, dy, comb); + } +} + +pub fn main() { + let txt = std::fs::read_to_string("./input/day16.txt").unwrap(); + let input = txt + .lines() + .map(|s| s.chars().collect::>()) + .collect::>>(); + + let mut was = vec![vec![false; input[0].len()]; input.len()]; + let mut comb = HashMap::new(); + + bfs(&input, &mut was, 0, 0, 1, 0, &mut comb); + + let mut sum = 0; + for i in was { + sum += i.iter().filter(|&n| *n == true).count(); + } + println!("{}", sum); +} -- cgit v1.2.3