Expand description
A crate that holds solutions to Advent of Code(AoC) puzzles.
The solutions are implemented in async rust, thus need an async runtime such as tokio.
§Feature-flags
By default, Puzzl and Solve traits are provided.
To generate solvers for a puzzle using solver,
add solvers feature flag in Cargo.toml
If you wish to implement your own solver, and only require some
useful utilities, add toolcase feature flag in Cargo.toml
§Examples
Two traits Puzzl and Solve are provided to interface with the
solvers.
use std::{error, sync::Arc};
use aocsol::{puzzle::Puzzl, solver};
#[tokio::main]
async fn main() -> Result<(), Box<dyn error::Error + Send + Sync>> {
let data = "1000\n2000\n\n4000\n\n5000\n6000\n\n7000\n9000";
let puzzle = AocPuzzle(Arc::from(data));
let solver = solver::solver(puzzle)?; // solver generated
let answer_part_one: u32 = solver.part_one().await?.to_string().parse()?;
let answer_part_two: u32 = solver.part_two().await?.to_string().parse()?;
assert_eq!(16000, answer_part_one);
assert_eq!(31000, answer_part_two);
Ok(())
}
// Sturct to hold data.
struct AocPuzzle(Arc<str>);
// Implement Puzzl<InputType = Arc<str>> to generate solver using aocsol::solver::solver().
impl<'input> Puzzl for AocPuzzle {
type InputType = Arc<str>;
fn year(&self) -> u32 {
2022
}
fn day(&self) -> u32 {
1
}
fn data(&self) -> Self::InputType {
Arc::clone(&self.0)
}
}