From 00000100ac62e47a9952c2171602e380f7ce1d11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Jane=C5=BEi=C4=8D?= Date: Thu, 28 Nov 2024 02:17:40 +0100 Subject: [PATCH] feat: add simple cli to solve macro --- src/bin/01.rs | 3 +-- src/bin/02.rs | 3 +-- src/bin/03.rs | 3 +-- src/bin/04.rs | 3 +-- src/bin/05.rs | 3 +-- src/bin/06.rs | 3 +-- src/bin/07.rs | 3 +-- src/lib.rs | 46 +++++++++++++++++++++++++++++++++++++++++----- 8 files changed, 48 insertions(+), 19 deletions(-) diff --git a/src/bin/01.rs b/src/bin/01.rs index 8124586..6a50228 100644 --- a/src/bin/01.rs +++ b/src/bin/01.rs @@ -78,8 +78,7 @@ pub fn part_two(input: &str) -> Option { } fn main() { let input = &aoc::read_file("inputs", 1); - aoc::solve!(1, part_one, input); - aoc::solve!(2, part_two, input); + aoc::solve!(part_one, part_two, input); } #[cfg(test)] mod tests { diff --git a/src/bin/02.rs b/src/bin/02.rs index 49b1be8..c50894f 100644 --- a/src/bin/02.rs +++ b/src/bin/02.rs @@ -60,8 +60,7 @@ pub fn part_two(input: &str) -> Option { } fn main() { let input = &aoc::read_file("inputs", 2); - aoc::solve!(1, part_one, input); - aoc::solve!(2, part_two, input); + aoc::solve!(part_one, part_two, input); } #[cfg(test)] mod tests { diff --git a/src/bin/03.rs b/src/bin/03.rs index a9f7149..77b357b 100644 --- a/src/bin/03.rs +++ b/src/bin/03.rs @@ -43,8 +43,7 @@ pub fn part_two(input: &str) -> Option { } fn main() { let input = &aoc::read_file("inputs", 3); - aoc::solve!(1, part_one, input); - aoc::solve!(2, part_two, input); + aoc::solve!(part_one, part_two, input); } #[cfg(test)] mod tests { diff --git a/src/bin/04.rs b/src/bin/04.rs index 36dbaa9..9445b77 100644 --- a/src/bin/04.rs +++ b/src/bin/04.rs @@ -79,8 +79,7 @@ pub fn part_two(input: &str) -> Option { } fn main() { let input = &aoc::read_file("inputs", 4); - aoc::solve!(1, part_one, input); - aoc::solve!(2, part_two, input); + aoc::solve!(part_one, part_one, input); } #[cfg(test)] mod tests { diff --git a/src/bin/05.rs b/src/bin/05.rs index 5a8dde7..cfafbd1 100644 --- a/src/bin/05.rs +++ b/src/bin/05.rs @@ -59,8 +59,7 @@ pub fn part_two(input: &str) -> Option { } fn main() { let input = &aoc::read_file("inputs", 5); - aoc::solve!(1, part_one, input); - aoc::solve!(2, part_two, input); + aoc::solve!(part_one, part_two, input); } #[cfg(test)] mod tests { diff --git a/src/bin/06.rs b/src/bin/06.rs index 889f49f..d0d8b70 100644 --- a/src/bin/06.rs +++ b/src/bin/06.rs @@ -30,8 +30,7 @@ pub fn part_two(input: &str) -> Option { } fn main() { let input = &aoc::read_file("inputs", 6); - aoc::solve!(1, part_one, input); - aoc::solve!(2, part_two, input); + aoc::solve!(part_one, part_two, input); } #[cfg(test)] mod tests { diff --git a/src/bin/07.rs b/src/bin/07.rs index 8425b51..4e59de0 100644 --- a/src/bin/07.rs +++ b/src/bin/07.rs @@ -64,8 +64,7 @@ pub fn part_two(input: &str) -> Option { } fn main() { let input = &aoc::read_file("inputs", 7); - aoc::solve!(1, part_one, input); - aoc::solve!(2, part_two, input); + aoc::solve!(part_one,part_two, input); } #[cfg(test)] mod tests { diff --git a/src/lib.rs b/src/lib.rs index 052dfd3..9e1150e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,12 +12,28 @@ pub const ANSI_RESET: &str = "\x1b[0m"; #[macro_export] macro_rules! solve { - ($part:expr, $solver:ident, $input:expr) => {{ + ($solver_one:ident, $solver_two:ident, $input:expr) => { use aoc::{ANSI_BOLD, ANSI_ITALIC, ANSI_RESET}; use std::fmt::Display; + use std::str::FromStr; use std::time::Instant; - fn print_result(func: impl FnOnce(&str) -> Option, input: &str) { + fn print_result( + func: impl FnOnce(&str) -> Option, + part: u8, + input: &str, + quiet: bool, + ) { + if quiet { + let result = func(input); + if let Some(r) = result { + println!("{}", r); + } + return; + } + + println!("🎄 {}Part {}{} 🎄", ANSI_BOLD, part, ANSI_RESET); + let timer = Instant::now(); let result = func(input); let elapsed = timer.elapsed(); @@ -34,9 +50,29 @@ macro_rules! solve { } } - println!("🎄 {}Part {}{} 🎄", ANSI_BOLD, $part, ANSI_RESET); - print_result($solver, $input); - }}; + let mut args = pico_args::Arguments::from_env(); + + let part = args + .opt_value_from_str("-p") + .expect("There was an error parsing cli args."); + let quiet = args.contains("-q"); + + match part { + None => { + print_result($solver_one, 1, $input, quiet); + print_result($solver_two, 2, $input, quiet); + } + Some(pp) => match pp { + 1 => { + print_result($solver_one, 1, $input, quiet); + } + 2 => { + print_result($solver_two, 2, $input, quiet); + } + _ => eprintln!("error: expected -p to be 1 or 2"), + }, + } + }; } pub fn read_file(folder: &str, day: u8) -> String {