#puzzle #puzzle-solver #aoc #solution #generate #year #day

aocsol

用于生成 AoC 拼图求解器的包

2 个版本

0.1.1 2023年5月11日
0.1.0 2023年5月10日

#13#puzzle-solver


aocrun 使用

MIT 许可证

22KB
471 行代码(不含注释)

Aocsol

此仓库按年份和日期保存了 Advent Of Code 拼图的解决方案。

如何使用

使用此库包获取拼图的求解器。请参阅 文档


lib.rs:

一个包含 Advent of Code (AoC) 拼图解决方案的包。这些解决方案使用异步 Rust 实现,因此需要异步运行时,例如 tokio

功能标志

默认情况下,提供 PuzzlSolve 特性。

要使用 solver 生成拼图的求解器,请在 Cargo.toml 中添加 solvers 功能标志

如果您想实现自己的求解器,并且只需要一些有用的工具,请在 Cargo.toml 中添加 toolcase 功能标志

示例

提供两个特性 PuzzlSolve 来与求解器接口。

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)
    }
}

依赖关系

~1–1.6MB
~33K SLoC