day01 finished
This commit is contained in:
parent
284f099d3e
commit
68fefd064a
9 changed files with 2487 additions and 164 deletions
87
src/main.rs
87
src/main.rs
|
|
@ -1,27 +1,84 @@
|
|||
mod common;
|
||||
mod days;
|
||||
mod macros;
|
||||
use std::error::Error;
|
||||
|
||||
use anyhow::Result;
|
||||
use common::file::read_data;
|
||||
use days::{DayProvider, ResultType};
|
||||
use days::{day_provider, DayTrait, ResultType};
|
||||
use std::env;
|
||||
use thiserror::Error;
|
||||
|
||||
fn main() -> Result<(), Box<dyn Error>> {
|
||||
let day_provider = DayProvider::create();
|
||||
|
||||
//let params = env::args().skip(1).collect::<Vec<_>>();
|
||||
|
||||
let day = day_provider.get_day(1)?;
|
||||
let lines = read_data(day.get_day_number(), "input.txt")?;
|
||||
|
||||
match day.part1(lines)? {
|
||||
fn output(day: usize, part: usize, result: ResultType) -> () {
|
||||
match result {
|
||||
ResultType::IntResult(value) => {
|
||||
println!("Day {:02} part {}: {}", day.get_day_number(), 1, value);
|
||||
println!("Day {:02} part {}: {}", day, part, value);
|
||||
}
|
||||
ResultType::StringResult(_) => todo!(),
|
||||
ResultType::LinesResult(_) => todo!(),
|
||||
ResultType::NoResult => todo!(),
|
||||
ResultType::StringResult(value) => {
|
||||
println!("Day {:02} part {}: {}", day, part, value);
|
||||
}
|
||||
ResultType::LinesResult(value) => {
|
||||
println!("Day {:02} part {}: {}", day, part, value[0]);
|
||||
for line in &value[1..] {
|
||||
println!(" part : {}", line);
|
||||
}
|
||||
}
|
||||
ResultType::NoResult => {
|
||||
println!("Day {:02} part {}: (None)", day, part);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn run(day: Box<dyn DayTrait>, part1: bool, part2: bool) -> Result<()> {
|
||||
let lines = read_data(day.get_day_number(), "input.txt")?;
|
||||
if part1 {
|
||||
output(1, 1, day.part1(&lines)?);
|
||||
}
|
||||
if part2 {
|
||||
output(1, 2, day.part2(&lines)?);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
enum ParamError {
|
||||
#[error("Too many Parameters: {0}")]
|
||||
TooManyParameters(usize),
|
||||
|
||||
#[error("Unknown Part: {0}")]
|
||||
UnknownPart(usize),
|
||||
}
|
||||
|
||||
fn run_on_parameters(params: &[String]) -> Result<()> {
|
||||
match params.len() {
|
||||
0 => {
|
||||
for day in day_provider::get_all_days() {
|
||||
run(day, true, true)?;
|
||||
}
|
||||
}
|
||||
1 => {
|
||||
let mut parts = params[0].split("/");
|
||||
if let Some(day_str) = parts.next() {
|
||||
let day_number = day_str.parse::<usize>()?;
|
||||
let day = day_provider::get_day(day_number)?;
|
||||
|
||||
if let Some(part_str) = parts.next() {
|
||||
match part_str.parse::<usize>()? {
|
||||
1 => run(day, true, false)?,
|
||||
2 => run(day, false, true)?,
|
||||
p => Err(ParamError::UnknownPart(p))?,
|
||||
}
|
||||
} else {
|
||||
run(day, true, true)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
n => Err(ParamError::TooManyParameters(n))?,
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let params = env::args().skip(1).collect::<Vec<_>>();
|
||||
run_on_parameters(¶ms)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue