project structure update
This commit is contained in:
parent
6b350ded94
commit
00f434a9c1
@ -21,6 +21,10 @@ harness = false
|
|||||||
[[bench]]
|
[[bench]]
|
||||||
name = "bench_aoc_4"
|
name = "bench_aoc_4"
|
||||||
harness = false
|
harness = false
|
||||||
|
[[bench]]
|
||||||
|
name = "bench_aoc_5"
|
||||||
|
harness = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
[profile.bench]
|
[profile.bench]
|
||||||
opt-level = 3
|
opt-level = 3
|
||||||
|
|||||||
20
benches/bench_aoc_5.rs
Normal file
20
benches/bench_aoc_5.rs
Normal 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);
|
||||||
@ -2,3 +2,4 @@ pub mod aoc_1;
|
|||||||
pub mod aoc_2;
|
pub mod aoc_2;
|
||||||
pub mod aoc_3;
|
pub mod aoc_3;
|
||||||
pub mod aoc_4;
|
pub mod aoc_4;
|
||||||
|
pub mod aoc_5;
|
||||||
|
|||||||
72
src/aoc/aoc_5.rs
Normal file
72
src/aoc/aoc_5.rs
Normal 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
|
||||||
|
}
|
||||||
11
src/aoc/input/test_input_aoc5.txt
Normal file
11
src/aoc/input/test_input_aoc5.txt
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
3-5
|
||||||
|
10-14
|
||||||
|
16-20
|
||||||
|
12-18
|
||||||
|
|
||||||
|
1
|
||||||
|
5
|
||||||
|
8
|
||||||
|
11
|
||||||
|
17
|
||||||
|
32
|
||||||
16
src/main.rs
16
src/main.rs
@ -11,13 +11,21 @@ fn main() {
|
|||||||
let answer = aoc_3::solve_p1_fast(input2);
|
let answer = aoc_3::solve_p1_fast(input2);
|
||||||
println!("{}", answer);
|
println!("{}", answer);
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
let input = include_bytes!("aoc/input/full_input_aoc4.txt");
|
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);
|
println!("{}", answer);
|
||||||
|
|
||||||
let input = include_str!("aoc/input/full_input_aoc4.txt");
|
let input = include_bytes!("aoc/input/full_input_aoc4.txt");
|
||||||
let answer = aoc_4::solve_p2(input);
|
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);
|
println!("{}", answer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user