4 个版本
0.2.0 | 2022年12月1日 |
---|---|
0.1.2 | 2022年12月1日 |
0.1.1 | 2022年11月30日 |
0.1.0 | 2022年11月30日 |
#2 in #adventofcode
11KB
164 行代码(不包括注释)
AOC 库
Rust 对 Advent of Code 的辅助库,可以帮助您节省复制粘贴输入和答案的时间。
用法
要开始,您必须首先将 Advent of Code 会话传递给库。
- 打开 adventofcode.com
- 打开开发者工具(Ctrl+Shift+I 可能会根据您的平台而变化)
- 对于 Firefox:开发者工具 > 存储 > Cookies > 复制会话cookie
- 对于 Chrome:开发者工具 > 应用 > Cookies > 复制会话cookie
- 将
AOC_SESSION
环境变量设置为复制的会话,或使用AocSession::new_from_session
与会话。
为了避免多次提交相同的答案,一个 aoc-progress.json
文件存储在当前目录中,跟踪您的进度。
示例
以下示例(2021年 AOC 第 2 天的第一部分和第二部分)应该可以很好地解释库的工作原理。
use aoc_lib::{AocSession, Day};
use std::{convert::Infallible, str::FromStr};
enum SubmarineCommand {
Forward(i32),
Up(i32),
Down(i32),
}
struct Day2(Vec<SubmarineCommand>);
impl Day for Day2 {
fn from_input(input: String) -> Self {
let lines = input.trim().split('\n');
let mut commands = vec![];
for line in lines {
commands.push(line.parse().unwrap());
}
Self(commands)
}
fn first_part(&mut self) -> String {
let mut depth: i32 = 0;
let mut x: i32 = 0;
for command in &self.0 {
match command {
SubmarineCommand::Down(c) => depth += c,
SubmarineCommand::Up(c) => depth -= c,
SubmarineCommand::Forward(c) => x += c,
}
}
(depth * x).to_string()
}
fn second_part(&mut self) -> String {
let mut depth = 0i32;
let mut aim = 0i32;
let mut x = 0i32;
for command in &self.0 {
match command {
SubmarineCommand::Forward(c) => {
x += c;
depth += aim * c;
}
SubmarineCommand::Down(c) => aim += c,
SubmarineCommand::Up(c) => aim -= c,
}
}
(depth * x).to_string()
}
}
impl FromStr for SubmarineCommand {
type Err = Infallible; // Just panic!
fn from_str(s: &str) -> Result<Self, Self::Err> {
let raw_command = s.split(' ').collect::<Vec<_>>();
Ok(match (raw_command[0], raw_command[1]) {
("forward", count) => Self::Forward(count.parse().unwrap()),
("down", count) => Self::Down(count.parse().unwrap()),
("up", count) => Self::Up(count.parse().unwrap()),
_ => unreachable!(),
})
}
}
fn main() -> Result<(), anyhow::Error> {
/// More the one .day can be set
AocSession::new(2021)?.day::<Day2>(3)?;
Ok(())
}
依赖项
~4–19MB
~251K SLoC