1 use std
::time
::Instant
;
9 #[derive(Parser, Debug)]
10 #[command(author = "Greg Burri", version = "1.0", about = "Advent of Code 2023")]
12 #[arg(index(1), exclusive(true))]
20 println!("https://adventofcode.com/2023");
22 let days
: Vec
<fn() -> String
> = vec
![days
::day01
];
24 let args
= Args
::parse();
28 if day
>= 1 && day
<= days
.len() {
31 println!("Unknown day: {}", day
)
34 // No argument -> execute all day problems.
36 let now
= Instant
::now();
41 .for_each(|d
| do_day(&days
, d
));
43 (1..=days
.len()).for_each(|d
| do_day(&days
, d
));
47 "Time to execute all days: {}",
48 format_micros(now
.elapsed().as_micros())
54 fn do_day(days
: &[fn() -> String
], day
: usize) {
55 let now
= Instant
::now();
57 "Result of day {:02}: {} (time: {})",
60 format_micros(now
.elapsed().as_micros())
64 fn format_micros(t
: u128
) -> String
{
67 } else if t
< 10_000_000u128 {
68 format!("{:.2} ms", t
as f64 / 1e3f64
)
70 format!("{:.2} s", t
as f64 / 1e6f64
)