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

Download history 161/week @ 2024-04-21 155/week @ 2024-04-28 150/week @ 2024-05-05 149/week @ 2024-05-12 166/week @ 2024-05-19 156/week @ 2024-05-26 163/week @ 2024-06-02 150/week @ 2024-06-09 153/week @ 2024-06-16 146/week @ 2024-06-23 132/week @ 2024-06-30 143/week @ 2024-07-07 143/week @ 2024-07-14 140/week @ 2024-07-21 169/week @ 2024-07-28 135/week @ 2024-08-04

每月下载量 608

自定义许可

6.5MB
2.5K SLoC

Build and test

elv - Advent of Code CLI

目录

  1. 简介
  2. 安装
  3. 卸载
  4. 示例
  5. 常见问题解答
  6. 配置
  7. 获取帮助

简介

elv 是一个命令行界面程序,允许您通过终端与 Advent of Code API 交互。Advent of Code 是每年圣诞节左右发生的一项活动。活动期间每天都会在其网站上发布一个算法谜题,任何人都可以通过解决谜题并提交答案来参与。

elv 帮助您通过终端而不是网页与 Advent of Code 交互。到目前为止,elv 支持

  • 下载谜题描述
  • 下载给定年份和日期的谜题输入
  • 提交谜题答案
  • 自动猜测您想提交的谜题部分
  • 显示给定年份的星级进度,包括 ASCII 艺术品
  • 获取给定年份的官方排行榜
  • 根据当前日期猜测谜题的年份和日期
  • 尽可能缓存 AoC 响应,以最小化对 AoC 服务器的负担
  • 两个函数,允许您将 elv 作为库用于您自己的基于 Rust 的应用程序或代码

安装

使用 cargo

cargoRust 的包管理器。您可以直接从 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,我建议您访问以下链接:

之后,您应该能够在CLI中直接调用 elv

elv

从源代码安装

如果您拥有 Rust 编译器和 cargo,您可以从此仓库创建自己的可执行文件。步骤如下:

  1. 克隆仓库。您可以使用终端克隆仓库,例如:

    git clone [email protected]:kpagacz/elv.git
    # or
    https://github.com/kpagacz/elv.git
    
  2. 安装 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的参数yearday来实现。该应用程序支持以下场景:

  • 如果您没有传递yearday参数
    • 如果现在是十二月并且活动正在进行,elv会猜测您正在处理当天的谜题
      # Date is December, 6th
      elv desc
      # will download the description of the riddle published on the 6th of December
      
    • 如果现在不是十二月,elv将无法猜测日期,并要求您提供yearday参数
      # 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参数
  • 如果您传递了yearday参数,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的配置中设置会话令牌,最方便的方法是

  1. 使用CLI在配置中设置

    elv token 01234567890123456789abcdefghi
    elv t 01234567890123456789abcdefghi
    elv config set aoc.token 01234567890123456789abcdefghi
    
  2. 作为elv的参数传递,使用-t参数

    elv input -t <YOUR TOKEN HERE>
    # or
    elv input --token <YOUR TOKEN HERE>
    

    以下是一个实时示例

    elv input -t 01234567890123456789abcdefghi
    
  3. 作为环境变量。当搜索您的会话令牌时,elv会查找名为AOC_TOKEN的环境变量。例如

    export AOC_TOKEN=0123456789abcdefghi
    elv input
    

    尽管我们没有提供--token参数的值,但elv将选择AOC_TOKEN的值并将其用作令牌。

  4. 在配置文件中。当您运行终端中的elv list-dirs时,elv会在您的家目录中创建一个配置文件。您可以在该目录下找到配置文件。您应该在[aoc]部分下,在token键下存储令牌

    [aoc]
    token = "<YOUR TOKEN HERE>"
    

如果我在配置文件中存储会话令牌并将其作为参数传递给elv会怎样?

elv会从以下列表中的第一个位置开始查找您的令牌,如果尚未找到,则继续查找下一个位置。

  1. elv的配置文件。
  2. AOC_TOKEN环境变量。
  3. 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