aoc/src/main.rs
2023-12-22 18:53:10 +01:00

57 lines
3.1 KiB
Rust

mod aoc2021;
mod aoc2022;
mod aoc2023;
use std::fs;
struct Puzzle {
day: usize,
year: usize,
task_one: fn(&str) -> String,
task_two: fn(&str) -> String
}
impl Puzzle {
pub fn solve_and_print(&self) {
let file = format!("src/aoc{}/day{:02}/input.txt", self.year, self.day);
let input = fs::read_to_string(file).expect("Error on reading file.");
let task_one_result = (self.task_one)(&input);
let task_two_result = (self.task_two)(&input);
println!("AOC{} Day {:02} \t Task 1: {:15}\tTask 2: {}", self.year, self.day, task_one_result, task_two_result);
}
}
fn main() {
let mut puzzles: Vec<Puzzle> = Vec::new();
// AOC 2021
puzzles.push(Puzzle { day: 1, year: 2021, task_one: aoc2021::day01::task_one, task_two: aoc2021::day01::task_two });
puzzles.push(Puzzle { day: 2, year: 2021, task_one: aoc2021::day02::task_one, task_two: aoc2021::day02::task_two });
puzzles.push(Puzzle { day: 3, year: 2021, task_one: aoc2021::day03::task_one, task_two: aoc2021::day03::task_two });
puzzles.push(Puzzle { day: 4, year: 2021, task_one: aoc2021::day04::task_one, task_two: aoc2021::day04::task_two });
// AOC 2022
puzzles.push(Puzzle { day: 1, year: 2022, task_one: aoc2022::day01::task_one, task_two: aoc2022::day01::task_two });
puzzles.push(Puzzle { day: 2, year: 2022, task_one: aoc2022::day02::task_one, task_two: aoc2022::day02::task_two });
puzzles.push(Puzzle { day: 3, year: 2022, task_one: aoc2022::day03::task_one, task_two: aoc2022::day03::task_two });
puzzles.push(Puzzle { day: 4, year: 2022, task_one: aoc2022::day04::task_one, task_two: aoc2022::day04::task_two });
puzzles.push(Puzzle { day: 5, year: 2022, task_one: aoc2022::day05::task_one, task_two: aoc2022::day05::task_two });
puzzles.push(Puzzle { day: 6, year: 2022, task_one: aoc2022::day06::task_one, task_two: aoc2022::day06::task_two });
puzzles.push(Puzzle { day: 7, year: 2022, task_one: aoc2022::day07::task_one, task_two: aoc2022::day07::task_two });
puzzles.push(Puzzle { day: 8, year: 2022, task_one: aoc2022::day08::task_one, task_two: aoc2022::day08::task_two });
puzzles.push(Puzzle { day: 9, year: 2022, task_one: aoc2022::day09::task_one, task_two: aoc2022::day09::task_two });
puzzles.push(Puzzle { day: 10, year: 2022, task_one: aoc2022::day10::task_one, task_two: aoc2022::day10::task_two });
// AOC 2023
puzzles.push(Puzzle { day: 1, year: 2023, task_one: aoc2023::day01::task_one, task_two: aoc2023::day01::task_two });
puzzles.push(Puzzle { day: 2, year: 2023, task_one: aoc2023::day02::task_one, task_two: aoc2023::day02::task_two });
puzzles.push(Puzzle { day: 3, year: 2023, task_one: aoc2023::day03::task_one, task_two: aoc2023::day03::task_two });
puzzles.push(Puzzle { day: 4, year: 2023, task_one: aoc2023::day04::task_one, task_two: aoc2023::day04::task_two });
puzzles.push(Puzzle { day: 6, year: 2023, task_one: aoc2023::day06::task_one, task_two: aoc2023::day06::task_two });
puzzles.push(Puzzle { day: 7, year: 2023, task_one: aoc2023::day07::task_one, task_two: aoc2023::day07::task_two });
puzzles.iter().for_each(|puzzle| puzzle.solve_and_print());
}