对OJ通用题目格式的建议

Advices on the general format of OJ Platform..

Preface

当今带伙们用的OJ平台五花八门的,什么 CF, 洛谷, AtCoder, Leetcode …
但大多数平台都不支持 Problems 的导出 (我感觉基本都是出于商业化独占性质),如果想要做题目迁移,没有官方提供的格式文件就只能靠自己去爬了,很费解的说= =,而且还没有TestCase…

据我了解,在此之前有人做过一个叫fps的题目格式,不过似乎流传不太广,基本就是在国内的OI训练平台用的多。时代变迁,现在的json格式远比以前的xml更加方便,所以我想提出一些关于OJ通用题目格式的建议。

OJ平台的管理 | 开发者们应该要统一一下题目格式,这样对于各平台之间题目的迁移和分享都会更加方便喵ヽ(*。>Д<)o゜

My Idea

My Idea (v1.0):

  • 支持 Markdown 格式的题目描述/输入输出描述/Hint
  • 支持 KaTeX 等等主流的数学公式渲染
  • 题目应该要有唯一标识符,格式为 平台名-题目ID

拿 A+B Problem 举例:

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
46
47
48
49
50
51
52
53
54
55
56
57
[
{
"title": "A+B Problem", // 题目标题
"unique_id": "tucoj-F001", // 题目唯一标识符, 格式为 平台名-题目ID
"author": "Team TUCOJ", // 题目作者
"tags": [ // 题目标签
"math",
"basic"
],
"difficulty": "easy", // 题目难度
"special_judge": false, // 是否有特殊评测
"hidden": false, // 是否显示在题库中
// 题目内容,具体应该封装在一个Box里
"ProblemBox": {
"time_limit": 1000, // 时间限制(ms)
"memory_limit": 256, // 内存限制(MB)
"description": "Calculate the sum of two integers.", // 题目描述
"input": "Two integers A and B (1 <= A, B <= 1000).", // 输入描述
"output": "Output the sum of A and B.", // 输出描述
"sample_input": [ // 样例输入,可以包含多个数据,按index顺序显示
{
"index": 1,
"data": "1 2"
},
{
"index": 2,
"data": "3 4"
}
],
"sample_output": [ // 样例输出,可以包含多个数据,按index顺序显示
{
"index": 1,
"data": "3"
},
{
"index": 2,
"data": "7"
}
],
"hint": "Just add them together.", // 题目提示
"source": "TUCOJ" // 题目来源
},
// TestCase, 用于评测的数据,可以用自动化工具解析然后生成测试文件
"TestCase":[
{
"index": 1,
"input": "1 2",
"output": "3"
},
{
"index": 2,
"input": "3 4",
"output": "7"
}
]
}
]

对于有换行的TestCase数据,可以用\n

1
2
3
4
5
{
"index": 1,
"input": "1 2\n3 4",
"output": "3\n7"
}

酱紫的话不仅能在线上平台运行,也能在离线环境下本地下测试!
在搭建后的客户端上之间导入题目文件,然后就可以愉快的刷题啦!(๑•̀ㅂ•́)و✧

可惜…应该没有多少平台会支持…因为要考虑他们的商业利益嘛…还有防止有人是“面向答案编程”…但还是希望有一天能够实现这样的格式化题目文件的导入导出吧 = =
BTW 以身作则,我会在自己写的OJ上开放题目的导出功能,支持上述格式的导出,当然只有认证的Admin才能查看喵,不然给看到答案了喵=w=

开源万岁!