diff --git a/src/main.rs b/src/main.rs index f1df36d..4b80c41 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,22 +1,59 @@ +mod day1; +mod day2; +mod day3; +mod day4; mod day5; +use std::{env, process}; use std::fs::File; use std::io::prelude::*; -fn main() { - let input_filename = "input5.txt"; - +fn run(day: i32, part: i32, input_filename: &str) { let mut input_file = File::open(input_filename) - .expect("Input file not found"); + .expect(format!("Input file '{}' not found", input_filename).as_str()); let mut contents = String::new(); input_file.read_to_string(&mut contents) - .expect("Could not read input file"); + .expect("Failed to read input file"); - let input = day5::parse_input(&contents) - .expect("Failed to parse input"); - - println!("Part 1 result: {}", day5::part1(&input)); - println!("Part 2 result: {}", day5::part2(&input)); + // Janky solution so that I could specify what I want to run + let parse_error_msg = "Failed to parse input"; + match format!("{}.{}", day, part).as_str() { + "1.1" => println!("{}", day1::part1(&day1::parse_input(&contents).expect(parse_error_msg))), + "1.2" => println!("{}", day1::part2(&day1::parse_input(&contents).expect(parse_error_msg))), + "2.1" => println!("{}", day2::part1(&day2::parse_input(&contents).expect(parse_error_msg))), + "2.2" => println!("{}", day2::part2(&day2::parse_input(&contents).expect(parse_error_msg))), + "3.1" => println!("{}", day3::part1(&day3::parse_input(&contents).expect(parse_error_msg))), + "3.2" => println!("{}", day3::part2(&day3::parse_input(&contents).expect(parse_error_msg))), + "4.1" => println!("{}", day4::part1(&day4::parse_input(&contents).expect(parse_error_msg))), + "4.2" => println!("{}", day4::part2(&day4::parse_input(&contents).expect(parse_error_msg))), + "5.1" => println!("{}", day5::part1(&day5::parse_input(&contents).expect(parse_error_msg))), + "5.2" => println!("{}", day5::part2(&day5::parse_input(&contents).expect(parse_error_msg))), + "6.1" => println!("{}", day6::part1(&day6::parse_input(&contents).expect(parse_error_msg))), + "6.2" => println!("{}", day6::part2(&day6::parse_input(&contents).expect(parse_error_msg))), + _ => println!("Day {} part {} not found", day, part) + } +} + +fn main() { + let args: Vec = env::args().collect(); + if args.len() < 3 { + println!("Usage: {} [input-file]", args[0]); + process::exit(0); + } + + let day = args[1].parse::() + .expect("Failed to parse day"); + + let part = args[2].parse::() + .expect("Failed to parse part"); + + let input_filename; + if args.len() > 3 { + input_filename = args[3].clone(); + } else { + input_filename = format!("input{}.txt", day); + } + run(day, part, &input_filename); }