编程对拍助手 autohack-next

· · 科技·工程

这是一个高度自定义的竞技性编程 Hack 工具,由 Github 用户 gi-b716(洛谷用户 GavinCQTD)使用 Python 编写,并在 Github 上开源。持续更新中。

:::warning[免责声明]

本文的写作经过 autohack-next 的作者洛谷用户 GavinCQTD 同意。

以下为我与他的 QQ 聊天记录截图:

::::align{center}

\

:::

安装

方法 1

autohack-next 作为包发布在了 PyPI 上,使用 Python 包管理器安装即可。

具体的,如果你有 Python 且版本不小于 3.13,可以使用 Python 包管理器安装 autohack-next。

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": ""
}

:::

基础配置

基础设置,分别为:

错误数据目录设置

位于配置文件的 paths 条目中。

三个子条目分别代表输入、答案与错误输出的保存目录。前缀为 .autohack/datastorage/【日期】/【对拍编号】/,默认保存于该路径 ${id}/input${id}/answer${id}/output 文件中。其中 ${id} 为错误数据编号。

例如 202651323833 秒我在 D:/hack_room 中进行了对拍,想要查看对拍中第二组错误数据的错误输出。那么该文件的路径可能为 D:/hack_room/.autohack/datastorage/2026-05-13/23-08-33_abcdefgh/2/output

代码编译与运行设置

位于配置文件的 commands 条目中。

这个条目分为两个部分,compile(编译)和 run(运行)。

特别的,由于其实现方式,该命令可以支持非 C++ 文件的对拍,仅需修改 compilerun 子条目的指令即可。

Checker 自定义

位于配置文件的 checker 条目中。不建议修改

现仅支持全文比较输出与答案,忽略行末空格与文末换行。作者正在重构这一部分内容,敬请期待。

后记

如果您发现了 autohack-next 的 bug 或想提出修改建议,可以报告给作者。您可以选择以下三种渠道之一: