Tuack-NG:新一代出题工具

· · 科技·工程

:::warning[Tuack 用户须知]{open} Tuack-NG 并非 Tuack 的直接替代品。两者功能存在差异,且 Tuack-NG 与 Tuack 在很多方面完全不兼容

但是,我们提供了迁移工具,可以在一定程度上减少迁移难度,您可以参见 Tuack-NG 的文档。 :::

(上面的图是可以点的,你发现了吗?)

Tuack-NG 是一套辅助 OI/ICPC 出题的工具包,旨在帮助出题人以更加便携的方式协作出题。它借鉴了 Tuack 的理念,并基于 Rust 进行了全新开发

快速上手

参照【Tuack-NG 文档 - 安装】安装 Tuack-NG,并参照剩余文档学习 Tuack-NG 的使用方式。

Tuack 使用者可以参照【Tuack-NG 文档 - 从 Tuack 迁移】,以将 Tuack 项目迁移到 Tuack-NG 项目。

功能一览

渲染题面

模拟赛还在使用 Word/Markdown/LaTeX 渲染题面吗?使用 Tuack-NG,你可以获得和 NOI 系列赛事几乎相同的 PDF,而只需编写 Markdown。(需要安装 Typst)

同时,您也可以将题面导出为 LOJ/UOJ 兼容的格式(洛谷 In Progress)。

另外,借助宏系统,您可以在题面中引用配置的数据范围/样例/表格,杜绝了修改一处却忘记另一处的风险。

测试

想测试自己的 Std,却必须手动运行/使用 CCR 或 Lemon 评测?赛时才发现自己想要卡掉的错解 AC 了?

使用 Tuack-NG,你可以编写测试用例来确保自己的数据(或样例)与你的预期一致。你可以编写多个正解,并设置预期为满分;你也可以编写暴力,并预期它们能获得适当的部分分。

同时,Tuack-NG 支持子任务,您可以将数据分为多个子任务,并在需要的情况下进行捆绑测试。

*该功能不能替代评测系统,赛后的评测不建议在 Tuack 上进行。

数据生成

还在手动/使用脚本生成数据吗?使用 Tuack-NG,你可以编写数据生成器并声明需要的参数,随后 Tuack-NG 将接管剩下的工作——为每个测试点(或样例)传入参数生成输入,并调用 Std 生成输出。

并且,Tuack-NG 会保留随机数种子,使得您的数据生成器无论任何时间与地点,都能产生相同的输出,除非您明令重置种子。

导出

在每个评测平台上(比如 Lemon,Arbiter)上都需要手动配置一遍数据?Tuack-NG 可以帮助你完成这项工作,以及下发文件的生成。

*目前支持平台较少,我们将在下一个版本进行扩充。

格式检查/格式化

Tuack-NG 可以检测一些题面中不符合规范的内容,并在可能的情况下进行修复。

批量修改配置文件

Tuack-NG 可以批量修改同一比赛日下/同一比赛下的各个子配置文件的字段,帮助您减少重复工作。

与 Tuack 对比

功能 Tuack Tuack-NG
渲染题面 ✅ 部分不常用/老旧目标没有迁移
测试 ✅ 支持更多语言,且数据点配置更完备
数据生成 ✅❌ 基于 Python,命令行难以使用 ✅ 基于 C++,功能完备,可以使用任何数据生成库(如 Testlib)
导出 ✅ 部分基于网络的功能没有迁移,但对应功能基本过时
格式检查/格式化 ✅❌ 基于词法分析/文法分析 + 正则 ✅ 基于 AST + 正则,覆盖更广
批量修改配置文件

兼容性

Tuack-NG 兼容 Linux 与 Windows。虽然开发者不常用 Windows,但我们会尽可能保证 Windows 下的兼容性和可用度。

以下是经过测试的机器:

同时,本工具可以在 macOS 上使用 Nix 通过构建,但是没有环境来进行测试。您可以进行尝试,但应当预期可能无法正常工作。

Tuack-NG 不兼容 在 Intel 芯片上运行的 macOS,因为工具链已经放弃对它的支持。

未来展望

未来,我们可能会使 Tuack-NG 能够成为 VSCode 插件,以面向更多的用户,并增加易用性。

同时,我们将会进一步扩充可渲染与导出的目标,并可能在未来引入插件系统,以允许用户在不依赖我们的开发节奏的情况下拓展 Tuack-NG 的功能。

致谢

许可证

Copyright (C) 2025-2026 Tuack-NG Develop Team.

本项目以 Affero General Public License 3.0 或更高版本获得许可。

对上游项目的版权声明详见 README。

:::align{center}

🌟 如果这个项目对你有帮助,欢迎点亮 Star ~

:::