/* * This file contains template code. * There is no need to edit this file unless you want to change template functionality. * Prefer `./helpers.rs` if you want to extract code from your solutions. */ use std::env; use std::fs; pub const ANSI_ITALIC: &str = "\x1b[3m"; pub const ANSI_BOLD: &str = "\x1b[1m"; pub const ANSI_RESET: &str = "\x1b[0m"; #[macro_export] macro_rules! solve { ($part:expr, $solver:ident, $input:expr) => {{ use aoc::{ANSI_BOLD, ANSI_ITALIC, ANSI_RESET}; use std::fmt::Display; use std::time::Instant; fn print_result(func: impl FnOnce(&str) -> Option, input: &str) { let timer = Instant::now(); let result = func(input); let elapsed = timer.elapsed(); match result { Some(result) => { println!( "{} {}(elapsed: {:.2?}){}", result, ANSI_ITALIC, elapsed, ANSI_RESET ); } None => { println!("not solved.") } } } println!("🎄 {}Part {}{} 🎄", ANSI_BOLD, $part, ANSI_RESET); print_result($solver, $input); }}; } pub fn read_file(folder: &str, day: u8) -> String { let cwd = env::current_dir().unwrap(); let filepath = cwd.join("src").join(folder).join(format!("{day:02}.txt")); let f = fs::read_to_string(filepath); f.expect("could not open input file") } pub fn parse_args() -> Result { let mut args = pico_args::Arguments::from_env(); args.free_from_str() }