[TASK] Solved day 9 + added benchmarking options to the main method
This commit is contained in:
75
src/main.rs
75
src/main.rs
@@ -10,37 +10,66 @@ mod day5;
|
||||
mod day6;
|
||||
mod day7;
|
||||
mod day8;
|
||||
mod day9;
|
||||
|
||||
const MAX_DAY: u8 = 9;
|
||||
const BENCHMARK_AMOUNT: u32 = 100;
|
||||
|
||||
fn solve(day: u8) {
|
||||
match day {
|
||||
1 => day1::solve(),
|
||||
2 => day2::solve(),
|
||||
3 => day3::solve(),
|
||||
4 => day4::solve(),
|
||||
5 => day5::solve(),
|
||||
6 => day6::solve(),
|
||||
7 => day7::solve(),
|
||||
8 => day8::solve(),
|
||||
9 => day9::solve(),
|
||||
_ => println!("This day is not yet implemented")
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
|
||||
let now = Instant::now();
|
||||
|
||||
let args: Vec<String> = std::env::args().collect();
|
||||
|
||||
let day_arg_idx = args.iter().position(|a| a == "-d");
|
||||
if day_arg_idx.is_some() {
|
||||
match args[day_arg_idx.unwrap() + 1].parse::<u8>().unwrap() {
|
||||
1 => day1::solve(),
|
||||
2 => day2::solve(),
|
||||
3 => day3::solve(),
|
||||
4 => day4::solve(),
|
||||
5 => day5::solve(),
|
||||
6 => day6::solve(),
|
||||
7 => day7::solve(),
|
||||
8 => day8::solve(),
|
||||
_ => println!("This day is not yet implemented")
|
||||
let single_day = day_arg_idx.is_some();
|
||||
let day = if single_day { args[day_arg_idx.unwrap() + 1].parse::<u8>().unwrap() } else { 0 };
|
||||
|
||||
let benchmark = args.contains(&String::from("--bench")) || args.contains(&String::from("-b"));
|
||||
|
||||
let mut bench_results: Vec<u128> = Vec::new();
|
||||
|
||||
// This is essentially the warmup for the benchmark:
|
||||
run_once(single_day, day, &mut bench_results);
|
||||
|
||||
if benchmark {
|
||||
for _ in 0..BENCHMARK_AMOUNT {
|
||||
run_once(single_day, day, &mut bench_results);
|
||||
}
|
||||
} else {
|
||||
// Solve all days:
|
||||
day1::solve();
|
||||
day2::solve();
|
||||
day3::solve();
|
||||
day4::solve();
|
||||
day5::solve();
|
||||
day6::solve();
|
||||
day7::solve();
|
||||
day8::solve();
|
||||
}
|
||||
|
||||
println!("Execution took {} μs", now.elapsed().as_micros());
|
||||
let avg_runtime: u128 = bench_results.iter().sum::<u128>() / (bench_results.len() as u128);
|
||||
|
||||
println!("Execution took {} μs {}", avg_runtime, if benchmark { "on average" } else { "" });
|
||||
}
|
||||
|
||||
fn run_once(single_day: bool, day: u8, bench_results: &mut Vec<u128>) {
|
||||
|
||||
let now = Instant::now();
|
||||
if single_day {
|
||||
solve(day);
|
||||
} else {
|
||||
solve_all();
|
||||
}
|
||||
bench_results.push(now.elapsed().as_micros());
|
||||
}
|
||||
|
||||
fn solve_all() {
|
||||
for day in 1..(MAX_DAY + 1) {
|
||||
solve(day);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user