前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CYaRon — OI 测试数据生成利器

CYaRon — OI 测试数据生成利器

作者头像
Skykguj
发布2022-09-09 12:04:31
1.8K0
发布2022-09-09 12:04:31
举报
文章被收录于专栏:Skykguj 's BlogSkykguj 's Blog

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

常用模板

代码语言:javascript
复制
#!/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 完成的数据生成器代码如下:

代码语言:javascript
复制
#!/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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021 年 12 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用文档
  • 常用模板
    • 模板使用示例
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档