37 lines
785 B
Rust
37 lines
785 B
Rust
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])
|
|
}
|