AoC2020/src/main.rs

98 lines
2.5 KiB
Rust

#![feature(iterator_fold_self)]
#![feature(assoc_char_funcs)]
use clap::{Arg, App};
use std::fs::File;
use std::io::BufReader;
mod day1;
mod day2;
mod day3;
mod day4;
mod day5;
mod day6;
mod day7;
mod day8;
mod day9;
mod day10;
mod day11;
mod day12;
mod day13;
mod day14;
mod day14part2;
mod day15;
mod day16;
mod day17;
mod day18;
mod day19;
mod day20;
mod day21;
mod day22;
mod day23;
mod day24;
mod day25;
fn main() {
let matches = App::new("Advent of Code 2020")
.version("0.1")
.arg(Arg::new("challenge")
.short('c')
.long("challenge")
.value_name("CHALLENGE")
.about("Challenge id from 1 (1st day, 1st part) to 50 (25th day, 2nd part).")
.required(true)
.takes_value(true)
.min_values(1)
.max_values(50))
.arg(Arg::new("input")
.short('i')
.long("input")
.value_name("INPUT")
.about("Input file, ex `input/day1`.")
.required(true)
.takes_value(true))
.get_matches();
let input = matches.value_of("input").unwrap();
let challenge = matches.value_of_t::<usize>("challenge").unwrap() - 1;
let input_file = File::open(input).expect("Unable to open input file");
let reader = BufReader::new(input_file);
let challenges = [
day1::part1, day1::part2,
day2::part1, day2::part2,
day3::part1, day3::part2,
day4::part1, day4::part2,
day5::part1, day5::part2,
day6::part1, day6::part2,
day7::part1, day7::part2,
day8::part1, day8::part2,
day9::part1, day9::part2,
day10::part1, day10::part2,
day11::part1, day11::part2,
day12::part1, day12::part2,
day13::part1, day13::part2,
day14::part1, day14part2::part2,
day15::part1, day15::part2,
day16::part1, day16::part2,
day17::part1, day17::part2,
day18::part1, day18::part2,
day19::part1, day19::part2,
day20::part1, day20::part2,
day21::part1, day21::part2,
day22::part1, day22::part2,
day23::part1, day23::part2,
day24::part1, day24::part2,
day25::part1, day25::part2,
];
if let Some(f) = challenges.get(challenge) {
println!("Running day {}, part {}", challenge / 2 + 1, challenge % 2 +1);
f(reader);
} else {
println!("Challenge {}, part {} not unimplemented", challenge / 2 + 1, challenge % 2 + 1)
}
}