From 57932373d6abdfabc76ba4a733da83a877b6e0f3 Mon Sep 17 00:00:00 2001 From: Keenan Tims Date: Fri, 5 Dec 2025 18:02:44 -0800 Subject: [PATCH] day5: add RangeSet based impl --- src/day5.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/day5.rs b/src/day5.rs index 50958e0..67418e5 100644 --- a/src/day5.rs +++ b/src/day5.rs @@ -87,7 +87,7 @@ impl RangeSet { } } -#[aoc_generator(day5, part1)] +#[aoc_generator(day5)] fn parse(input: &str) -> Database { let mut fresh_ingredients = Vec::new(); let mut available_ingredients = Vec::new(); @@ -122,7 +122,7 @@ fn part1(input: &Database) -> u64 { .count() as u64 } -#[aoc_generator(day5, part2)] +#[aoc_generator(day5, part2, Naive)] fn parse2(input: &str) -> Database2 { let mut fresh_ingredients = Vec::new(); for line in input.lines() { @@ -135,7 +135,7 @@ fn parse2(input: &str) -> Database2 { Database2 { fresh_ingredients } } -#[aoc(day5, part2)] +#[aoc(day5, part2, Naive)] fn part2(input: &Database2) -> u64 { let mut all_ingredients = RangeSet::new(); for r in &input.fresh_ingredients { @@ -145,6 +145,15 @@ fn part2(input: &Database2) -> u64 { all_ingredients.ranges.iter().map(|r| r.len()).sum::() } +#[aoc(day5, part2, RangeSet)] +fn part2_rangeset(input: &Database) -> u64 { + let mut all_ingredients = misc::range::RangeSet::new(); + for r in &input.fresh_ingredients { + all_ingredients.add(r); + } + all_ingredients.store.iter().map(|r| r.end - r.start).sum() +} + #[cfg(test)] mod tests { use super::*; @@ -170,4 +179,9 @@ mod tests { fn part2_example() { assert_eq!(part2(&parse2(EXAMPLE)), 14); } + + #[test] + fn part2_set_example() { + assert_eq!(part2_rangeset(&parse(EXAMPLE)), 14); + } }