From 49e11349f574acad0ca08e809cc5a78fb3354081 Mon Sep 17 00:00:00 2001 From: Jan-Bulthuis Date: Mon, 9 Dec 2024 13:06:37 +0100 Subject: [PATCH] Removed hashset from day8 --- aoc_2024/src/day8.rs | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/aoc_2024/src/day8.rs b/aoc_2024/src/day8.rs index 030c313..fe90976 100644 --- a/aoc_2024/src/day8.rs +++ b/aoc_2024/src/day8.rs @@ -1,4 +1,4 @@ -use hashbrown::{HashMap, HashSet}; +use hashbrown::HashMap; use aoc_runner_derive::{aoc, aoc_generator}; @@ -25,7 +25,8 @@ fn parse(input: &str) -> Input { #[aoc(day8, part1)] fn part1(input: &Input) -> usize { - let mut set = HashSet::new(); + let mut set = [[false; 64]; 64]; + let mut sum = 0; input.1.iter().for_each(|vec| { for l in 0..vec.len() { for r in l + 1..vec.len() { @@ -33,11 +34,23 @@ fn part1(input: &Input) -> usize { let a2 = vec[r]; let c1 = (2 * a1.0 - a2.0, 2 * a1.1 - a2.1); let c2 = (2 * a2.0 - a1.0, 2 * a2.1 - a1.1); - if c1.0 >= 0 && c1.0 < input.0 .0 && c1.1 >= 0 && c1.1 < input.0 .1 { - set.insert(c1); + if c1.0 >= 0 + && c1.0 < input.0 .0 + && c1.1 >= 0 + && c1.1 < input.0 .1 + && !set[c1.1 as usize][c1.0 as usize] + { + set[c1.1 as usize][c1.0 as usize] = true; + sum += 1; } - if c2.0 >= 0 && c2.0 < input.0 .0 && c2.1 >= 0 && c2.1 < input.0 .1 { - set.insert(c2); + if c2.0 >= 0 + && c2.0 < input.0 .0 + && c2.1 >= 0 + && c2.1 < input.0 .1 + && !set[c2.1 as usize][c2.0 as usize] + { + set[c2.1 as usize][c2.0 as usize] = true; + sum += 1; } } } @@ -47,7 +60,8 @@ fn part1(input: &Input) -> usize { #[aoc(day8, part2)] fn part2(input: &Input) -> usize { - let mut set = HashSet::with_capacity(input.1.len() * input.1.len()); + let mut set = [[false; 64]; 64]; + let mut sum = 0; input.1.iter().for_each(|vec| { for l in 0..vec.len() { for r in l + 1..vec.len() { @@ -60,7 +74,10 @@ fn part2(input: &Input) -> usize { let c = (s.0 + d * v.0, s.1 + d * v.1); d += 1; if c.0 >= 0 && c.0 < input.0 .0 && c.1 >= 0 && c.1 < input.0 .1 { - set.insert(c); + if !set[c.1 as usize][c.0 as usize] { + set[c.1 as usize][c.0 as usize] = true; + sum += 1; + }; } else { break; } @@ -70,7 +87,10 @@ fn part2(input: &Input) -> usize { let c = (s.0 + d * v.0, s.1 + d * v.1); d -= 1; if c.0 >= 0 && c.0 < input.0 .0 && c.1 >= 0 && c.1 < input.0 .1 { - set.insert(c); + if !set[c.1 as usize][c.0 as usize] { + set[c.1 as usize][c.0 as usize] = true; + sum += 1; + }; } else { break; } @@ -78,7 +98,7 @@ fn part2(input: &Input) -> usize { } } }); - set.len() + sum } #[cfg(test)]