#advent #aoc #macro

bin+lib aoc-main

为 Advent of Code 定义了多个 main 宏

6 个版本 (破坏性更新)

0.5.0 2022 年 12 月 5 日
0.4.1 2022 年 12 月 1 日
0.3.0 2020 年 12 月 10 日
0.2.0 2020 年 12 月 9 日
0.1.0 2020 年 12 月 8 日

#173性能分析

Download history 15/week @ 2024-04-08 23/week @ 2024-04-15 37/week @ 2024-04-22 22/week @ 2024-04-29 15/week @ 2024-05-06 17/week @ 2024-05-13 29/week @ 2024-05-20 15/week @ 2024-05-27 32/week @ 2024-06-03 15/week @ 2024-06-10 21/week @ 2024-06-17 16/week @ 2024-06-24 32/week @ 2024-07-01 8/week @ 2024-07-08 9/week @ 2024-07-15 31/week @ 2024-07-22

每月 81 次下载

Apache-2.0

87KB
565 代码行

Advent of Code 辅助工具

本包提供宏,用于生成 Advent of Code 参与的多个 main。目的是通过更简单的代码库提供类似于 cargo-aoc 的功能。

screenshoot

目前此工具将提供以下好处

  • 解决方案的优雅组织
  • 自动下载和加载输入文件
  • 生成 criterion 基准测试

使用方法

必须在一个名为 dayX 的模块中实现给定日期的生成器和解决方案。然后你可以在你的 main.rs 中调用 aoc_main::main! 宏。

mod day1 {
    pub fn generator(input: &str) -> Vec<u64> {
        input
            .lines()
            .map(|line| line.parse().unwrap())
            .collect()
    }

    pub fn part_1(input: &[u64]) -> u64 {
        input.iter().map(|&mass| mass / 3 - 2).sum()
    }

    pub fn part_2(input: &[u64]) -> u64 {
        fn total_needed_mass(obj: u64) -> u64 {
            if obj < 9 {
                0
            } else {
                let obj_mass = obj / 3 - 2;
                obj_mass + total_needed_mass(obj_mass)
            }
        }

        input.iter().copied().map(total_needed_mass).sum()
    }
}

mod day2;
mod day3;

aoc_main::main! {
    year 2019;
    day1 : generator => part_1, part_2;
    day2 : generator => part_1, part_2, part_2_optimized;
    day3             => part_1, part_2; // no generator, a &str is passed
}

然后你可以简单地运行 cargo run

请注意,你的解决方案必须接受生成器输出的借用版本。同时,生成器可以输出包含来自原始输入文件的借用数据的结构。

基准测试

你可以通过运行 cargo run --release -- --bench 来运行 Criterion 基准测试,但首先你需要在你的 cargo.toml 中启用 bench 功能。

[dependencies]
aoc-main = { version = "*", features = ["bench"] }

获取你的 AOC 令牌

当命令行请求你的会话令牌时,你可以按照以下步骤操作(摘自 cargo-aoc

  • Firefox: "存储" 选项卡,Cookie,并复制会话 Cookie 的 "值" 字段。
  • Google Chrome / Chromium: "应用" 选项卡,Cookie,并复制会话 Cookie 的 "值" 字段。

如果您想要更改或忘记您的连接令牌,您需要从您的配置目录中删除aoc(例如,对于Linux用户为$HOME/.config/aoc)。

依赖项

~3–17MB
~191K SLoC