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 在 命令行实用程序
每月 134 次下载
78KB
2K SLoC
加博佳:解决 BOJ 问题的 CLI 助手
在开始使用加博佳之前
以下程序必须安装。
- Firefox
- 对于 Windows 或 macOS 用户,可以从 官方网站 下载并安装。
- 对于 Debian 或 Ubuntu 用户,建议通过 mozillateam PPA 进行安装。
- geckodriver
- 如果已经安装了 Rust 工具链,则可以使用
cargo install geckodriver
进行安装。 - 如果没有,则可以从 GitHub 发布版 下载可执行文件,并将其放置在包含在
PATH
的文件夹中(例如/usr/local/bin
等),或者将保存可执行文件的文件夹添加到PATH
。
- 如果已经安装了 Rust 工具链,则可以使用
安装方法
- 如果使用 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