Compare commits
2 Commits
d18372e05c
...
f96ab9d93b
Author | SHA1 | Date |
---|---|---|
![]() |
f96ab9d93b | |
![]() |
49e11349f5 |
|
@ -1,4 +1,4 @@
|
||||||
use hashbrown::{HashMap, HashSet};
|
use hashbrown::HashMap;
|
||||||
|
|
||||||
use aoc_runner_derive::{aoc, aoc_generator};
|
use aoc_runner_derive::{aoc, aoc_generator};
|
||||||
|
|
||||||
|
@ -25,7 +25,8 @@ fn parse(input: &str) -> Input {
|
||||||
|
|
||||||
#[aoc(day8, part1)]
|
#[aoc(day8, part1)]
|
||||||
fn part1(input: &Input) -> usize {
|
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| {
|
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() {
|
||||||
|
@ -33,21 +34,34 @@ 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 && c1.0 < input.0 .0 && c1.1 >= 0 && c1.1 < input.0 .1 {
|
if c1.0 >= 0
|
||||||
set.insert(c1);
|
&& 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 {
|
if c2.0 >= 0
|
||||||
set.insert(c2);
|
&& 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
set.len()
|
sum
|
||||||
}
|
}
|
||||||
|
|
||||||
#[aoc(day8, part2)]
|
#[aoc(day8, part2)]
|
||||||
fn part2(input: &Input) -> usize {
|
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| {
|
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() {
|
||||||
|
@ -60,7 +74,10 @@ 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 {
|
||||||
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 {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -70,7 +87,10 @@ 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 {
|
||||||
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 {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -78,7 +98,7 @@ fn part2(input: &Input) -> usize {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
set.len()
|
sum
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -93,7 +113,10 @@ mod tests {
|
||||||
)),
|
)),
|
||||||
14
|
14
|
||||||
);
|
);
|
||||||
assert_eq!(part1(&parse(include_str!("../input/2024/day8.txt"))), 273);
|
assert_eq!(
|
||||||
|
part1(&parse(include_str!("../input/2024/day8.txt").trim_end())),
|
||||||
|
273
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -104,6 +127,9 @@ mod tests {
|
||||||
)),
|
)),
|
||||||
34
|
34
|
||||||
);
|
);
|
||||||
assert_eq!(part2(&parse(include_str!("../input/2024/day8.txt"))), 1017);
|
assert_eq!(
|
||||||
|
part2(&parse(include_str!("../input/2024/day8.txt").trim_end())),
|
||||||
|
1017
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue