9 个版本
0.3.2 | 2024年7月4日 |
---|---|
0.3.1 | 2024年7月2日 |
0.3.0 | 2024年3月11日 |
0.2.2 | 2024年3月11日 |
0.1.0 | 2023年12月29日 |
#613 in 开发工具
每月下载量 439
130KB
2.5K SLoC
EZCP
一个用于轻松创建竞技编程任务的 Rust 框架。
功能
- 生成测试输入并将其保存到文件中。
- 生成正确输出。
- 可选的测试输入检查器。
- 如果有多个有效解,则创建解决方案检查器。
- 子任务依赖关系。
- 图生成器。
- 数组生成器。
- 添加部分解决方案并指定它应该通过哪些子任务。
- 自动将所有测试文件存档到 zip 文件中。
- 支持 CPS https://github.com/Zorz42/CPS
建议和错误报告:[email protected] 您也可以发起拉取请求。
最小示例:(更多完整示例请参阅 examples/
)
use rand::Rng;
use std::path::PathBuf;
fn main() {
// For the first task you get an array of even integers.
// You need to find the sum of all elements in the array minus the half of the maximum element.
let mut task = ezcp::Task::new("Coupon", &PathBuf::from("coupon"));
// Constraint: n = 1
let mut subtask1 = ezcp::Subtask::new(20);
// Add 5 tests, where an array is generated with length 1 and an even value between 0 and 1_000_000_000 (inclusive).
subtask1.add_test(5, ezcp::array_generator_custom(1, 1, |rng| rng.gen_range(0..=500_000_000) * 2));
// No additional constraints.
let mut subtask2 = ezcp::Subtask::new(50);
// Add some random tests.
subtask2.add_test(5, ezcp::array_generator_custom(1, 200_000, |rng| rng.gen_range(0..=500_000_000) * 2));
// Add 5 edge cases, where n is maximal.
subtask2.add_test(5, ezcp::array_generator_custom(200_000, 200_000, |rng| rng.gen_range(0..=500_000_000) * 2));
// Add subtasks to the task.
let subtask1 = task.add_subtask(subtask1);
let subtask2 = task.add_subtask(subtask2);
// Add dependencies (dependencies are only if constraints of a dependency are a subset of constraints of a subtask).
task.add_subtask_dependency(subtask2, subtask1);
// Finally, create the tests.
task.create_tests();
}
和 coupon/solution.cpp
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
long long sum=0;
int big=0;
while(n--){
int a;
cin>>a;
big=max(big,a);
sum+=a;
}
cout<<sum-big/2<<"\n";
}
依赖关系
~3.5–5MB
~89K SLoC