2023-12-02 00:39:37 +01:00
|
|
|
pub mod input;
|
2023-12-05 12:36:28 +01:00
|
|
|
pub mod error;
|
2023-12-02 00:39:37 +01:00
|
|
|
|
2023-12-05 14:50:36 +01:00
|
|
|
pub mod days;
|
|
|
|
|
|
|
|
use days::*;
|
2023-12-05 10:51:08 +01:00
|
|
|
|
2023-12-05 12:36:28 +01:00
|
|
|
use std::env;
|
2023-12-02 00:39:37 +01:00
|
|
|
|
2023-12-05 12:36:28 +01:00
|
|
|
use crate::error::AdventError;
|
2023-12-02 00:39:37 +01:00
|
|
|
|
|
|
|
fn main() -> Result<(), AdventError> {
|
2023-12-05 10:51:08 +01:00
|
|
|
let days = vec![
|
|
|
|
(day1::one as fn() -> Result<u32, AdventError>, day1::two as fn() -> Result<u32, AdventError>),
|
|
|
|
(day2::one as fn() -> Result<u32, AdventError>, day2::two as fn() -> Result<u32, AdventError>),
|
|
|
|
(day3::one as fn() -> Result<u32, AdventError>, day3::two as fn() -> Result<u32, AdventError>),
|
|
|
|
(day4::one as fn() -> Result<u32, AdventError>, day4::two as fn() -> Result<u32, AdventError>),
|
|
|
|
];
|
|
|
|
|
|
|
|
if env::args().len() != 3 {
|
|
|
|
Ok(days.into_iter().map(|(one, two)| {
|
|
|
|
let one_result = one()?;
|
|
|
|
let two_result = two()?;
|
|
|
|
Ok((one_result, two_result))
|
|
|
|
}).map(|r: Result<(u32, u32), AdventError>| {
|
|
|
|
match r {
|
|
|
|
Ok((res1, res2)) => println!("1: {} 2: {}", res1, res2),
|
|
|
|
Err(e) => println!("Error: {}", e.0)
|
|
|
|
};
|
|
|
|
}).fold((), |acc, _| { acc }))
|
|
|
|
} else {
|
|
|
|
let (one, two) = days[env::args().nth(1).ok_or(AdventError("Failed to parse day".into()))?.parse::<usize>()? - 1];
|
|
|
|
match env::args().nth(2).unwrap().parse::<usize>()? {
|
|
|
|
1 => Ok(println!("1: {}", one()?)),
|
|
|
|
2 => Ok(println!("2: {}", two()?)),
|
|
|
|
_ => return Err(AdventError("part must be either 1 or 2".into()))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-02 00:39:37 +01:00
|
|
|
}
|