[TASK] Solved day 9 + added benchmarking options to the main method

This commit is contained in:
2020-12-09 09:54:26 +01:00
parent f5850ceb2b
commit e053e4ed61
5 changed files with 1157 additions and 26 deletions

View File

@@ -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);
}
}