From 0ee1e316d7d0560c22fb361d4717da9beae513ff Mon Sep 17 00:00:00 2001 From: Keenan Tims Date: Thu, 4 Dec 2025 21:07:02 -0800 Subject: [PATCH] day5: part1 --- .aoc_tiles/tiles/2025/05.png | Bin 0 -> 6988 bytes README.md | 5 ++- src/day5.rs | 75 +++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 .aoc_tiles/tiles/2025/05.png create mode 100644 src/day5.rs diff --git a/.aoc_tiles/tiles/2025/05.png b/.aoc_tiles/tiles/2025/05.png new file mode 100644 index 0000000000000000000000000000000000000000..fd91c3e724019f19641fb3535b96fb16135b5637 GIT binary patch literal 6988 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

- 2025 - 8 ⭐ - Rust + 2025 - 9 ⭐ - Rust

@@ -14,4 +14,7 @@ + + + diff --git a/src/day5.rs b/src/day5.rs new file mode 100644 index 0000000..0ffc29a --- /dev/null +++ b/src/day5.rs @@ -0,0 +1,75 @@ +use std::ops::RangeInclusive; + +use aoc_runner_derive::{aoc, aoc_generator}; + +struct Database { + fresh_ingredients: Vec>, + available_ingredients: Vec, +} + +#[aoc_generator(day5)] +fn parse(input: &str) -> Database { + let mut fresh_ingredients = Vec::new(); + let mut available_ingredients = Vec::new(); + let mut parsing_ranges = true; + for line in input.lines() { + if line == "" { + parsing_ranges = false; + continue; + } + if parsing_ranges { + let (start, end) = line.split_once(|c| c == '-').unwrap(); + fresh_ingredients.push(RangeInclusive::new( + start.parse().unwrap(), + end.parse().unwrap(), + )); + } else { + available_ingredients.push(line.parse().unwrap()) + } + } + Database { + fresh_ingredients, + available_ingredients, + } +} + +#[aoc(day5, part1)] +fn part1(input: &Database) -> u64 { + input + .available_ingredients + .iter() + .filter(|i| input.fresh_ingredients.iter().any(|r| r.contains(i))) + .count() as u64 +} + +#[aoc(day5, part2)] +fn part2(input: &Database) -> u64 { + 0 +} + +#[cfg(test)] +mod tests { + use super::*; + + const EXAMPLE: &str = "3-5 +10-14 +16-20 +12-18 + +1 +5 +8 +11 +17 +32"; + + #[test] + fn part1_example() { + assert_eq!(part1(&parse(EXAMPLE)), 3); + } + + #[test] + fn part2_example() { + assert_eq!(part2(&parse(EXAMPLE)), 0); + } +}