#problem #web #solving #helper #boj #geckodriver #github

应用 gaboja

加博佳:解决 BOJ 问题的 CLI 助手

5 个版本 (3 个破坏性更新)

0.4.1 2024 年 8 月 5 日
0.4.0 2024 年 7 月 3 日
0.3.0 2024 年 6 月 27 日
0.2.0 2024 年 6 月 5 日
0.1.0 2024 年 6 月 3 日

#137命令行实用程序

Download history 308/week @ 2024-06-03 7/week @ 2024-06-10 182/week @ 2024-06-24 130/week @ 2024-07-01 6/week @ 2024-07-29 128/week @ 2024-08-05

每月 134 次下载

MIT 许可证

78KB
2K SLoC

加博佳:解决 BOJ 问题的 CLI 助手

在开始使用加博佳之前

以下程序必须安装。

  • Firefox
    • 对于 Windows 或 macOS 用户,可以从 官方网站 下载并安装。
    • 对于 Debian 或 Ubuntu 用户,建议通过 mozillateam PPA 进行安装。
  • geckodriver
    • 如果已经安装了 Rust 工具链,则可以使用 cargo install geckodriver 进行安装。
    • 如果没有,则可以从 GitHub 发布版 下载可执行文件,并将其放置在包含在 PATH 的文件夹中(例如 /usr/local/bin 等),或者将保存可执行文件的文件夹添加到 PATH

安装方法

  • 如果使用 Rust 工具链安装,则可以使用相同的命令 cargo install gaboja 进行安装。
  • 如果没有,则可以从该仓库的发布页面下载最新的二进制文件,并像 geckodriver 一样进行安装。
    • 对于 Windows 构建的情况,可能会被识别为病毒或无法正常工作。在这种情况下,请创建 issue。
  • 在安装和运行之前,可能需要重新启动终端。

更新方法

  • 如果使用 cargo install gaboja 安装,则可以使用相同的命令进行更新。
  • 如果通过下载二进制文件进行安装,则只需重新下载二进制文件并覆盖即可。

使用方法

打开终端,在编写解决代码的文件夹位置运行 gaboja。稍等片刻,将出现 BOJ > 提示。在这里,输入 help 可以查看可用的命令。

<VAR> 是简单参数(例如:1234),<c=VAR> 是关键字参数(例如:c=1234)。关键字参数的顺序可以改变。

要包含空格的字符串,可以像这样输入:'abc def'c='abc def',也可以用 ' 替换 "。将 $VAR 放入参数位置,环境变量 VAR 将替换该位置。

# 지원하는 커맨드의 목록을 간략하게 알려 줍니다.
help

# 로그인 쿠키를 입력합니다. 이것을 먼저 실행하지 않으면 거의 모든 커맨드가 동작하지 않습니다.
# 내부적으로 브라우저를 띄우는 등의 동작이 포함되어 있어 수 초에서 수십 초 가량 걸릴 수 있습니다.
set credentials <BOJAUTOLOGIN> <ONLINEJUDGE>

# 제출 언어, 제출 파일명, 빌드 커맨드, 실행 커맨드, 커스텀 입력 파일명을 설정합니다.
# 제출 언어는 BOJ 제출 언어 이름과 정확히 일치하지 않으면 동작하지 않을 수 있습니다.
# 파일명과 커맨드는 `{}` 또는 `{c}`를 포함할 수 있습니다. (`c`는 임의의 1글자)
# 문제마다 다른 파일에 풀이를 작성하는 경우, `{}` 부분에 문제 번호를 삽입해 줍니다.
# 대회 문제의 경우 `{}`는 `(대회 번호)_(문제 번호)`, `{c}`는 `(대회 번호)c(문제 번호)`로 치환됩니다.
set lang <LANG>
set file <FILE>
set init <INITCMD>
set build <BUILD>
set cmd <CMD>
set input <INPUT>

# 문제를 로드하고 기본 정보를 출력합니다. 대회 문제는 (대회 번호)/(문제 번호)로 입력합니다.
# init 커맨드가 설정되어 있으면 init을 실행합니다. 문제 번호별 폴더나 소스 파일을 생성하는 데 사용할 수 있습니다.
prob <PROB>

# 여러 개의 변수를 boj.toml에 정의된 preset으로 교체합니다.
# credential이 변경되면 새로 로그인을 진행하고, 문제가 로드된 상태에서 init이 변경되면 새로운 init을 즉시 실행합니다.
# 문제에 따라 언어를 바꿔가면서 풀 때 유용합니다.
preset <NAME>

# 아래의 커맨드에서 매개변수를 생략하면 위의 set 커맨드로 설정된 값을 사용합니다.
# 자주 쓰는 값들을 모두 set 해놓고 build, run, test, submit 등으로 간단하게 사용할 수 있습니다.

# 주어진 커맨드를 사용하여 소스를 빌드합니다. (C++, Rust 등의 경우 사용)
# 예시: build 'cargo build --release'
build [BUILD]

# 주어진 커맨드를 사용하여 소스를 실행하고, 주어진 입력 파일을 넣어 결과를 확인합니다.
# 문제 유형에 따라 동작이 달라지거나 동작하지 않을 수 있습니다.
# 예를 들어, 인터랙티브 문제는 유저가 입력을 키보드로 넣는 방식으로 실행되고, 함수 구현 문제는 동작하지 않습니다.
# 예시: run i='input.txt' c='./target/release/main'
run [i=INPUT] [c=CMD]

# 문제의 예제 입력을 넣어 예제 출력과 일치하는지 확인합니다.
# 문제 유형에 따라 동작이 달라지거나 동작하지 않을 수 있습니다.
# 예를 들어, 인터랙티브 문제는 동작하지 않고, 스페셜 저지는 결과만 보여줍니다.
test [c=CMD]

# 소스를 문제에 제출하고 결과를 확인합니다.
submit [l=LANG] [f=FILE]

# 다른 터미널을 켤 필요 없이 임의의 셸 커맨드를 실행할 수 있습니다.
$ <shellcmd>

# firefox와 geckodriver를 끄고 gaboja를 종료합니다.
exit

boj.toml

在运行 gaboja 的文件夹中创建 boj.toml 文件,可以设置启动时自动执行的命令和 preset。

# start: multiline string
# 시작 시에 줄 단위로 자동으로 실행됩니다.
start = '''
set credentials $BUB_BOJAUTOLOGIN $BUB_ONLINEJUDGE
preset rust
'''

# preset: array of objects
# name은 필수 항목이며, 나머지는 모두 생략할 수 있습니다.
[[preset]]
name = 'rust'
init = ''
build = 'cargo oj && cargo build --release --bin main'
cmd = './target/release/main'
input = 'input.txt'
lang = 'Rust 2021'
file = 'src/bin/main.rs'

[[preset]]
name = 'py'
init = ''
build = ''
cmd = 'python src.py'
input = 'input.txt'
lang = 'Python 3'
file = 'src.py'

Ctrl+C 行为

在命令输入等待状态时,输入 Ctrl+C 就像输入 exit 一样关闭 gaboja。

在 build、run、test 过程中,输入 Ctrl+C 会中断由命令执行的程序的运行。gaboja 不会被中断。

在 submit 中进行评分时,输入 Ctrl+C 会中断评分并返回到命令输入等待状态。

依赖项

~14–27MB
~408K SLoC