# OJDataMakerTools **Repository Path**: webturing/OJDataMakerTools ## Basic Information - **Project Name**: OJDataMakerTools - **Description**: AOJ数据生成器项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-04-18 - **Last Updated**: 2025-12-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AOJ数据生成器项目 OJDataMakerTools ## 项目目的 - OJ是基于测试数据的代码正确性的黑盒验证,大部分题目设计后,需要设计较强的测试数据来验证算法的正确性和效率,所以设计一个高效的AOJ后台数据生成器非常迫切 - 传统的测试数据生成方法都是手动实现,工作重复、效率低还容易出错 - 本项目的目标是设计一个高效的AOJ后台数据生成器,能够在样例数据和正确代码的基础上自动生成强度满足要求的测试数据,减少手动工作,提高效率和准确性 ## 系统架构 ### 核心模块 1. **输入模块** - 标准程序 Main.java/Main.cc - 测试数据的组数,一般是10-20组方便对接OI模式 - 数据范围 - 样例数据的分布:等差 等比 随机 2. **数据生成模块** - 提供多种数据结构的生成 - 支持不同的数据分布类型 - 可扩展的生成器接口 3. **输出模块** - 自动生成测试输入文件(.in) - 利用正确程序自动生成对应的输出文件(.out) - 统一的文件命名和路径管理 ### 主要类结构 ``` zj.ojd ├── app/ │ ├── ConcreteFormatDataMaker.java # 具体的数据生成实现 │ └── Main.java # 示例正确程序 ├── ds/ # 数据结构 │ ├── BinaryTree.java │ ├── DirectedGraph.java │ ├── Edge.java │ ├── Graph.java │ ├── Tree.java │ ├── UnDirectedGraph.java │ └── Vertex.java ├── format/ │ └── FormatDataMaker.java # 数据生成抽象类 ├── io/ # 输入输出处理 │ ├── InputFileMaker.java # 输入文件生成器 │ ├── OutputFileMaker.java # 输出文件生成器 │ └── RedirectTools.java # 输入输出重定向工具 ├── main/ │ └── MainEntry.java # 程序入口 └── util/ ├── GraphTool.java ├── Printer.java └── RandTools.java # 随机数据生成工具 ``` ## 功能特点 ### 数据生成能力 - **随机数生成**:支持不同区间的整数、浮点数随机生成 - **字符串生成**:支持随机字符串、字母数字组合、指定字符集的字符串 - **日期生成**:支持指定时间范围的随机日期 - **数据结构生成**: - 图(有向图、无向图) - 树(普通树、二叉树) - 其他常用数据结构 ### 数据分布支持 - **等差分布**:在指定区间内生成等差数列数据 - **等比分布**:在指定区间内生成等比数列数据 - **均匀随机分布**:在指定区间内均匀随机分布数据 ### 扩展性 - 基于抽象类和接口的设计,方便扩展新的数据生成类型 - 支持通过反射机制动态加载数据生成器 - 模块化设计,各功能模块解耦 ## 使用方法 ### 基本使用流程 1. **创建数据生成类**:继承`FormatDataMaker`抽象类,实现`make`方法 2. **配置参数**:设置测试文件数量、题目编号等 3. **运行主程序**:执行`MainEntry`类 ### 示例 ```java public class ConcreteFormatDataMaker extends FormatDataMaker { public ConcreteFormatDataMaker() { super.count = 10; // 测试文件对数 super.path += "2597"; // 题目的OJ序号 } public void make(String pathname) { // 实现具体的数据生成逻辑 } } ``` ### 运行方式 1. 编译项目:`javac -d bin src/**/*.java` 2. 运行程序:`java -cp bin zj.ojd.main.MainEntry` ## 工作原理 1. **输入文件生成**: - 根据配置的测试文件数量,生成对应数量的输入文件 - 每个输入文件的内容由具体的数据生成逻辑决定 - 支持不同的数据分布和数据类型 2. **输出文件生成**: - 利用`RedirectTools`将标准输入重定向到生成的输入文件 - 运行正确的程序(`Main.java`) - 将程序的标准输出重定向到对应的输出文件 ## 项目优势 1. **高效性**:自动化生成测试数据,大大减少手动工作 2. **灵活性**:支持多种数据类型和分布,满足不同题目的需求 3. **可扩展性**:模块化设计,方便扩展新的数据生成功能 4. **准确性**:基于正确程序生成输出,确保测试数据的正确性 5. **易用性**:简单的配置和使用流程,降低使用门槛 ## 应用场景 - 在线评测系统(OJ)的测试数据生成 - 算法竞赛的题目测试数据准备 - 软件开发中的单元测试数据生成 - 教学中的算法测试数据准备 ## 未来改进方向 1. 增加更多数据结构的支持 2. 优化随机数据生成算法 3. 提供图形化界面 4. 支持更多编程语言的正确程序 5. 增加数据生成的可视化功能 6. 支持数据强度的评估和调整