Skip to content

Commit 8836c89

Browse files
committed
2025 05.2
I was distracted by the cloudflare outage and forgot about part 2, oops
1 parent d020c91 commit 8836c89

File tree

1 file changed

+46
-1
lines changed

1 file changed

+46
-1
lines changed

src/aoc/y2025/day05.rs

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,57 @@ pub fn part_1(data: crate::DataIn) -> crate::AoCResult<String> {
3737
Ok(ret.to_string())
3838
}
3939

40+
pub fn part_2(data: crate::DataIn) -> crate::AoCResult<String> {
41+
let mut ranges: Vec<_> = data
42+
.take_while(|line| !line.is_empty())
43+
.map(|line| -> AoCResult<RangeInclusive<Num>> {
44+
let (start, end) = line.split_once('-').ok_or_else(|| {
45+
AoCError::new(format!("Input range {line} doesn't have a - in it?"))
46+
})?;
47+
Ok(start.parse()?..=end.parse()?)
48+
})
49+
.try_collect()?;
50+
ranges.sort_by_key(|range| *range.start());
51+
52+
// I'm sure there's a smarter way to do this.
53+
let mut ret = 0;
54+
let mut last: Option<RangeInclusive<Num>> = None;
55+
56+
for range in ranges.into_iter() {
57+
log::debug!("Looking at {range:?}. Last is {last:?}, count is {ret}");
58+
match last.as_mut() {
59+
Some(last) => {
60+
if last.end() >= range.start() {
61+
// bah
62+
if last.end() >= range.end() {
63+
continue;
64+
}
65+
ret += range.end() - last.end()
66+
} else {
67+
ret += range.end() - range.start() + 1;
68+
}
69+
*last = range;
70+
}
71+
None => {
72+
ret += range.end() - range.start() + 1;
73+
last = Some(range);
74+
}
75+
}
76+
log::debug!("> count is now {ret}");
77+
}
78+
79+
Ok(ret.to_string())
80+
}
81+
4082
inventory::submit!(crate::AoCDay {
4183
year: "2025",
4284
day: "5",
4385
part_1: crate::AoCPart {
4486
main: part_1,
4587
example: part_1
4688
},
47-
part_2: None
89+
part_2: Some(crate::AoCPart {
90+
main: part_2,
91+
example: part_2
92+
})
4893
});

0 commit comments

Comments
 (0)