编程对拍助手 autohack-next
这是一个高度自定义的竞技性编程 Hack 工具,由 Github 用户 gi-b716(洛谷用户 GavinCQTD)使用 Python 编写,并在 Github 上开源。持续更新中。
:::warning[免责声明]
本文的写作经过 autohack-next 的作者洛谷用户 GavinCQTD 同意。
以下为我与他的 QQ 聊天记录截图:
::::align{center}
\
:::
安装
方法 1
autohack-next 作为包发布在了 PyPI 上,使用 Python 包管理器安装即可。
具体的,如果你有 Python 且版本不小于
Python 包管理器有很多种,这里以 pip 为例;如果你需要安装正式版 autohack-next,可以在终端输入:
python -m pip install autohack-next
如果你想要体验预发布版本,则键入:
python -m pip install -i https://test.pypi.org/simple/ autohack-next
方法 2
可以前往 Github 的 Assets 条目下下载,若国内访问过慢,也可通过这里下载(密码为 hl82)。
解压后的文件以 autohack 的可执行文件为主体。可将其放到系统环境变量下便于使用。
使用
在待对拍目录的终端中运行如下命令:
autohack
或:
python -m autohack
第一次运行时,会在当前目录生成 .autohack 文件夹并退出。
如果运行报错,请检查是否按照安装方法成功安装,如果确认可以私信作者报告问题。
在成功运行后,请查看并调整 .autohack/config.json 中设置后再次运行(详细调整方式见下文)。
:::info[]{open}
默认设置中,source.cpp 是待检查解法,std.cpp 是保证正确的解法,generator.cpp 是数据生成器。三者都不需要使用文件输入或输出。
三个文件需要建立在同一目录下,在该目录的终端中键入 autohack 使用。
:::
注意在运行 autohack 的时候你需要保证 g++ 文件在系统环境变量中,或可以通过修改编译命令导入 g++ 路径。
如果使用其它编译器(如 clang++)只需修改 config.json 中的设置。
:::align{center}
\ autohack-next 在使用时的样子 :::
配置文件修改
如果您认为使用传统题目的对拍已经满足您的需求,可以选择性跳过本节内容。
配置文件即对拍目录下 .autohack/config.json 文件。
:::info[默认值]
{
"maximum_number_of_data": 0,
"time_limit": 1000,
"memory_limit": 256,
"error_data_number_limit": 1,
"paths": {
"input": "$(id)/input",
"answer": "$(id)/answer",
"output": "$(id)/output"
},
"commands": {
"compile": {
"source": [
"g++",
"source.cpp",
"-o",
"source",
"-O2"
],
"std": [
"g++",
"std.cpp",
"-o",
"std",
"-O2"
],
"generator": [
"g++",
"generator.cpp",
"-o",
"generator",
"-O2"
]
},
"run": {
"source": [
"./source"
],
"std": [
"./std"
],
"generator": [
"./generator"
]
}
},
"checker": {
"name": "builtin_basic",
"args": {}
},
"command_at_end": ""
}
:::
基础配置
基础设置,分别为:
maximum_number_of_data:代表对拍的数据组数;特别的,0 表示无限制。默认值为0 。time_limit:代表每组数据的时间限制,单位为毫秒(ms)。默认值为1000 。memory_limit:代表每组数据的空间限制,单位为兆字节(MB)。默认值为256 。error_data_number_limit:代表对拍的错误数据组数上限,即在错误数据组数超过该值时结束对拍;特别的,0 表示无限制。默认值为1 。command_at_end:代表对拍结束之后执行的控制台命令。例如我想使对拍结束后退出控制台,可以在其中填入exit。默认值为空。
错误数据目录设置
位于配置文件的 paths 条目中。
三个子条目分别代表输入、答案与错误输出的保存目录。前缀为 .autohack/datastorage/【日期】/【对拍编号】/,默认保存于该路径 ${id}/input、${id}/answer 与 ${id}/output 文件中。其中 ${id} 为错误数据编号。
例如 D:/hack_room 中进行了对拍,想要查看对拍中第二组错误数据的错误输出。那么该文件的路径可能为 D:/hack_room/.autohack/datastorage/2026-05-13/23-08-33_abcdefgh/2/output。
代码编译与运行设置
位于配置文件的 commands 条目中。
这个条目分为两个部分,compile(编译)和 run(运行)。
compile条目中的三个子条目source、std和generator分别代表待检查解法、保证正确的解法与数据生成器的编译命令。例如数据生成器的编译指令就是generator子条目中的若干元素顺次拼接,即默认值g++ generator.cpp -o generator -O2。run条目的三个子条目与compile条目类似,分别代表待检查解法、保证正确的解法与数据生成器的运行命令。
特别的,由于其实现方式,该命令可以支持非 C++ 文件的对拍,仅需修改 compile 与 run 子条目的指令即可。
Checker 自定义
位于配置文件的 checker 条目中。不建议修改。
现仅支持全文比较输出与答案,忽略行末空格与文末换行。作者正在重构这一部分内容,敬请期待。
后记
如果您发现了 autohack-next 的 bug 或想提出修改建议,可以报告给作者。您可以选择以下三种渠道之一:
- 在本文评论区中评论。
- 洛谷私信作者。
- 在 Github 上提出 issue。