Skip to content

Commit 41e3a84

Browse files
committed
Year 2025 Day 5
1 parent 622eb3e commit 41e3a84

File tree

7 files changed

+80
-4
lines changed

7 files changed

+80
-4
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ Performance is reasonable even on older hardware, for example a 2011 MacBook Pro
8181
| 2 | [Gift Shop](https://adventofcode.com/2025/day/2) | [Source](src/year2025/day02.rs) | 1 |
8282
| 3 | [Lobby](https://adventofcode.com/2025/day/3) | [Source](src/year2025/day03.rs) | 18 |
8383
| 4 | [Printing Department](https://adventofcode.com/2025/day/4) | [Source](src/year2025/day04.rs) | 244 |
84+
| 5 | [Cafeteria](https://adventofcode.com/2025/day/5) | [Source](src/year2025/day05.rs) | 20 |
8485

8586
## 2024
8687

benches/benchmark.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,5 +95,5 @@ benchmark!(year2024
9595
);
9696

9797
benchmark!(year2025
98-
day01, day02, day03, day04
98+
day01, day02, day03, day04, day05
9999
);

src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,5 @@ library!(year2024 "Locate the Chief Historian in time for the big Christmas slei
7474
);
7575

7676
library!(year2025 "Finish the North Pole decorations in time for Christmas."
77-
day01, day02, day03, day04
77+
day01, day02, day03, day04, day05
7878
);

src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,5 +141,5 @@ run!(year2024
141141
);
142142

143143
run!(year2025
144-
day01, day02, day03, day04
144+
day01, day02, day03, day04, day05
145145
);

src/year2025/day05.rs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
//! # Cafeteria
2+
use crate::util::iter::*;
3+
use crate::util::parse::*;
4+
5+
type Input = (usize, u64);
6+
7+
pub fn parse(input: &str) -> Input {
8+
let (prefix, suffix) = input.split_once("\n\n").unwrap();
9+
10+
let mut ranges: Vec<_> = prefix.iter_unsigned().chunk::<2>().collect();
11+
ranges.sort_unstable();
12+
13+
let mut ids: Vec<_> = suffix.iter_unsigned().collect();
14+
ids.sort_unstable();
15+
16+
let mut range = 0..0;
17+
let mut merged = Vec::new();
18+
19+
for [from, to] in ranges {
20+
if from < range.end {
21+
range.end = range.end.max(to + 1);
22+
} else {
23+
merged.push(range);
24+
range = from..to + 1;
25+
}
26+
}
27+
28+
merged.push(range);
29+
30+
let part_one = merged
31+
.iter()
32+
.map(|range| {
33+
let from = ids.binary_search(&range.start).unwrap_or_else(|e| e);
34+
let to = ids.binary_search(&range.end).unwrap_or_else(|e| e);
35+
to - from
36+
})
37+
.sum();
38+
let part_two = merged.iter().map(|range| range.end - range.start).sum();
39+
40+
(part_one, part_two)
41+
}
42+
43+
pub fn part1(input: &Input) -> usize {
44+
input.0
45+
}
46+
47+
pub fn part2(input: &Input) -> u64 {
48+
input.1
49+
}

tests/test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,5 +87,5 @@ test!(year2024
8787
);
8888

8989
test!(year2025
90-
day01, day02, day03, day04
90+
day01, day02, day03, day04, day05
9191
);

tests/year2025/day05.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
use aoc::year2025::day05::*;
2+
3+
const EXAMPLE: &str = "\
4+
3-5
5+
10-14
6+
16-20
7+
12-18
8+
9+
1
10+
5
11+
8
12+
11
13+
17
14+
32";
15+
16+
#[test]
17+
fn part1_test() {
18+
let input = parse(EXAMPLE);
19+
assert_eq!(part1(&input), 3);
20+
}
21+
22+
#[test]
23+
fn part2_test() {
24+
let input = parse(EXAMPLE);
25+
assert_eq!(part2(&input), 14);
26+
}

0 commit comments

Comments
 (0)