project structure update

This commit is contained in:
Martijn Gerritsen 2025-12-05 09:36:52 +01:00
parent 6b350ded94
commit 00f434a9c1
6 changed files with 120 additions and 4 deletions

View File

@ -21,6 +21,10 @@ harness = false
[[bench]]
name = "bench_aoc_4"
harness = false
[[bench]]
name = "bench_aoc_5"
harness = false
[dependencies]
[profile.bench]
opt-level = 3

20
benches/bench_aoc_5.rs Normal file
View File

@ -0,0 +1,20 @@
use std::hint::black_box;
use criterion::{criterion_group, criterion_main, Criterion};
use aoc2025::aoc::aoc_5;
fn bench_aoc_5_part1(c: &mut Criterion) {
let input = black_box(include_str!("../src/aoc/input/full_input_aoc5.txt"));
c.bench_function("bench_aoc5 part 1", |b| b.iter(|| aoc_5::solve_p1(input)));
}
fn bench_aoc_5_part2(c: &mut Criterion) {
let input = black_box(include_str!("../src/aoc/input/full_input_aoc5.txt"));
c.bench_function("bench_aoc5 part 2", |b| b.iter(|| aoc_5::solve_p2(input)));
}
criterion_group!(
benches_p5,
bench_aoc_5_part1,
bench_aoc_5_part2
);
criterion_main!(benches_p5);

View File

@ -2,3 +2,4 @@ pub mod aoc_1;
pub mod aoc_2;
pub mod aoc_3;
pub mod aoc_4;
pub mod aoc_5;

72
src/aoc/aoc_5.rs Normal file
View File

@ -0,0 +1,72 @@
pub fn solve_p1(input: &str) -> u64 {
let mut answer = 0;
let mut parse_range = true;
let mut ranges = Vec::new();
let mut numbers = Vec::new();
for line in input.lines() {
if line.is_empty() {
parse_range = false;
continue;
}
if parse_range {
let nums = line.split("-").map(|x| x.parse::<u64>().unwrap()).collect::<Vec<_>>();
ranges.push(nums);
} else {
let num = line.parse::<u64>().unwrap();
numbers.push(num);
}
}
ranges.sort();
for num in numbers {
for range in &ranges{
if num >= range[0] {
if num <= range[1] {
answer += 1;
break;
}
} else {
break;
}
}
}
//println!("{:?} {:?}", ranges, numbers);
answer
}
pub fn solve_p2(input: &str) -> u64 {
let mut answer = 0;
let mut ranges = Vec::new();
for line in input.lines() {
if line.is_empty() {
break;
}
let nums = line.split("-").map(|x| x.parse::<u64>().unwrap()).collect::<Vec<_>>();
ranges.push(nums);
}
ranges.sort();
let mut new_ranges:Vec<Vec<u64>> = Vec::new();
let mut new_range = Vec::<u64>::new();
new_range.push(ranges[0][0]);
new_range.push(ranges[0][1]);
for range in ranges.iter() {
if range[0] >= new_range[0] && range[0] <= new_range[1] {
if range[1] > new_range[1] {
new_range[1] = range[1];
}
}else if range[0] > new_range[1] {
new_ranges.push(Vec::from([new_range[0], new_range[1]]));
new_range[0] = range[0];
new_range[1] = range[1];
}
}
new_ranges.push(Vec::from([new_range[0], new_range[1]]));
for range in new_ranges {
answer += range[1] - range[0] + 1;
}
answer
}

View File

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

View File

@ -11,13 +11,21 @@ fn main() {
let answer = aoc_3::solve_p1_fast(input2);
println!("{}", answer);
*/
/*
let input = include_bytes!("aoc/input/full_input_aoc4.txt");
let answer = aoc_4::solve_p2_f(input);
let answer = aoc_4::solve_p1_f(input);
println!("{}", answer);
let input = include_str!("aoc/input/full_input_aoc4.txt");
let answer = aoc_4::solve_p2(input);
let input = include_bytes!("aoc/input/full_input_aoc4.txt");
let answer = aoc_4::solve_p1(input);
println!("{}", answer);
*/
let input = include_str!("aoc/input/full_input_aoc5.txt");
let answer = aoc_5::solve_p1(input);
println!("{}", answer);
let input = include_str!("aoc/input/full_input_aoc5.txt");
let answer = aoc_5::solve_p2(input);
println!("{}", answer);
}