feat: add simple cli to solve macro

This commit is contained in:
2024-11-28 02:17:40 +01:00
parent 0000009008
commit 00000100ac
8 changed files with 48 additions and 19 deletions

View File

@@ -78,8 +78,7 @@ pub fn part_two(input: &str) -> Option<isize> {
}
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 {

View File

@@ -60,8 +60,7 @@ pub fn part_two(input: &str) -> Option<String> {
}
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 {

View File

@@ -43,8 +43,7 @@ pub fn part_two(input: &str) -> Option<usize> {
}
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 {

View File

@@ -79,8 +79,7 @@ pub fn part_two(input: &str) -> Option<usize> {
}
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 {

View File

@@ -59,8 +59,7 @@ pub fn part_two(input: &str) -> Option<String> {
}
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 {

View File

@@ -30,8 +30,7 @@ pub fn part_two(input: &str) -> Option<String> {
}
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 {

View File

@@ -64,8 +64,7 @@ pub fn part_two(input: &str) -> Option<u32> {
}
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 {

View File

@@ -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<T: Display>(func: impl FnOnce(&str) -> Option<T>, input: &str) {
fn print_result<T: Display>(
func: impl FnOnce(&str) -> Option<T>,
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 {