3 个版本 (破坏性更新)
0.4.0 | 2021 年 7 月 31 日 |
---|---|
0.3.0 | 2020 年 9 月 19 日 |
0.2.0 | 2020 年 5 月 10 日 |
#1343 in 命令行工具
1MB
2K SLoC
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
源文件是
- 如果正在参加正在进行的竞赛,则根据问题列表
- 根据竞赛顶部的得分表获得的分数
创建。如果竞赛开始前且得分表不在顶部页面上,则请使用 -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
默认情况下,尽量使用与评判环境不同的目标 x86_64-unknown-linux-musl
。如果没有安装,可以使用以下命令进行安装。
$ rustup target add x86_64-unknown-linux-musl
安装
其他命令
cargoatcoder status
适当地获取并显示您自己的提交状态。实时更新。
cargoatcoder test
专门用于执行测试案例的命令。可以指定测试案例或进行详细执行。
$ cargo atcoder test <problem-id>
如果不指定其他内容,除了 problem-id
之外,还可以从问题文页面自动获取输入示例并对其进行测试。
$ cargo atcoder test <problem-id> [case-num]...
case-num
可以指定一个或多个输入示例的编号,如 1
,2
,3
等。添加 -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