82 lines
2.2 KiB
Rust
82 lines
2.2 KiB
Rust
|
|
pub mod error;
|
|
pub mod days;
|
|
mod input;
|
|
|
|
use std::env;
|
|
use day1::Day1;
|
|
use day2::Day2;
|
|
use day3::Day3;
|
|
use day4::Day4;
|
|
use day5::Day5;
|
|
use day6::Day6;
|
|
use day7::Day7;
|
|
use day14::Day14;
|
|
|
|
use crate::error::AdventError;
|
|
use crate::days::*;
|
|
|
|
struct DummyDay {
|
|
|
|
}
|
|
|
|
impl DummyDay {
|
|
fn new() -> Self {
|
|
Self{}
|
|
}
|
|
}
|
|
|
|
impl AdventDay for DummyDay {
|
|
fn puzzle1(&mut self) -> Result<String, AdventError> {
|
|
Ok("0".to_string())
|
|
}
|
|
|
|
fn puzzle2(&mut self) -> Result<String, AdventError> {
|
|
Ok("0".to_string())
|
|
}
|
|
}
|
|
|
|
fn main() -> Result<(), AdventError> {
|
|
|
|
let mut advent_days: Vec<Box::<dyn AdventDay>> = vec!(
|
|
Box::new(Day1::new()),
|
|
Box::new(Day2::new()),
|
|
Box::new(Day3::new()),
|
|
Box::new(Day4::new()),
|
|
Box::new(Day5::new()),
|
|
Box::new(Day6::new()),
|
|
Box::new(Day7::new()),
|
|
Box::new(DummyDay::new()),
|
|
Box::new(DummyDay::new()),
|
|
Box::new(DummyDay::new()),
|
|
Box::new(DummyDay::new()),
|
|
Box::new(DummyDay::new()),
|
|
Box::new(DummyDay::new()),
|
|
Box::new(Day14::new()),
|
|
);
|
|
|
|
if env::args().len() == 1 {
|
|
Ok(advent_days.into_iter().map(|mut day| {
|
|
let one_result = day.puzzle1()?;
|
|
let two_result = day.puzzle2()?;
|
|
Ok((one_result, two_result))
|
|
}).enumerate().map(|(index, r): (usize, Result<(String, String), AdventError>)| {
|
|
match r {
|
|
Ok((res1, res2)) => println!("{}: ({}, {})", index + 1, res1, res2),
|
|
Err(e) => println!("Error: {}", e.0)
|
|
};
|
|
}).fold((), |acc, _| { acc }))
|
|
} else {
|
|
let day_index = env::args().nth(1).ok_or(AdventError("Failed to parse day".into()))?.parse::<usize>()? - 1;
|
|
let day = &mut advent_days[day_index];
|
|
if env::args().len() == 3 {
|
|
match env::args().nth(2).unwrap().parse::<usize>()? {
|
|
1 => Ok(println!("1: {}", &day.puzzle1()?)),
|
|
2 => Ok(println!("2: {}", &day.puzzle2()?)),
|
|
_ => return Err(AdventError("part must be either 1 or 2".into()))
|
|
}
|
|
} else {
|
|
Ok(println!("{}: ({}, {})", day_index + 1, day.puzzle1()?, day.puzzle2()?))
|
|
}
|
|
}
|
|
} |