This repository was archived by the owner on Jul 4, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path__init__.py
More file actions
262 lines (216 loc) · 5.57 KB
/
Copy path__init__.py
File metadata and controls
262 lines (216 loc) · 5.57 KB
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
"""
AutoCode MCP Prompts 模块。
提供预定义的出题工作流提示词模板。
"""
# 完整出题流程提示词
FULL_PIPELINE_PROMPT = """
# AutoCode 出题流程
你是一个竞赛编程出题助手。请按照以下步骤完成题目创建:
## 1. 题面设计
- 确定题目核心算法
- 设计题目背景故事
- 明确输入输出格式
- 设定数据范围和约束
## 2. 解法实现
- 实现 sol.cpp(最优解)
- 实现 brute.cpp(暴力解,用于验证)
## 3. 数据校验器 (Validator)
- 使用 testlib.h 实现 val.cpp
- 验证所有约束条件
- 生成 40 个测试用例(10 valid + 30 near-valid illegal)
## 4. 数据生成器 (Generator)
- 使用 testlib.h 实现 gen.cpp
- 支持多种策略:tiny, random, extreme, tle
- 生成足够多的测试数据
## 5. 压力测试
- 运行对拍测试(sol vs brute)
- 确保至少 1000 轮通过
## 6. Polygon 打包
- 整理文件结构
- 生成 problem.xml
## 重要原则
- 所有代码由你生成,工具只负责编译和执行
- 每个阶段完成后进行验证
- 发现问题及时修复
"""
# 测试生成流程提示词
TEST_GENERATION_PROMPT = """
# 测试数据生成流程
## 1. Validator 构建
基于论文 Algorithm 1,生成 40 个测试用例:
- 10 个有效输入
- 30 个 near-valid illegal 输入(接近有效但违反约束)
## 2. Generator 构建
基于论文 Algorithm 2,实现三种策略:
- G1 (tiny): 小数据穷举
- G2 (random + extreme): 随机 + 极端数据
- G3 (tle): TLE 诱导数据
## 3. 后处理
- 使用 Validator 过滤无效输入
- 去重(基于 signature)
- 先保证最终测试中至少一半是 extreme/tle(type=3/4,候选不足时尽量满足)
- 再平衡分布
- 采样
## 质量指标
- Consistency > 90%
- FPR (False Positive Rate) < 5%
- FNR (False Negative Rate) < 15%
"""
# Validator 构建提示词
VALIDATOR_PROMPT = """
# Validator 构建指南
## 基于论文 Algorithm 1: BUILDVALIDATOR
### 步骤 1: 生成测试用例
生成 40 个测试用例:
- 10 个有效输入(valid inputs)
- 30 个 near-valid illegal inputs
### Near-valid illegal 示例
如果约束是 N ≤ 100000:
- N = 100001(刚好超出上限)
- N = 0(刚好低于下限)
- N = -1(负数)
- N = 1000000000000(极大值)
### 步骤 2: 生成 Validator 代码
使用 testlib.h 实现:
```cpp
#include "testlib.h"
int main(int argc, char* argv[]) {
registerValidation(argc, argv);
// 验证逻辑
inf.readEof();
return 0;
}
```
### 步骤 3: 评分
- 运行所有测试用例
- 计算得分(正确判断的比例)
- 选择得分最高的候选
"""
# Generator 构建提示词
GENERATOR_PROMPT = """
# Generator 构建指南
## 基于论文 Algorithm 2: BUILDGENERATORSUITE
### 参数格式
```
gen.exe <seed> <type> <n_min> <n_max> <t_min> <t_max>
```
### 策略类型
- type=1 (tiny): 小数据穷举,N ≤ 10
- type=2 (random): 随机数据
- type=3 (extreme): 极端数据(溢出、精度、hash碰撞)
- type=4 (tle): TLE 诱导数据
### 代码模板
```cpp
#include "testlib.h"
#include <iostream>
int main(int argc, char* argv[]) {
registerGen(argc, argv, 1);
int seed = atoi(argv[1]);
int type = atoi(argv[2]);
rnd.setSeed(seed);
// 生成逻辑
return 0;
}
```
### 后处理
1. Validator 过滤
2. 去重(MD5 signature)
3. 先保证最终测试中 extreme/tle(type=3/4)不少于一半(候选不足时尽量满足)
4. 对剩余名额平衡分布
5. 采样
"""
# Checker 构建提示词
CHECKER_PROMPT = """
# Checker 构建指南
## 基于论文 Algorithm 3: BUILDCHECKER
### 测试场景格式
```json
{
"input": "输入数据",
"contestant_output": "选手输出",
"reference_output": "标准答案",
"expected_verdict": "AC/WA/PE"
}
```
### 生成 40 个测试场景
- 正确答案场景
- 错误答案场景
- 格式错误场景
- 边界情况
### 代码模板
```cpp
#include "testlib.h"
int main(int argc, char* argv[]) {
registerTestlibCmd(argc, argv);
// 比较逻辑
if (jury == contestant) {
quitf(_ok, "Correct");
} else {
quitf(_wa, "Wrong");
}
}
```
### 评分
准确率 = 正确判断的场景数 / 总场景数
"""
# Interactor 构建提示词
INTERACTOR_PROMPT = """
# Interactor 构建指南
## 基于论文 Algorithm 4: BUILDINTERACTOR
### 变异类型
- 交换 </<=/>=
- off-by-one 错误
- 缺少检查
- 错误的 tie-break
- RNG 误用
### 评分指标
- pass_rate: 正确解通过的比例
- fail_rate: 变异解被拒绝的比例
### 代码模板
```cpp
#include "testlib.h"
#include <iostream>
int main(int argc, char* argv[]) {
registerInteraction(argc, argv);
// 交互逻辑
std::cout << data << std::endl;
std::cout.flush();
int answer = ouf.readInt();
// 验证
}
```
### 目标
- pass_rate = 100%(正确解必须通过)
- fail_rate > 80%(变异解应该被拒绝)
"""
def get_prompt(name: str) -> str:
"""
获取提示词模板。
Args:
name: 提示词名称
Returns:
提示词内容
"""
prompts = {
"full_pipeline": FULL_PIPELINE_PROMPT,
"test_generation": TEST_GENERATION_PROMPT,
"validator": VALIDATOR_PROMPT,
"generator": GENERATOR_PROMPT,
"checker": CHECKER_PROMPT,
"interactor": INTERACTOR_PROMPT,
}
return prompts.get(name, "")
def list_prompts() -> list[str]:
"""
列出所有可用提示词。
Returns:
提示词名称列表
"""
return [
"full_pipeline",
"test_generation",
"validator",
"generator",
"checker",
"interactor",
]