92 lines
2.5 KiB
Rust
92 lines
2.5 KiB
Rust
use std::{fmt::Display, fs::read_to_string, time::Instant};
|
|
|
|
use color_eyre::eyre;
|
|
use tracing_subscriber::EnvFilter;
|
|
|
|
#[cfg(feature = "day1")]
|
|
mod day01;
|
|
#[cfg(feature = "day2")]
|
|
mod day02;
|
|
#[cfg(feature = "day3")]
|
|
mod day03;
|
|
#[cfg(feature = "day4")]
|
|
mod day04;
|
|
#[cfg(feature = "day5")]
|
|
mod day05;
|
|
#[cfg(feature = "day6")]
|
|
mod day06;
|
|
#[cfg(feature = "day7")]
|
|
mod day07;
|
|
#[cfg(feature = "day8")]
|
|
mod day08;
|
|
#[cfg(feature = "day9")]
|
|
mod day09;
|
|
#[cfg(feature = "day10")]
|
|
mod day10;
|
|
#[cfg(feature = "day11")]
|
|
mod day11;
|
|
#[cfg(feature = "day12")]
|
|
mod day12;
|
|
#[cfg(feature = "day13")]
|
|
mod day13;
|
|
#[cfg(feature = "day14")]
|
|
mod day14;
|
|
|
|
fn main() -> eyre::Result<()> {
|
|
color_eyre::install()?;
|
|
tracing_subscriber::fmt()
|
|
.with_env_filter(EnvFilter::from_default_env())
|
|
.init();
|
|
#[cfg(feature = "day1")]
|
|
solve_day(1, day01::pt1, day01::pt2);
|
|
#[cfg(feature = "day2")]
|
|
solve_day(2, day02::pt1, day02::pt2);
|
|
#[cfg(feature = "day3")]
|
|
solve_day(3, day03::pt1, day03::pt2);
|
|
#[cfg(feature = "day4")]
|
|
solve_day(4, day04::pt1, day04::pt2);
|
|
#[cfg(feature = "day5")]
|
|
solve_day(5, day05::pt1, day05::pt2);
|
|
#[cfg(feature = "day6")]
|
|
solve_day(6, day06::pt1, day06::pt2);
|
|
#[cfg(feature = "day7")]
|
|
solve_day(7, day07::pt1, day07::pt2);
|
|
#[cfg(feature = "day8")]
|
|
solve_day(8, day08::pt1, day08::pt2);
|
|
#[cfg(feature = "day9")]
|
|
solve_day(9, day09::pt1, day09::pt2);
|
|
#[cfg(feature = "day10")]
|
|
solve_day(10, day10::pt1, day10::pt2);
|
|
#[cfg(feature = "day11")]
|
|
solve_day(11, day11::pt1, day11::pt2);
|
|
#[cfg(feature = "day12")]
|
|
solve_day(12, day12::pt1, day12::pt2);
|
|
#[cfg(feature = "day13")]
|
|
solve_day(13, day13::pt1, day13::pt2);
|
|
#[cfg(feature = "day14")]
|
|
solve_day(14, day14::pt1, day14::pt2);
|
|
Ok(())
|
|
}
|
|
|
|
fn solve_day<Fa, Fb, Ta, Tb>(day: u8, part_a: Fa, part_b: Fb)
|
|
where
|
|
Fa: Fn(&str) -> Ta,
|
|
Ta: Display,
|
|
Fb: Fn(&str) -> Tb,
|
|
Tb: Display,
|
|
{
|
|
match read_to_string(format!("./inputs/day{day:02}/input.txt")) {
|
|
Ok(input) => {
|
|
let start = Instant::now();
|
|
let result_a = part_a(&input);
|
|
tracing::info!("[{day:02}] Part A: {result_a} \tin {:?}", start.elapsed());
|
|
let start = Instant::now();
|
|
let result_b = part_b(&input);
|
|
tracing::info!("[{day:02}] Part B: {result_b} \tin {:?}", start.elapsed());
|
|
}
|
|
Err(_) => {
|
|
tracing::warn!("could not open ./inputs/day{day:02}/input.txt");
|
|
}
|
|
}
|
|
}
|