summaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs59
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(())
}