From: alex <> Date: Sun, 8 Dec 2024 05:59:05 +0000 (+0100) Subject: Day08 - part2 X-Git-Url: https://aoc.elinar.fr/?a=commitdiff_plain;h=c79c43612748d5a042f413f6d8b956cdd82afb13;p=aoc_2024 Day08 - part2 Je ne m’attendais pas à ce que ça juste fonctionne comme approche. --- 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()); } }