diff options
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/src/main.rs b/src/main.rs index 33333c1..0883c66 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,27 +1,40 @@ -use aoc_2023::{ - day_01::Day01, day_02::Day02, day_03::Day03, day_04::Day04, day_05::Day05, day_06::Day06, - day_07::Day07, day_08::Day08, day_09::Day09, day_10::Day10, day_11::Day11, day_12::Day12, - day_13::Day13, day_14::Day14, day_15::Day15, day_16::Day16, day_17::Day17, Solution, -}; +fn main() -> Result<(), Box<dyn std::error::Error>> { + let mut args = std::env::args().skip(1); + let days = aoc_2023::get_days(); -fn main() -> anyhow::Result<()> { - Day01::solve()?; - Day02::solve()?; - Day03::solve()?; - Day04::solve()?; - Day05::solve()?; - Day06::solve()?; - Day07::solve()?; - Day08::solve()?; - Day09::solve()?; - Day10::solve()?; - Day11::solve()?; - Day12::solve()?; - Day13::solve()?; - Day14::solve()?; - Day15::solve()?; - Day16::solve()?; - Day17::solve()?; + let days_n = if let Some(first) = args.next() { + if "all".contains(first.as_str()) { + (1..days.len() + 1).collect::<Vec<_>>() + } else { + std::iter::once(first) + .chain(args) + .map(|d| d.parse::<usize>()) + .collect::<Result<Vec<_>, _>>()? + } + } else { + vec![days.len()] + }; + + for day in days_n { + if day == 0 || day > days.len() { + eprintln!("Error: Invalid day: {day}"); + continue; + } + + let (input, parts) = &days[day - 1]; + + for (part, f) in parts.iter().enumerate() { + let timer = std::time::SystemTime::now(); + let answer = f(input)?; + let duration = timer.elapsed()?; + println!( + "Day {day}.{}: {answer} ({}ms)", + part + 1, + duration.as_micros() as f64 / 100f64 + ); + } + println!() + } Ok(()) } |