#![feature(drain_filter)] mod day_1; mod day_2; mod day_3; mod day_4; mod day_5; mod day_6; mod day_7; mod day_8; use std::fs::File; use std::io::{BufRead, BufReader}; use std::path::PathBuf; use std::str::FromStr; use argparse::{ArgumentParser, Store}; fn read_input(day: u8) -> Vec { let file_name = PathBuf::from_str("input") .unwrap() .join(format!("day_{}.txt", day)); let input_file = File::open(&file_name).expect(&format!("Unable to open input file {:?}", file_name)); let reader = BufReader::new(input_file); reader .lines() .map(|r| r.expect("Unable to read line in input file")) .collect() } fn run(day: u8, input: Vec) { match day { 1 => day_1::run(input), 2 => day_2::run(input), 3 => day_3::run(input), 4 => day_4::run(input), 5 => day_5::run(input), 6 => day_6::run(input), 7 => day_7::run(input), 8 => day_8::run(input), o => panic!("Day {} is not implemented (yet)", o), } } fn main() { let mut day: u8 = 1; { let mut ap = ArgumentParser::new(); ap.set_description("Run advent of code 2015 solvers"); ap.refer(&mut day).add_option( &["-d", "--day"], Store, "The day of the month of which the solver should be run", ); ap.parse_args_or_exit(); } println!("Attempting to solve day {}", day); let input = read_input(day); run(day, input); }