#解决方案 #问题 #提交 #网络 #BOJ #Cargo #评委

app cargo-boj

Cargo-BOJ: 测试和提交BOJ(Baekjoon在线评委)问题的解决方案

10个版本 (5个重大更新)

0.6.0 2023年12月12日
0.5.1 2023年12月7日
0.5.0 2023年11月21日
0.4.0 2023年8月31日
0.1.0 2023年3月23日

#197Cargo插件

Download history 14/week @ 2024-03-29 4/week @ 2024-04-05

每月 55 次下载

MIT 许可协议

30KB
685 代码行

Cargo-BOJ

测试和提交BOJ(Baekjoon在线评委)问题的解决方案。

默认设置适用于Rust解决方案,但也支持非Rust使用。

先决条件

稳定的Rust工具链。

安装

cargo install cargo-boj

您可以使用相同的命令更新到最新版本。

使用方法

testsubmit 命令的默认用法假定在crate根目录下运行了 cargo boj,并且解决方案文件是 src/main.rssrc/bin/main.rs。如果两者都存在,则 src/main.rs 优先。

登录

由于reCaptcha的保护,使用ID和密码登录BOJ无法自动化。因此,用户需要首先在自己的浏览器上登录,然后将相关的cookie复制到 cargo-boj 中。

$ cargo boj login
First log in to www.acmicpc.net on your browser with auto-login enabled.
Then copy and paste two cookies for www.acmicpc.net from your browser.
bojautologin: 3b1adXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
OnlineJudge: n00lXXXXXXXXXXXXXXXXXXXXXX
Cookies set.

$ cargo boj login --bojautologin=3b1adXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX --onlinejudge=n00lXXXXXXXXXXXXXXXXXXXXXX

测试

使用给定问题的示例测试用例测试您的代码。

  • 测试用例一次性获取并缓存。可以使用 -r, --refresh 标志刷新缓存。
  • 如果测试失败(错误答案),将提供彩色差异。
  • 如果以下条件之一成立,退出状态为1:
    • 问题不是“特殊评委”、“得分”、“两步”或“交互式”,并且
    • 输出与预期输出不匹配,或者程序以运行时错误结束。
  • 提供了 -p, --spj-prompt 标志,这样您可以在链式 testsubmit 命令的同时,仍然避免提交显然不正确的SPJ问题的解决方案。
# Test main.rs against example test cases of problem 1000
$ cargo boj test 1000

# Test src/bin/sol_1000.rs
$ cargo boj test 1000 --bin=sol_1000

# Test 1000.py
$ cargo boj test 1000 --cmd='python 1000.py'

# Test and submit problem 1008, but with user confirmation
$ cargo boj test 1008 --spj-prompt && cargo boj submit 1008

提交

使用提供的凭据,通过 cargo boj login 将您的代码提交到 BOJ。

默认语言为 Rust 2021(语言 ID 113)。要提交其他语言的解决方案,请参阅BOJ 帮助:语言信息

# Submit main.rs as Rust 2021 solution to problem 1000. Code open setting follows account preference
$ cargo boj submit 1000

# Submit sol_1000.rs as Rust 2018 solution, with code closed
$ cargo boj submit 1000 --path=src/bin/sol_1000.rs --lang=94 --code-open=n

在 BOJ 竞赛中使用

当您在竞赛中打开一个问题时,地址将类似于 https://www.acmicpc.net/contest/problem/963/1。然后这个问题的问题 ID 是 963/1。您可以在使用 cargo boj testcargo boj submit 时使用此 ID 替换 "问题 ID"。

更新日志

  • 0.6.0
    • 将 "两步" 和 "交互式" 问题的处理方式更改为根本不运行示例测试
    • cargo boj test 添加 -r, --refresh 选项
  • 0.5.1
    • 修复有关 -p 参数不遵循 bpaf 规则的问题
  • 0.5.0
    • 将 "得分" 问题视为与特别评判相同
    • cargo boj test 添加 -p, --spj-prompt 选项
  • 0.4.0
    • 修复当 cargo boj 退出时,某些错误消息不显示的问题
  • 0.3.3
    • 修复当要运行的文件是 src/main.rs 时,cargo boj test 尝试运行不正确的可执行文件名的问题
  • 0.3.1
    • 修复在 Windows 上无法找到构建的可执行文件时 cargo boj test 失败的问题
  • 0.3.0
    • 添加对 BOJ 竞赛的支持

依赖关系

~9–24MB
~350K SLoC