Skip to content

Commit aaacacf

Browse files
committed
[2025] Cleanup day 7
1 parent 4b351ed commit aaacacf

File tree

1 file changed

+12
-43
lines changed

1 file changed

+12
-43
lines changed

aoc_2025/src/day_07.rs

Lines changed: 12 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,27 @@
1-
use std::{
2-
collections::{HashMap, HashSet},
3-
convert::identity,
4-
};
1+
use std::{collections::HashMap, convert::identity};
52

63
use aoc_lib::{direction::cardinal::Direction, matrix::Grid};
74
use common::{Answer, solution};
8-
use nd_vec::vector;
5+
use nd_vec::{Vec2, vector};
96

107
solution!("Laboratories", 7);
118

129
fn part_a(input: &str) -> Answer {
13-
let grid = Grid::parse(input, identity);
14-
let start = grid.find('S').unwrap();
15-
16-
let mut beams = HashSet::new();
17-
beams.insert(start);
18-
19-
let mut out = 0;
20-
21-
loop {
22-
let mut next_beams = HashSet::new();
23-
for beam in beams.iter() {
24-
let next = Direction::Down.advance(*beam);
25-
let Some(tile) = grid.get(next) else {
26-
continue;
27-
};
28-
29-
if *tile == '^' {
30-
out += 1;
31-
next_beams.insert(next - vector!(1, 0));
32-
next_beams.insert(next + vector!(1, 0));
33-
} else {
34-
next_beams.insert(next);
35-
}
36-
}
37-
38-
if next_beams.is_empty() {
39-
break;
40-
}
41-
42-
beams = next_beams;
43-
}
44-
45-
out.into()
10+
solve(input).1.into()
4611
}
4712

4813
fn part_b(input: &str) -> Answer {
14+
let (beams, _) = solve(input);
15+
beams.iter().map(|x| x.1).sum::<u64>().into()
16+
}
17+
18+
fn solve(input: &str) -> (HashMap<Vec2<usize>, u64>, u64) {
4919
let grid = Grid::parse(input, identity);
5020
let start = grid.find('S').unwrap();
5121

22+
let mut out = 0;
5223
let mut beams = HashMap::new();
53-
beams.insert(start, 1_u64);
54-
55-
// let mut out = 0;
24+
beams.insert(start, 1);
5625

5726
loop {
5827
let mut next_beams = HashMap::new();
@@ -63,22 +32,22 @@ fn part_b(input: &str) -> Answer {
6332
};
6433

6534
if *tile == '^' {
35+
out += 1;
6636
*next_beams.entry(next - vector!(1, 0)).or_default() += *count;
6737
*next_beams.entry(next + vector!(1, 0)).or_default() += *count;
6838
} else {
6939
*next_beams.entry(next).or_default() += *count;
7040
}
7141
}
7242

73-
println!("count : {}", next_beams.len());
7443
if next_beams.is_empty() {
7544
break;
7645
}
7746

7847
beams = next_beams;
7948
}
8049

81-
beams.iter().map(|x| x.1).sum::<u64>().into()
50+
(beams, out)
8251
}
8352

8453
#[cfg(test)]

0 commit comments

Comments
 (0)