Compare commits

..

No commits in common. "f96ab9d93bb54711b27064148a948cbad4cee138" and "d18372e05c2de29f925cdc053c20696c1bedd459" have entirely different histories.

1 changed files with 13 additions and 39 deletions

View File

@ -1,4 +1,4 @@
use hashbrown::HashMap; use hashbrown::{HashMap, HashSet};
use aoc_runner_derive::{aoc, aoc_generator}; use aoc_runner_derive::{aoc, aoc_generator};
@ -25,8 +25,7 @@ fn parse(input: &str) -> Input {
#[aoc(day8, part1)] #[aoc(day8, part1)]
fn part1(input: &Input) -> usize { fn part1(input: &Input) -> usize {
let mut set = [[false; 64]; 64]; let mut set = HashSet::new();
let mut sum = 0;
input.1.iter().for_each(|vec| { input.1.iter().for_each(|vec| {
for l in 0..vec.len() { for l in 0..vec.len() {
for r in l + 1..vec.len() { for r in l + 1..vec.len() {
@ -34,34 +33,21 @@ fn part1(input: &Input) -> usize {
let a2 = vec[r]; let a2 = vec[r];
let c1 = (2 * a1.0 - a2.0, 2 * a1.1 - a2.1); let c1 = (2 * a1.0 - a2.0, 2 * a1.1 - a2.1);
let c2 = (2 * a2.0 - a1.0, 2 * a2.1 - a1.1); let c2 = (2 * a2.0 - a1.0, 2 * a2.1 - a1.1);
if c1.0 >= 0 if c1.0 >= 0 && c1.0 < input.0 .0 && c1.1 >= 0 && c1.1 < input.0 .1 {
&& c1.0 < input.0 .0 set.insert(c1);
&& 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 if c2.0 >= 0 && c2.0 < input.0 .0 && c2.1 >= 0 && c2.1 < input.0 .1 {
&& c2.0 < input.0 .0 set.insert(c2);
&& 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;
} }
} }
} }
}); });
sum set.len()
} }
#[aoc(day8, part2)] #[aoc(day8, part2)]
fn part2(input: &Input) -> usize { fn part2(input: &Input) -> usize {
let mut set = [[false; 64]; 64]; let mut set = HashSet::with_capacity(input.1.len() * input.1.len());
let mut sum = 0;
input.1.iter().for_each(|vec| { input.1.iter().for_each(|vec| {
for l in 0..vec.len() { for l in 0..vec.len() {
for r in l + 1..vec.len() { for r in l + 1..vec.len() {
@ -74,10 +60,7 @@ fn part2(input: &Input) -> usize {
let c = (s.0 + d * v.0, s.1 + d * v.1); let c = (s.0 + d * v.0, s.1 + d * v.1);
d += 1; d += 1;
if c.0 >= 0 && c.0 < input.0 .0 && c.1 >= 0 && c.1 < input.0 .1 { if c.0 >= 0 && c.0 < input.0 .0 && c.1 >= 0 && c.1 < input.0 .1 {
if !set[c.1 as usize][c.0 as usize] { set.insert(c);
set[c.1 as usize][c.0 as usize] = true;
sum += 1;
};
} else { } else {
break; break;
} }
@ -87,10 +70,7 @@ fn part2(input: &Input) -> usize {
let c = (s.0 + d * v.0, s.1 + d * v.1); let c = (s.0 + d * v.0, s.1 + d * v.1);
d -= 1; d -= 1;
if c.0 >= 0 && c.0 < input.0 .0 && c.1 >= 0 && c.1 < input.0 .1 { if c.0 >= 0 && c.0 < input.0 .0 && c.1 >= 0 && c.1 < input.0 .1 {
if !set[c.1 as usize][c.0 as usize] { set.insert(c);
set[c.1 as usize][c.0 as usize] = true;
sum += 1;
};
} else { } else {
break; break;
} }
@ -98,7 +78,7 @@ fn part2(input: &Input) -> usize {
} }
} }
}); });
sum set.len()
} }
#[cfg(test)] #[cfg(test)]
@ -113,10 +93,7 @@ mod tests {
)), )),
14 14
); );
assert_eq!( assert_eq!(part1(&parse(include_str!("../input/2024/day8.txt"))), 273);
part1(&parse(include_str!("../input/2024/day8.txt").trim_end())),
273
);
} }
#[test] #[test]
@ -127,9 +104,6 @@ mod tests {
)), )),
34 34
); );
assert_eq!( assert_eq!(part2(&parse(include_str!("../input/2024/day8.txt"))), 1017);
part2(&parse(include_str!("../input/2024/day8.txt").trim_end())),
1017
);
} }
} }