AoC2021/src/main.rs
Julius 605921453d
All checks were successful
continuous-integration/drone/push Build is passing
Day07
2021-12-07 10:12:57 +01:00

83 lines
2.5 KiB
Rust

use std::fs::read_to_string;
use chrono::Datelike;
use clap::{App, Arg};
use crate::day01::Day01;
use crate::day02::Day02;
use crate::day03::Day03;
use crate::day04::Day04;
use crate::day05::Day05;
use crate::day06::Day06;
use crate::day07::Day07;
use crate::day::Day;
mod day;
mod day01;
mod day02;
mod day03;
mod day04;
mod day05;
mod day06;
mod day07;
fn load_input(day: &str) -> String {
read_to_string(format!("./input/day{}", day)).expect("Could not load input")
}
fn run_day(days: &[Box<dyn Day>], day: usize) {
if let Some(d) = days.get(day - 1) {
let day_code = d;
println!("Running day {}!", day);
println!("\tPart 1: {}", d.part1());
println!("\tPart 2: {}", day_code.part2());
} else {
eprintln!("Day {} is not available!", day);
}
}
fn main() {
let matches = App::new("AOC Time!")
.version("1.0")
.author("J00LZ")
.about("How to overengineer AOC in a single program...")
.arg(Arg::with_name("v")
.short("v")
.multiple(true)
.help("Sets the level of verbosity"))
.arg(Arg::with_name("all")
.short("a")
.long("all")
.help("run all available days"))
.arg(Arg::with_name("DAY")
.takes_value(true)
.multiple(true))
.get_matches();
let days: Vec<Box<dyn Day>> = vec![Box::new(Day01::init(load_input("01"))),
Box::new(Day02::init(load_input("02"))),
Box::new(Day03::init(load_input("03"))),
Box::new(Day04::init(load_input("04"))),
Box::new(Day05::init(load_input("05"))),
Box::new(Day06::init(load_input("06"))),
Box::new(Day07::init(load_input("07")))];
let _verbosity = matches.occurrences_of("v");
if matches.is_present("all") {
let l = days.len();
println!("running {} days!", l);
for v in 1..=l {
run_day(&days, v);
}
} else if let Some(d) = matches.values_of("DAY") {
let d = d.map(|x| x.parse::<usize>().expect("Did not provide an int!"));
for v in d {
run_day(&days, v);
}
} else {
let v = chrono::Local::now();
if v.month() != 12 {
println!("This was really only meant to be used in december...");
}
run_day(&days, v.day() as usize);
}
}