Advent of Code for 2025!
at main 33 lines 951 B view raw
1use std::{fmt::Display, fs, time::Instant}; 2 3use anyhow::Result; 4 5pub fn run<T, U, V, P, F1, F2>(name: &str, path: &str, parse: P, part1: F1, part2: F2) -> Result<()> 6where 7 T: Clone, 8 U: Display, 9 V: Display, 10 P: Fn(&str) -> T, 11 F1: Fn(T) -> U, 12 F2: Fn(T) -> V, 13{ 14 println!("{}\n{}\n", name, "-".repeat(name.len())); 15 16 let read_timer = Instant::now(); 17 let input = fs::read_to_string(path)?; 18 println!("Read input in: {:?}", read_timer.elapsed()); 19 20 let parse_timer = Instant::now(); 21 let input = parse(&input); 22 println!("Parsed input in: {:?}\n", parse_timer.elapsed()); 23 24 let part1_timer = Instant::now(); 25 println!("Part 1 answer: {}", part1(input.clone())); 26 println!("Finished in: {:?}\n", part1_timer.elapsed()); 27 28 let part2_timer = Instant::now(); 29 println!("Part 2 answer: {}", part2(input.clone())); 30 println!("Finished in: {:?}", part2_timer.elapsed()); 31 32 Ok(()) 33}