advent-of-code-rust - 🎄用于在 Rust 中解决 Advent of Code 的入门模板。

Created at: 2021-12-29 22:03:42
Language: Rust
License: MIT

🎄代码的出现{年}

Rust代码出现的解决方案。


模板设置

此模板支持所有主要操作系统(macOS,Linux,Windows)。

创建存储库 📝

  1. 在 Github 上打开模板存储库
  2. 单击“使用此模板”并创建存储库。
  3. 将存储库克隆到计算机。

设置锈💻

  1. 安装 Rust 工具链
  2. (推荐)为你的代码编辑器安装 rust-analyzer 扩展。
  3. (可选)安装本机调试器。如果你使用的是VS Code,CodeLLDB是一个不错的选择。

你现在可以开始解谜了!前往“用法”部分,了解如何使用此模板。如果你愿意,可以配置一些可选功能

用法

脚手架一天

# example: `cargo scaffold 1`
cargo scaffold <day>

# output:
# Created module "src/bin/01.rs"
# Created empty input file "src/inputs/01.txt"
# Created empty example file "src/examples/01.txt"
# ---
# 🎄 Type `cargo solve 01` to run your solution.

各个解决方案作为单独的二进制文件存在于目录中。

./src/bin/

每个解决方案都有引用其示例文件的单元测试。使用这些单元测试根据示例输入开发和调试解决方案。对于某些难题,放弃示例文件并将输入硬编码到测试中可能更容易。

编辑解决方案时,将在单元测试块上方显示用于运行/调试单元测试的按钮。

rust-analyzer

下载一天的输入

注意:
此命令需要安装 aoc-cli 板条箱

# example: `cargo download 1`
cargo download <day>

# output:
# Downloading input with aoc-cli...
# Loaded session cookie from "/home/felix/.adventofcode.session".
# Downloading input for day 1, 2021...
# Saving puzzle input to "/tmp/tmp.MBdcAdL9Iw/input"...
# Done!
# ---
# 🎄 Successfully wrote input to "src/inputs/01.txt"!

要下载前几年的输入,请附加标志。(例如:货物下载 1 --2020 年)

--year/-y

拼图输入不会签入 git。推理

运行一天的解决方案

# example: `cargo solve 01`
cargo solve <day>

# output:
#     Running `target/debug/01`
# 🎄 Part 1 🎄
#
# 6 (elapsed: 37.03µs)
#
# 🎄 Part 2 🎄
#
# 9 (elapsed: 33.18µs)

solve
是 的别名。要运行优化版本以进行基准测试,请附加标志。
cargo run --bin
--release

显示的计时显示解决方案的原始执行时间,没有开销(例如文件读取)。

运行所有解决方案

cargo all

# output:
#     Running `target/release/advent_of_code`
# ----------
# | Day 01 |
# ----------
# 🎄 Part 1 🎄
#
# 0 (elapsed: 170.00µs)
#
# 🎄 Part 2 🎄
#
# 0 (elapsed: 30.00µs)
# <...other days...>
# Total: 0.20ms

all
是 的别名。要运行优化版本以进行基准测试,请使用标志。
cargo run
--release

时序是根据各个解决方案时序计算的,并尽可能多地排除开销。

针对示例输入运行所有解决方案

cargo test

要运行特定日期的测试,请附加 ,例如 。你可以进一步将其范围缩小到特定部分,例如 .

--bin <day>
cargo test --bin 01
cargo test --bin 01 part_one

设置代码格式

cargo fmt

棉绒代码

cargo clippy

可选模板功能

通过 aoc-cli 下载拼图输入

  1. 通过货物安装 aoc-cli:。
    cargo install aoc-cli --version 0.5.0
  2. 在你的主目录中创建一个文件,并将你的会话cookie 1 粘贴到其中。若要获取此信息,请在“代码降临”网站上的任意位置按 F12 以打开浏览器开发人员工具。在“应用程序”或“存储”选项卡下查看你的 Cookie,然后复制 Cookie 值。
    .adventofcode.session
    session

安装后,你可以使用下载命令

在 CI 中启用剪裁棉绒

取消注释工作流中的作业,以在 CI 中启用快速检查。

clippy
ci.yml

在自述文件中自动跟踪⭐️进度

此模板包含一个 Github 操作,该操作会随着代码进度的出现自动更新自述文件。

要启用它,请完成以下步骤:

1. 创建私有排行榜

转到要跟踪的年份的排行榜页面,然后单击“私有排行榜”。如果你尚未创建排行榜,请单击“创建”创建一个排行榜。你的排行榜应该可以在 下访问。

https://adventofcode.com/{year}/leaderboard/private/view/{aoc_user_id}

2. 设置存储库机密

转到存储库设置中的密钥选项卡,然后创建以下密钥

  • AOC_ENABLED
    :此变量控制是否启用工作流。将其设置为启用进度跟踪器。
    true
  • AOC_USER_ID
    :转到此页面并复制你的用户 ID。它是名字选项中符号后面的数字。例:
    #
    3031
  • AOC_YEAR
    :你要跟踪的年份。例:
    2021
  • AOC_SESSION
    :代码网站出现的活动会话2。若要获取此信息,请在“代码降临”网站上的任意位置按 F12 以打开浏览器开发人员工具。在“应用程序”或“存储”选项卡下查看你的 Cookie,然后复制该 Cookie。
    session

现在,你可以通过工作流页面上的运行工作流按钮手动运行此操作。如果希望工作流自动运行,请取消注释工作流文件中的节或添加触发器。

schedule
readme-stars.yml
push

使用 VS Code 调试代码

  1. 安装锈迹分析仪CodeLLDB
  2. 在代码中设置断点。3
  3. 单击单元测试或函数旁边的“调试”。
  4. 调试器将在特定行停止程序,并允许你检查本地堆栈。5

有用的板条箱

  • 迭代工具:使用额外的方法和适配器扩展迭代器。经常用于AOC谜题。
  • 正则表达式:Rust 的官方正则表达式实现。

可以在 blessred.rs 上找到热门板条箱的精选列表。

你们有针对AOC的板条箱建议吗?分享它们!

常见陷阱

  • 整数溢出:此模板默认使用 32 位整数,因为它通常比在任何地方使用 64 位整数更快(例如,当打包在大型数组或结构中时)。对于某些问题,实际输入的解决方案可能超过 32 位整数空间。选中此选项并在模式下死机时,整数在模式下会换行,从而导致运行解决方案时输出错误。
    debug
    release

脚注

  1. 会话 Cookie 可能会在一段时间后(~1 个月)过期,从而导致下载失败。若要解决此问题,请刷新文件。

    .adventofcode.session

  2. 会话 Cookie 可能会在一段时间(~1 个月)后过期,这会导致自动化工作流失败。若要解决此问题,请刷新AOC_SESSION密钥。

  3. 设置断点
  4. 运行调试器
  5. 检查调试器状态