use std::time::{Instant};

use color_eyre::eyre;

mod lib;
use lib::load;
mod day12;


fn main() -> eyre::Result<()> {
    let data = load("data/12.txt")?;

    let start = Instant::now();
    let (one, two) = day12::run(&data)?;
    let (dur, unit) = format_ns(start.elapsed().as_nanos());

    let precision = 2.0 - dur.log10().floor();
    println!(
        "One: {0}\nTwo: {1}\nCompleted in {2:.4$}{3}",
        one, two, dur, unit, precision as usize
    );
    Ok(())
}


fn format_ns(ns: u128) -> (f64, &'static str) {
    const UNITS: [&str; 4] = ["ns", "us", "ms", "s"];
    let mut display_n = ns as f64; // 
    let mut unit_idx = 0;
    while display_n > 1000.0 && unit_idx < 4 {
        display_n /= 1000.0;
        unit_idx += 1
    }

    (display_n, UNITS[unit_idx])
}