From 19bd8c4d9327fc6e8208aaa94aef240fc511ffb2 Mon Sep 17 00:00:00 2001 From: Luke Hubmayer-Werner Date: Wed, 7 Dec 2022 18:28:18 +1030 Subject: [PATCH] add benchmarking args --- 2022/day6.rs | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/2022/day6.rs b/2022/day6.rs index e80117a..eba368c 100644 --- a/2022/day6.rs +++ b/2022/day6.rs @@ -1,5 +1,7 @@ #![allow(dead_code)] +use std::env; use std::fs; +use std::time::Instant; type Int = usize; @@ -87,14 +89,19 @@ fn find_first_unique_runs(s: &Vec) -> (Int, Int) { return (four+2, fourteen+8); } -fn run_once(s: &Vec) { - let four = find_first_unique_run(&s, 4, 0); - let fourteen = find_first_unique_run(&s, 14, four); - println!("Part 1: {}", four); - println!("Part 2: {}", fourteen); -} +fn main() { + let mut filename = "input/6"; + let mut iterations = 1_000_000; + let args: Vec = env::args().collect(); + match args.len() { + 3 => {filename = &args[1]; iterations = args[2].parse().expect(&("Invalid number for iterations: ".to_owned() + &args[2]))}, + 2 => filename = &args[1], + _ => (), + }; + let s: Vec = fs::read(filename).expect("Input not found!"); -fn run_many(s: &Vec, iterations: usize) { + println!("Running {} iterations:", iterations); + let t0 = Instant::now(); let mut four = 0; let mut fourteen = 0; for _ in 0..iterations { @@ -102,17 +109,9 @@ fn run_many(s: &Vec, iterations: usize) { // fourteen = find_first_unique_run(&s, 14, four); (four, fourteen) = find_first_unique_runs(&s); } + let duration = t0.elapsed(); + let per_iteration = duration / iterations; println!("Part 1: {}", four); println!("Part 2: {}", fourteen); - println!("Completed {} iterations", iterations); -} - -fn main() { - let input: Vec = fs::read("input/6").expect("Input not found!"); - println!("Input is {} long", input.len()); - // run_once(&input); - run_many(&input, 1_000_000); - // let (four, fourteen) = find_first_unique_runs(&input); - // println!("Part 1: {}", four); - // println!("Part 2: {}", fourteen); + println!("Completed {} iterations in {:.3}s (~{}ns each)", iterations, duration.as_secs_f32(), per_iteration.as_nanos()); }