#cargo-subcommand #at-coder #procon #cli

app cargo-atcoder

AtCoder 的 Cargo 子命令

3 个版本 (破坏性更新)

0.4.0 2021 年 7 月 31 日
0.3.0 2020 年 9 月 19 日
0.2.0 2020 年 5 月 10 日

#1343 in 命令行工具

MIT 许可证

1MB
2K SLoC

Crates.io Workflow Status Join the chat at https://gitter.im/tanakh/cargo-atcoder

cargo-atcoder

AtCoder 的 Cargo 子命令

用法

安装

$ cargo install cargo-atcoder

登录

$ cargo atcoder login

登录 AtCoder。保存 http 会话。请放心,不会保存用户名和密码。clear-session 命令可以删除会话信息。

target 目录的共享(可选)

在创建竞赛项目之前,请执行以下设置。

在计划排列项目的目录中执行以下命令。

$ mkdir ./.cargo
$ echo '[build]\ntarget-dir = "target"' > ./.cargo/config.toml

这样,这个目录中的 build.target-dir 被设置,并且下面的整个项目将共享一个 target 目录。这样可以减少外部 crate 每次都重新构建的情况。

创建项目

使用 new 命令创建竞赛项目文件。

$ cargo atcoder new <contest-name>

必须使用包含竞赛名称的 URL 创建。

例如,ABC152 (https://atcoder.jp/contests/abc152),则 abc152

$ cargo atcoder new abc152
     Created binary (application) `abc152` package

这样就会创建一个名为 abc152 的目录,并在其中创建 cargo 项目。

$ tree ./abc152
./abc152
├── Cargo.toml
└── src
    └── bin
        ├── a.rs
        ├── b.rs
        ├── c.rs
        ├── d.rs
        ├── e.rs
        └── f.rs

2 directories, 7 files

源文件是

  1. 如果正在参加正在进行的竞赛,则根据问题列表
  2. 根据竞赛顶部的得分表获得的分数

创建。如果竞赛开始前且得分表不在顶部页面上,则请使用 -b--bins 指定文件基名。

$ cargo atcoder new <contest-name> -b {a..f}

提交解答

在创建的项目目录中执行 submit 命令可以提交解答。

$ cargo atcoder submit <problem-id>

problem-id 指定 URL 尾部包含的内容(例如,https://atcoder.jp/contests/abc152/tasks/abc152_a,则 a)。

在提交之前,使用问题文中的测试案例进行测试,只有在所有测试都正确的情况下才进行提交。可以强制提交或在提交前跳过测试。

使用 --bin 选项,发送二进制文件而不是源代码。发送静态链接的二进制文件,因此可以使用您喜欢的操作系统和 crate。

在设置文件中,可以将其设置为默认发送二进制文件,或设置目标 triple。

如果已安装 UPX,则将自动使用它进行压缩。即使安装了也可以不使用。

示例:

$ cargo atcoder submit a --bin

cargo-atcoder-submit

默认情况下,尽量使用与评判环境不同的目标 x86_64-unknown-linux-musl。如果没有安装,可以使用以下命令进行安装。

$ rustup target add x86_64-unknown-linux-musl

安装

其他命令

cargoatcoder status

适当地获取并显示您自己的提交状态。实时更新。

cargo-atcoder-submit

cargoatcoder test

专门用于执行测试案例的命令。可以指定测试案例或进行详细执行。

$ cargo atcoder test <problem-id>

如果不指定其他内容,除了 problem-id 之外,还可以从问题文页面自动获取输入示例并对其进行测试。

$ cargo atcoder test <problem-id> [case-num]...

case-num 可以指定一个或多个输入示例的编号,如 123 等。添加 -v 可获得更多详细信息。

$ cargo atcoder test <problem-id> --custom

添加 --custom,将进入从标准输入读取的模式。

cargoatcoder gen-binary

$ cargo atcoder gen-binary <problem-id>

生成可提交为 Rust 代码的 problem-id 的二进制文件。submit--bin 选项生成的内容相同。

cargoatcoder result

$ cargo atcoder result [FLAGS] <submission-id>

显示提交结果的详细信息。如果没有 AC,则显示结果的分解。如果所有测试案例都已公开,则获取并显示所有测试案例的结果。

设置文件

设置文件将生成在 ~/.config/cargo-atcoder.toml 中。请随意修改(将来会进行说明)。

macOS 环境的情况下

设置文件将生成在 ~/Library/Preferences/cargo-atcoder.toml 中。

x86_64-unknown-linux-musl 针对的编译可以轻松执行,建议在 [atcoder] 表格中指定 use_cross = true。启用 use_cross 会使编译器使用 rust-embedded/cross 进行编译。请注意,可能需要 Docker,并且不要忘记安装 cross。

$ cargo install cross

另外,为了减轻执行二进制文件的大小,使用的 strip 命令在 macOS 上可能不起作用,因此建议安装 GNU 版strip。使用 Homebrew,可以执行以下命令进行安装:

$ brew install binutils

默认情况下,它将被安装到 /usr/local/opt/binutils/bin 中。您可以通过将 PATH 通过这里,或者将以下内容添加到 cargo-atcoder.toml[atcoder] 表格中,来指定 GNU 版 strip 的绝对路径。

[atcoder]
strip_path = "/usr/local/opt/binutils/bin/strip"

依赖关系

~17–37MB
~565K SLoC