Advent 2025 Day 5, Part 1 & 2

This commit is contained in:
Jos van Goor 2025-12-06 14:33:50 +01:00
parent 4d1a0ff8c6
commit 8d5d5fd758
6 changed files with 1278 additions and 2 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,2 @@
pub mod part1;
pub mod part2;

View file

@ -0,0 +1,23 @@
pub fn solve(input: &str) {
let (fresh_ids, inventory) = input.split_once("\r\n\r\n").unwrap();
let fresh_ids = fresh_ids
.lines()
.map(|line| {
let (start, end) = line.split_once("-").unwrap();
(start.parse::<u64>().unwrap(), end.parse::<u64>().unwrap())
})
.collect::<Vec<_>>();
let inventory = inventory.lines().map(|line| line.parse::<u64>().unwrap()).collect::<Vec<_>>();
let mut fresh_count: u64 = 0;
for produce in inventory.iter() {
if fresh_ids.iter().any(|(start, end)| produce >= start && produce <= end) {
fresh_count += 1;
}
}
println!("fresh count: {fresh_count}");
}

View file

@ -0,0 +1,53 @@
pub fn solve(input: &str) {
let (fresh_ids, _) = input.split_once("\r\n\r\n").unwrap();
let mut fresh_ids = fresh_ids
.lines()
.map(|line| {
let (start, end) = line.split_once("-").unwrap();
(start.parse::<u64>().unwrap(), end.parse::<u64>().unwrap())
})
.collect::<Vec<_>>();
let mut merged_fresh_ids: Vec<(u64, u64)> = Vec::new();
loop {
fresh_ids.sort_by(|lhs, rhs| lhs.0.cmp(&rhs.0));
let mut idx = 0usize;
while idx < fresh_ids.len() {
let first = fresh_ids[idx];
if idx == fresh_ids.len() - 1 {
merged_fresh_ids.push(first);
break;
}
let second = fresh_ids[idx + 1];
if first.1 >= second.0 || first.1 >= second.1 {
let merged = (first.0, first.1.max(second.1));
merged_fresh_ids.push(merged);
idx += 1;
} else {
merged_fresh_ids.push(first);
}
idx += 1;
}
if fresh_ids.len() == merged_fresh_ids.len() {
break;
}
fresh_ids = merged_fresh_ids.clone();
merged_fresh_ids.clear();
}
let mut number_of_fresh: u64 = 0;
for (start, end) in merged_fresh_ids {
number_of_fresh += (end + 1) - start;
}
println!("number of fresh: {number_of_fresh}");
}

View file

@ -0,0 +1,11 @@
3-5
10-14
16-20
12-18
1
5
8
11
17
32

View file

@ -1,5 +1,5 @@
use paste::paste; use paste::paste;
mod utility; mod utility;
solve_day!{4} solve_day!{5}
// test_day!{4} // test_day!{5}