项目 / 计划:tuack-ng

概述

tuack-ng 项目是重构后的 tuack 项目,旨在提供更加高效和轻量的出题体验。

项目地址:https://github.com/Pulsar33550336/tuack-ng

目前进度效果展示

效果1


效果2


效果3


渲染速度展示

图中渲染的是 CSPS 2024 试题。

进度 / 计划

正在进行 / 即将开始的子项目

  1. 整个模块的配置文件等数据结构的定义;项目基础(长期)
  • 将会提供 config 模块作为配置修改的前端。
  • 已经配置好 log 框架。
  • 已经配置好整个项目的命令行前端。
  • 未来可能支持 i18n。
  • ……
  1. 渲染(render 子模块)
  • 目前只有 noi 目标模板,来自 CNOI 项目,后期将尝试迁移其他内容。
  • 目前已经支持可合并列表等特性。
  • 已经支持多个渲染目标模板。
  • 已经支持所有功能和 CNOI 项目的拓展语法,基本完成。
  1. 测试(test 子模块)
  • 主要用来进行出题期间的代码测试,类似于 Polygon 的 Solutions。
  • 不会设计拿来当评测机,需导出到评测器配置。
  • 基本完成,尚不支持 spj, 交互 等题型,不支持 subtask,捆绑测试。

未开始的子项目

  1. 导入导出(import & dump
  • 将会支持导入 tuack 的配置文件,导出到评测器配置和 OJ。
  1. 小工具(tools
  • 包括格式化,格式检查,等等等等。

里程碑

0.1.0

  • 目标:基本完备的渲染和工程文件夹结构,完备的 CI 构建工作流,基本完备的基础设施(比如 wiki)

部分技术细节

  1. 目标语言:Rust。
  2. 目标渲染框架:typst。
  3. 格式转换库:魔改后的 markdown-ppp 项目,已经开源 https://github.com/Pulsar33550336/markdown-ppp

致谢

感谢 MrPython 的 CNOI tuack 模板。

开源协议

由于采用了 CNOI 中的内容,与 MIT 协议开源的 markdown-ppp 项目,综合下来,使用了 AGPL 3.0 协议。

附录

顺手写一下目前工程文件夹的计划吧,备忘:

注意,这个东西可能不准。

结构:比赛->比赛日->赛题

比赛配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"version": 3,
"folder" : "contest",
"name" : "试题名称",
"subdir" : [
"子试题1",
"子试题2",
],
"title" : {
"zh-cn" : "标题"
},
"short title" : {
"zh-cn" : "副标题"
}
}

比赛日配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"version": 3,
"folder" : "day",
"name" : "比赛日名称",
"subdir" : [
"试题1",
"试题2"
],
"title" : {
"zh-cn" : "场次"
},
"compile" : {
"cpp" : "-O2 -std=c++14",
"c" : "-O2 -std=c11",
},
"start time" : [2024,10,26,14,30,0],
"end time" : [2024,10,26,14,30,0]
}

试题配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
{
"version": 3,
"folder" : "problem",
"type" : "program/output/interactive",
"name" : "赛题名称",
"title" : {
"zh-cn" : "用于试题标题的中文名称"
},
"time limit" : 1.0,
"memory limit" : "512 MiB",
"partial score" : false,

"samples" : [
{
"id" : 1,
"input" : "a.in", // 留空默认找 {id}.in
"output" : "a.ans" // 留空默认找 {id}.ans
},
{
"id" : 2,
"input" : "b.in", // 留空默认找 {id}.in
"output" : "b.ans" // 留空默认找 {id}.ans
}
],
// "args" : {
// "n" : 1000
// },
"data" : [
{
"id" : 1,
"score": 50, // 是否等分会实时计算
"input" : "a.in", // 留空默认找 {id}.in
"output" : "a.ans" // 留空默认找 {id}.ans
},
{
"id" : 2,
"score": 50,
"input" : "b.in", // 留空默认找 {id}.in
"output" : "b.ans" // 留空默认找 {id}.ans
}
],
// "pretest" : [],
// "tests" : {}
}

试题目录结构:

  • img: 存储图片
  • sample: 存储样例
  • pretest: 存储预测试数据
  • data: 存储测试数据
  • statement.md: 存储题面

项目 / 计划:tuack-ng
http://pulsar33550336.github.io/2025/12/10/项目-计划:tuack-ng/
作者
Pulsar
发布于
2025年12月10日
许可协议