CYaRon Yet Another Random Olympic-iNformatics test data generator
By Luogu
出过 OI 题目的都知道,造数据如果没有掌握一些方法,会非常的头疼。
CYaRon 是一个用于生成随机测试数据的 Python 库,内置多种数据结构,例如随机图、树、向量、字符串、数列、多边形等,可以帮助生成有一定强度的测试数据。
CYaRon 基于 Python 语言,所以推荐先学习 Python 后再使用,官方快速入门教程:Github
使用文档
官方文档已经非常完善,请参考官方文档使用 CYaRon:https://github.com/luogu-dev/cyaron/wiki
常用模板
#!/usr/bin/env python
from cyaron import * # 引入CYaRon的库
# 这里常用于写数据范围,一般链表长度为测试数据的数量
_n = ati([0, 7, 50, 1E4]) # ati 函数将数组中的每一个元素转换为整形,方便您可以使用 1E4 一类的数来表示数据大小
for i in range(1, 4): # 即在 [1, 4) 范围内循环,也就是从 1 到 3,生成 3 组测试数据。
test_data = IO(file_prefix = "Example", data_id = i) # 生成 Example[1|2|3].in/out 三组测试数据
"""
如果不使用参数 file_prefix ,只使用 data_id ,则不会生成文件。
而使用了 file_prefix 和 data_id 之后,若从 0 开始命名,则 0 不会显示,只是显示 .in 和 .out。
"""
# file_prefix 是输入/输出文件的前缀名
n = _n[i] # 获取该组数据的数据范围
# 这里填写输入数据生成程序的主体
test_data.output_gen("D:\\std_binary.exe") # 标程编译后的可执行文件,需要保证正确,不需要 freopen 等,CYaRon 自动给该程序输入并获得输出作为 .out
# 这里填写输出数据生成程序的主体,若使用 test_data.output_gen,则不需要编写
模板使用示例
以洛谷 P1339 为例生成一组测试数据。这个数据有 $3$ 个测试点,每个测试点包括一个 $n$ 个结点、$m$ 条边的无向图,以及起点 $s$ 和终点 $t$。各个测试点的数据规模有梯度。
使用 Python 和 CYaRon 完成的数据生成器代码如下:
#!/usr/bin/env python
from cyaron import * # 引入CYaRon的库
_n = ati([0, 7, 50, 1E4]) # ati函数将数组中的每一个元素转换为整形,方便您可以使用1E4一类的数来表示数据大小
_m = ati([0, 11, 100, 1E4])
# 这是一个图论题的数据生成器,该题目在洛谷的题号为P1339
for i in range(1, 4): # 即在[1, 4)范围内循环,也就是从1到3
test_data = IO(file_prefix="heat", data_id=i) # 生成 heat[1|2|3].in/out 三组测试数据
n = _n[i] # 点数
m = _m[i] # 边数
s = randint(1, n) # 源点,随机选取一个
t = randint(1, n) # 汇点,随机选取一个
test_data.input_writeln(n, m, s, t) # 写入到输入文件里,自动以空格分割并换行
graph = Graph.graph(n, m, weight_limit=5) # 生成一个n点,m边的随机图,边权限制为5
test_data.input_writeln(graph) # 自动写入到输入文件里,默认以一行一组u v w的形式输出
test_data.output_gen("D:\\std_binary.exe") # 标程编译后的可执行文件,不需要freopen等,CYaRon自动给该程序输入并获得输出作为.out