main.rs 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #[macro_use]
  2. extern crate clap;
  3. mod day_1;
  4. mod day_2;
  5. mod day_3;
  6. mod day_4;
  7. mod puzzle;
  8. use crate::puzzle::options::Options;
  9. use crate::puzzle::traits::{Create, Solve};
  10. fn main() {
  11. let yml = load_yaml!("cli.yml");
  12. let matches = clap::App::from_yaml(yml).get_matches();
  13. let day = opt_str_to_int(matches.value_of("day"));
  14. let puzzle_number = opt_str_to_int(matches.value_of("puzzle"));
  15. let prompt = matches.is_present("prompt");
  16. let options = Options {
  17. puzzle: puzzle_number,
  18. prompt,
  19. };
  20. let puzzle: Box<dyn Solve> = match day {
  21. 1 => day_1::Puzzle::new(options),
  22. 2 => day_2::Puzzle::new(options),
  23. 3 => day_3::Puzzle::new(options),
  24. 4 => day_4::Puzzle::new(options),
  25. e => panic!("unknown day {}", e),
  26. };
  27. let res = puzzle.solve();
  28. println!("{}", res);
  29. }
  30. fn opt_str_to_int(val: Option<&str>) -> i32 {
  31. match val {
  32. Some(val) => val.parse::<i32>().unwrap(),
  33. None => panic!("value not supplied! type --help"),
  34. }
  35. }