10 个版本 (5 个破坏性更新)
0.13.4 | 2023 年 12 月 3 日 |
---|---|
0.13.2 | 2023 年 10 月 29 日 |
0.12.3 | 2023 年 7 月 17 日 |
0.12.1 | 2023 年 1 月 11 日 |
0.1.0 | 2022 年 12 月 11 日 |
在 命令行工具 中排名 #1432
每月下载量 608
6.5MB
2.5K SLoC
elv - Advent of Code CLI
目录
简介
elv
是一个命令行界面程序,允许您通过终端与 Advent of Code API 交互。Advent of Code 是每年圣诞节左右发生的一项活动。活动期间每天都会在其网站上发布一个算法谜题,任何人都可以通过解决谜题并提交答案来参与。
elv
帮助您通过终端而不是网页与 Advent of Code 交互。到目前为止,elv
支持
- 下载谜题描述
- 下载给定年份和日期的谜题输入
- 提交谜题答案
- 自动猜测您想提交的谜题部分
- 显示给定年份的星级进度,包括 ASCII 艺术品
- 获取给定年份的官方排行榜
- 根据当前日期猜测谜题的年份和日期
- 尽可能缓存
AoC
响应,以最小化对AoC
服务器的负担 - 两个函数,允许您将
elv
作为库用于您自己的基于Rust
的应用程序或代码
安装
使用 cargo
cargo
是 Rust
的包管理器。您可以直接从 crates.io
安装 elv
。一旦安装了 cargo
,您可以在终端中运行以下命令
cargo install elv
安装后,elv
应该可以通过您的 CLI 使用。
使用 homebrew
Homebrew
自称是 "macOS(或Linux)缺失的包管理器"。如果您想使用 homebrew
安装 elv
,首先您需要安装 homebrew
本身。然后,在您的终端中运行以下命令。
brew install kpagacz/elv/elv
elv
托管在一个私有tap(如果您熟悉 homebrew
的术语),本质上是一个GitHub 仓库。默认情况下,homebrew
安装仓库中可用的最新版本的程序。要安装早期版本,您必须检出与该版本相对应的特定提交。
下载二进制文件
elv
为不同的操作系统和架构发布了几种可执行文件。前往发布子页面,查看 elv
的最新发布版本。
选择与您的操作系统和架构匹配的二进制文件
归档的二进制文件遵循简单的命名方案:elv-{version}-{target-os-and-arch}.zip
。将您的操作系统与文件名和架构相匹配。
- Windows:查找Windows二进制文件之一。
- Apple:如果您使用硅处理器之一,请下载
aarch64-apple-darwin
目标;否则,请下载其他版本。 - Linux:获取Linux发行版之一。
选择 GNU
版本或其他版本取决于您是否已安装 GNU
。如果是的话,请继续下载适当的 GNU
版本。
运行二进制文件
每个发布版本中的存档包含一个单独的可执行文件。解压文件。您需要将此可执行文件放在您的 PATH
中,这意味着将 zip
文件解压到 PATH
中已存在的目录之一,或者您想要的任何地方,并将此位置添加到 PATH
中。如果您不确定如何检查或更改您的 PATH
,我建议您访问以下链接:
- Windows:https://www.h3xed.com/windows/how-to-add-to-and-edit-windows-path-variable
- Linux/macOS:https://opensource.com/article/17/6/set-path-linux
之后,您应该能够在CLI中直接调用 elv
elv
从源代码安装
如果您拥有 Rust
编译器和 cargo
,您可以从此仓库创建自己的可执行文件。步骤如下:
-
克隆仓库。您可以使用终端克隆仓库,例如:
git clone [email protected]:kpagacz/elv.git # or https://github.com/kpagacz/elv.git
-
安装
elv
。导航到elv
目录并运行cargo install --path .
卸载
删除配置文件和缓存
elv
在运行时使用配置文件和缓存。您可以运行以下命令列出 elv
使用的目录:
elv list-dirs
输出列表了目录。如果您想删除配置文件并删除缓存,只需从您的系统中删除这些目录即可。
Cargo
cargo uninstall elv
通过二进制安装
从您的系统中删除二进制文件。
通过 brew 安装
brew uninstall kpagacz/elv/elv
brew autoremove
库
elv
提供了一个极小的库,您可以在脚本或应用程序中使用它。这些包括
elv::get_input
- 一个下载给定年日的输入的功能elv::submit
- 一个将解决方案提交给指定年份和日期的函数
这些函数有相当详细的文档,您可以在这里浏览。下面是文档中的一个示例
// Will succeed if your token is set using another way
get_input(1, 2023, None).unwrap()
submit(20, 2019, "something", 2, Some("Mytoken")).unwrap();
您还可以使用Driver
对象执行更多操作,但这不是推荐的做法,因为API可能不稳定,将来可能会更改。《code>Driver结构体的文档也相当糟糕。
如果您想在库中获取更多公开的功能,请通过konrad.pagacz@gmail.com
联系我或提交问题。
示例
您需要Advent of Code会话令牌才能与之API交互。elv
本身不支持对API进行身份验证,因此您需要事先获取令牌。
获取和设置会话令牌 - 重要
您需要登录Advent of Code。AoC网站会通过cookies将会话令牌发送回您。因此,您需要检查cookies并获取名为session
的值。这是您可以使用elv
的会话令牌。会话令牌的有效期大约为一个月,所以当旧令牌过期时,请记得获取新的。
一旦您获取了会话令牌,我们建议将其设置在elv
的配置中。您可以通过运行以下命令来完成此操作:
elv token <your-session-token>
# or
elv t <your-session-token>
有关存储会话密钥的其他方法的说明,请参阅本节。
如果您没有获取会话令牌,您将无法使用elv
与Advent of Code API交互。
下载描述
获取今天的谜题描述
此功能仅在活动进行期间有效,而不是全年有效。当活动不进行时,您需要明确使用-y
和-d
参数指定挑战的年份和日期。
elv desc
获取特定谜题的描述
您指定谜题的日期和年份。
elv desc -y 2021 -d 1
# Prints the description of the riddle published on the 1st of December 2021
下载输入
获取今天的谜题输入
此功能仅在活动进行期间有效,而不是全年有效。当活动不进行时,您需要明确使用-y
和-d
参数指定挑战的年份和日期。
elv input
获取特定谜题的输入
您指定谜题的日期和年份。
elv input -y 2021 -d 1
# downloads the input for the riddle published on the 1st of December 2021
提交解决方案
提交今天的谜题解决方案
此功能仅在活动进行期间有效,而不是全年有效。当活动不进行时,您需要明确使用-y
和-d
参数指定挑战的年份和日期。
elv submit <SOLUTION>
elv submit <SOLUTION>
提交特定谜题的解决方案
您指定谜题的日期和年份。
elv submit -y 2021 -d 1 <SOLUTION>
指定谜题的部分
elv
会尝试根据谜题描述猜测您正在解决的谜题部分。如果出于某种原因您想覆盖它,或者应用程序未能猜测出部分,您可以明确指定它。
elv submit -y 2021 -d 1 <SOLUTION> one
elv submit -y 2021 -d 1 <SOLUTION> two
获取星星和ASCII艺术
elv
可以打印出您迄今为止每年收集的星星和ASCII艺术。
elv stars # prints the stars for the latest year
elv stars <YEAR> # prints the stars for the given year
elv stars 2019 # prints the stars for the year 2019
获取排行榜
获取本年度的全球排行榜
此功能仅在活动进行期间有效,而不是全年有效。当活动不进行时,您需要明确使用-y
参数指定年份。
elv leaderboard
获取特定年份的全球排行榜
您指定排行榜的年份。
elv leaderboard -y 2021
获取本年度的私人排行榜
此功能仅在活动进行期间有效,而不是全年有效。当活动不进行时,您需要明确使用-y
参数指定年份。
elv private-leaderboard --id <LEADERBOARD ID>
elv pl --id <LEADERBOARD ID>
私人排行榜命令还有一个别名pl
,您可以用它来代替写private-leaderboard
。
获取特定年份的私人排行榜
您指定排行榜的年份。
elv private-leaderboard -y 2021 --id <LEADERBOARD ID>
elv pl -y 2021 --id <LEADERBOARD ID>
猜测谜题的年份和日期
elv
可以根据您正在处理的谜题的年份和日期进行猜测。它通过查看当前日期以及传递给elv
的参数year
和day
来实现。该应用程序支持以下场景:
- 如果您没有传递
year
和day
参数- 如果现在是十二月并且活动正在进行,
elv
会猜测您正在处理当天的谜题# Date is December, 6th elv desc # will download the description of the riddle published on the 6th of December
- 如果现在不是十二月,
elv
将无法猜测日期,并要求您提供year
和day
参数# Date is November, 24th elv desc # will not produce any description
- 如果现在是十二月并且活动正在进行,
- 如果您只传递了
day
参数- 如果现在是十二月并且活动正在进行,
elv
会猜测您正在处理当年的谜题# Date is December, 6th elv desc -d 4 # will download the description of the riddle # published on the 4th of December the same year
- 如果现在不是十二月,
elv
会猜测您指的是去年的活动# Date is November, 24th elv desc -d 4 # will download the description of the riddle # published on the 4th of December last year
- 如果现在是十二月并且活动正在进行,
- 如果您只传递了
year
参数,elv
将无法猜测日期,并要求您提供day
参数 - 如果您传递了
year
和day
参数,elv
将使用它们,无论当前日期如何elv desc -y 2021 -d 4 # will download the description of the riddle # published on the 4th of December 2021 # regardless of the current date
常见问题解答
我该如何存储会话令牌?
您可以通过多种方式在elv
的配置中设置会话令牌,最方便的方法是
-
使用CLI在配置中设置
elv token 01234567890123456789abcdefghi elv t 01234567890123456789abcdefghi elv config set aoc.token 01234567890123456789abcdefghi
-
作为
elv
的参数传递,使用-t
参数elv input -t <YOUR TOKEN HERE> # or elv input --token <YOUR TOKEN HERE>
以下是一个实时示例
elv input -t 01234567890123456789abcdefghi
-
作为环境变量。当搜索您的会话令牌时,
elv
会查找名为AOC_TOKEN
的环境变量。例如export AOC_TOKEN=0123456789abcdefghi elv input
尽管我们没有提供
--token
参数的值,但elv
将选择AOC_TOKEN
的值并将其用作令牌。 -
在配置文件中。当您运行终端中的
elv list-dirs
时,elv
会在您的家目录中创建一个配置文件。您可以在该目录下找到配置文件。您应该在[aoc]
部分下,在token
键下存储令牌[aoc] token = "<YOUR TOKEN HERE>"
如果我在配置文件中存储会话令牌并将其作为参数传递给elv
会怎样?
elv
会从以下列表中的第一个位置开始查找您的令牌,如果尚未找到,则继续查找下一个位置。
elv
的配置文件。AOC_TOKEN
环境变量。- CLI命令的
-t
参数。
我该如何获取会话令牌的值以将其传递给elv
?
当您登录Advent of Code网页时,会话令牌会作为cookie发送到您的HTTP客户端(通常是您的浏览器)。获取cookie值的最简单方法是使用浏览器内置的检查工具。查找检查特定于您浏览器的cookie的方法。
配置文件在哪里?
您可以通过运行以下命令列出elv
使用的所有目录
elv list-dirs
配置
该应用程序支持配置文件中的多个参数。您可以通过调用以下命令找到配置文件:
查看当前配置
elv config list
# or
elv config l
设置配置参数
elv config set <PARAMETER> <VALUE>
例如,将输出宽度更改为100个字符
elv config set cli.output_width 100
配置文件
elv list-dirs
# cache: /Users/konradpagacz/Library/Caches/elv
# config: /Users/konradpagacz/Library/Application Support/elv
该命令打印出机器上elv
使用的路径。追踪名为config
的路径,并打开目录中的.config
文件。
配置参数
配置文件使用TOML
编写。您可以设置以下值
aoc.token
- 应用程序连接到AOC
服务器时用于验证您的令牌cli.output_width
- 调用elv description
时输出的列宽
帮助
如果某些功能不符合预期,或者您有改进的建议,请随时通过以下邮箱联系我:konrad.pagacz@gmail.com
,或创建一个issue或pull request。
依赖项
~13–28MB
~457K SLoC