From 7681bbc760d58979facfa30acd0dbe5984766153 Mon Sep 17 00:00:00 2001 From: Joseph Montanaro Date: Fri, 3 Dec 2021 11:28:22 -0800 Subject: [PATCH] add timekeeping, also day1 that got left out somehow --- 2021/src/day1.rs | 31 +++++++++++++++++++++++++++++++ 2021/src/main.rs | 24 ++++++++++++++++++++---- 2 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 2021/src/day1.rs diff --git a/2021/src/day1.rs b/2021/src/day1.rs new file mode 100644 index 0000000..0008b4d --- /dev/null +++ b/2021/src/day1.rs @@ -0,0 +1,31 @@ +use color_eyre::eyre; + +use crate::lib::ParseLines; + + +fn run(data: &str) -> eyre::Result<()> { + let mut single_increases = 0; + let mut window_increases = 0; + let mut prev = (None, None, None); + for res in data.parse_lines::() { + let n = res?; + if let Some(p) = prev.2 { + // apparently we can't combine "if let" and regular boolean conditions + if n > p { + single_increases += 1; + } + } + + if let (Some(first), Some(second), Some(third)) = prev { + if (n + second + third) > (first + second + third) { + window_increases += 1; + } + } + // would have forgotten this if not for the warning triggered by "let mut" without mutation + prev = (prev.1, prev.2, Some(n)); + } + + println!("One: {}", single_increases); + println!("Two: {}", window_increases); + Ok(()) +} diff --git a/2021/src/main.rs b/2021/src/main.rs index 50b72bc..0405bb6 100644 --- a/2021/src/main.rs +++ b/2021/src/main.rs @@ -1,14 +1,30 @@ +use std::time::{Instant}; + use color_eyre::eyre; mod lib; use lib::load; - mod day2; - - fn main() -> eyre::Result<()> { let data = load("data/02.txt")?; - day2::run(&data) + let start = Instant::now(); + day2::run(&data)?; + let (dur, unit) = format_ns(start.elapsed().as_nanos()); + println!("Completed in {}{}", dur, unit); + Ok(()) +} + + +fn format_ns(ns: u128) -> (u128, &'static str) { + const UNITS: [&str; 4] = ["ns", "us", "ms", "s"]; + let mut display_n = ns; + let mut unit_idx = 0; + while display_n > 1000 && unit_idx < 4 { + display_n /= 1000; + unit_idx += 1 + } + + (display_n, UNITS[unit_idx]) }