tangled
alpha
login
or
join now
nove.dev
/
aoc-2025
1
fork
atom
:)
1
fork
atom
overview
issues
pulls
pipelines
day5 part2
nove.dev
3 months ago
fe405dd4
1a27538d
+34
-8
2 changed files
expand all
collapse all
unified
split
src
day5.rs
lib.rs
+27
-1
src/day5.rs
···
10
10
}
11
11
12
12
pub fn day5_part2(input: &str) -> String {
13
13
-
todo!()
13
13
+
let (mut ranges, _) = parse(input);
14
14
+
ranges.sort_by_key(|r| *r.start());
15
15
+
let collapsed = collapse(&ranges);
16
16
+
let total_range = collapsed
17
17
+
.into_iter()
18
18
+
.fold(0, |acc, elem| acc + (elem.end() - elem.start() + 1));
19
19
+
total_range.to_string()
20
20
+
}
21
21
+
22
22
+
/// ranges must be sorted
23
23
+
fn collapse(ranges: &[RangeInclusive<i64>]) -> Vec<RangeInclusive<i64>> {
24
24
+
let mut collapsed = vec![];
25
25
+
26
26
+
let mut current_range = ranges[0].clone();
27
27
+
for range in ranges {
28
28
+
if range.start() <= current_range.end() {
29
29
+
if range.end() > current_range.end() {
30
30
+
current_range = *current_range.start()..=*range.end()
31
31
+
}
32
32
+
} else {
33
33
+
collapsed.push(current_range);
34
34
+
current_range = range.clone();
35
35
+
}
36
36
+
}
37
37
+
collapsed.push(current_range);
38
38
+
39
39
+
collapsed
14
40
}
15
41
16
42
fn parse(input: &str) -> (Vec<RangeInclusive<i64>>, Vec<i64>) {
+7
-7
src/lib.rs
···
131
131
let result = day5::day5_part1(include_str!("../input/day5.txt"));
132
132
assert_eq!(result, "885");
133
133
}
134
134
-
// #[test]
135
135
-
// fn day5_part2_test() {
136
136
-
// let test_result = day5::day5_part2(include_str!("../input/day5.test.txt"));
137
137
-
// assert_eq!(test_result, "43");
138
138
-
// // let result = day5::day5_part2(include_str!("../input/day5.txt"));
139
139
-
// // assert_eq!(result, "7922");
140
140
-
// }
134
134
+
#[test]
135
135
+
fn day5_part2_test() {
136
136
+
let test_result = day5::day5_part2(include_str!("../input/day5.test.txt"));
137
137
+
assert_eq!(test_result, "14");
138
138
+
let result = day5::day5_part2(include_str!("../input/day5.txt"));
139
139
+
assert_eq!(result, "348115621205535");
140
140
+
}
141
141
142
142
#[test]
143
143
fn day4_part1_test() {