feat: move template code into its own module

This commit is contained in:
Matej Janezic 2023-11-23 23:38:14 +01:00
parent 00000410c9
commit 00000420aa
Signed by: janezicmatej
GPG Key ID: 4298E230ED37B2C0
5 changed files with 60 additions and 58 deletions

6
Cargo.lock generated
View File

@ -19,7 +19,7 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]] [[package]]
name = "aoc" name = "aoc"
version = "41.0.0" version = "42.0.0"
dependencies = [ dependencies = [
"itertools", "itertools",
] ]
@ -105,7 +105,7 @@ checksum = "03d8c417d7a8cb362e0c37e5d815f5eb7c37f79ff93707329d5a194e42e54ca0"
[[package]] [[package]]
name = "download" name = "download"
version = "41.0.0" version = "42.0.0"
dependencies = [ dependencies = [
"dotenvy", "dotenvy",
"pico-args", "pico-args",
@ -643,7 +643,7 @@ checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
[[package]] [[package]]
name = "scaffold" name = "scaffold"
version = "41.0.0" version = "42.0.0"
dependencies = [ dependencies = [
"dotenvy", "dotenvy",
"pico-args", "pico-args",

View File

@ -19,7 +19,7 @@ members = ["utils/download", "utils/scaffold"]
[workspace.package] [workspace.package]
description = "template for advent of code" description = "template for advent of code"
readme = "README.md" readme = "README.md"
version = "41.0.0" version = "42.0.0"
edition = "2021" edition = "2021"
license = "MIT" license = "MIT"
authors = ["Matej Janežič <janezic.mj@gmail.com>"] authors = ["Matej Janežič <janezic.mj@gmail.com>"]

View File

@ -1,53 +1,2 @@
/* pub mod template;
* 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! solution {
($day:expr) => {
use aoc::{ANSI_BOLD, ANSI_ITALIC, ANSI_RESET};
use std::fmt::Display;
use std::time::Instant;
fn print_result<T: Display>(func: impl FnOnce(&str) -> Option<T>, 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.")
}
}
}
fn main() {
let input = aoc::read_file("inputs", 1);
print!("{}Part {}{}: ", ANSI_BOLD, 1, ANSI_RESET);
print_result(part_one, &input);
print!("{}Part {}{}: ", ANSI_BOLD, 2, ANSI_RESET);
print_result(part_two, &input);
}
};
}
#[must_use]
pub fn read_file(folder: &str, day: u8) -> String {
let cwd = env::current_dir().unwrap();
let filepath = cwd.join("data").join(folder).join(format!("{day:02}.txt"));
let f = fs::read_to_string(filepath);
f.expect("could not open input file").trim().to_string()
}

53
src/template.rs Normal file
View File

@ -0,0 +1,53 @@
/*
* This file contains template code.
* There is no need to edit this file unless you want to change template functionality.
*/
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! solution {
($day:expr) => {
use aoc::template::{ANSI_BOLD, ANSI_ITALIC, ANSI_RESET};
use std::fmt::Display;
use std::time::Instant;
fn print_result<T: Display>(func: impl FnOnce(&str) -> Option<T>, 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.")
}
}
}
fn main() {
let input = aoc::template::read_file("inputs", 1);
print!("{}Part {}{}: ", ANSI_BOLD, 1, ANSI_RESET);
print_result(part_one, &input);
print!("{}Part {}{}: ", ANSI_BOLD, 2, ANSI_RESET);
print_result(part_two, &input);
}
};
}
#[must_use]
pub fn read_file(folder: &str, day: u8) -> String {
let cwd = env::current_dir().unwrap();
let filepath = cwd.join("data").join(folder).join(format!("{day:02}.txt"));
let f = fs::read_to_string(filepath);
f.expect("could not open input file").trim().to_string()
}

View File

@ -23,11 +23,11 @@ mod tests {
use super::*; use super::*;
#[test] #[test]
fn test_part_one() { fn test_part_one() {
assert_eq!(part_one(&aoc::read_file("examples", DAY)), None); assert_eq!(part_one(&aoc::template::read_file("examples", DAY)), None);
} }
#[test] #[test]
fn test_part_two() { fn test_part_two() {
assert_eq!(part_two(&aoc::read_file("examples", DAY)), None); assert_eq!(part_two(&aoc::template::read_file("examples", DAY)), None);
} }
} }
"#; "#;