From c79c43612748d5a042f413f6d8b956cdd82afb13 Mon Sep 17 00:00:00 2001 From: alex <> Date: Sun, 8 Dec 2024 06:59:05 +0100 Subject: [PATCH] Day08 - part2 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Je ne m’attendais pas à ce que ça juste fonctionne comme approche. --- src/day08.rs | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/day08.rs b/src/day08.rs index 67a69da..d7d680d 100644 --- a/src/day08.rs +++ b/src/day08.rs @@ -57,7 +57,36 @@ fn run_part1(input: &str) -> Result> { fn run_part2(input: &str) -> Result> { println!("Running {} - part 2", get_day()); - Ok(0) + let puzzle = Puzzle::new(input); + let mut visited: HashSet<(isize, isize)> = HashSet::new(); + let mut antinodes: HashSet<(isize, isize)> = HashSet::new(); + + puzzle.map.iter() + .filter(|(_, value)| **value != '.') + .for_each(|(key, value)| { + if !visited.contains(key) { + visited.insert(*key); + + puzzle.map.iter() + .filter(|(k, v)| *v == value && *k != key) + .for_each(|(k, v)| { + let x1 = if k <= key { k } else { key }; + let x2 = if k <= key { key } else { k }; + let d = (x1.0 - x2.0, x1.1 - x2.1); + for i in 0..puzzle.map.len() { + let i = i as isize; + for a in [(x1.0 + i*d.0, x1.1 + i*d.1), (x2.0 - i*d.0, x2.1 - i*d.1)] { + if puzzle.map.contains_key(&a) { + antinodes.insert(a); + } + } + } + }); + } + }); + + let res = antinodes.len() as u32; + Ok(res) } pub fn run(input: &str) -> Result<(), Box> { @@ -100,6 +129,6 @@ mod tests { #[test] fn test_part2() { - assert_eq!(0, run_part2(TEXT_INPUT).unwrap()); + assert_eq!(34, run_part2(TEXT_INPUT).unwrap()); } } -- 2.39.5