Project CYaRon
CYaRon Yet Another Random Olympic-iNformatics test data generator
By Luogu 項(xiàng)目地址: https://github.com/luogu-dev/cyaron
你是否遇到以下情況:
希望在5分鐘內(nèi)寫出一組隨機(jī)數(shù)據(jù),并方便地使用它們對(duì)拍幾個(gè)程序
希望生成一個(gè)合適的隨機(jī)圖或者樹,且有一定強(qiáng)度
希望生成一組隨機(jī)數(shù)列或者向量,且不能重復(fù)。
那么,你可以借助 CYaRon 和 Python ,來快速生成一組數(shù)據(jù)。目前支持的特性有:
建一個(gè)隨機(jī)圖(簡(jiǎn)單圖或者非簡(jiǎn)單圖,有向圖或無向圖,帶權(quán)圖或者無權(quán)圖)
建一個(gè)隨機(jī)樹(鏈狀、隨機(jī)樹、或者菊花圖,而且可以設(shè)定樹的強(qiáng)弱)
生成一組允許相同或者互相不同的多維向量(可以較快速度生成106組、范圍到109的向量或者數(shù)列)
根據(jù)函數(shù)解析式生成數(shù)列
生成一些隨機(jī)多邊形,并且可以求面積、周長(zhǎng)等
從字典生成隨機(jī)字符串、單詞、句子、段落
使用以上功能生成的數(shù)據(jù)和您其他地方下載的測(cè)試數(shù)據(jù)方便地進(jìn)行程序?qū)ε?/p>
快速上手指南
穩(wěn)定版本可以從pip獲取: pip install cyaron,在此之前,需要準(zhǔn)備好Python。
最新開發(fā)版可以克隆GitHub源代碼: git clone https://github.com/luogu-dev/cyaron.git
請(qǐng)您查看CYaRon文檔和CYaRon基本入門來學(xué)習(xí)如何使用CYaRon。
若您發(fā)現(xiàn)文檔中有缺漏,請(qǐng)?zhí)岢鯥ssue并暫時(shí)根據(jù)examples和源代碼進(jìn)行YY。
CYaRon基于Python。若您對(duì)Python不熟悉,可看快速入門教程。
之后計(jì)劃實(shí)現(xiàn)云Generator,即只需提供寫好的腳本以及std,上傳到服務(wù)器,即可下載一個(gè)測(cè)試數(shù)據(jù)的壓縮包,真正實(shí)現(xiàn)5分鐘生成一個(gè)測(cè)試數(shù)據(jù)!
希望各位大佬一起來協(xié)助改進(jìn)這個(gè)項(xiàng)目。希望這個(gè)項(xiàng)目可以幫助大家節(jié)省時(shí)間!
使用范例
#!/usr/bin/env python
from cyaron import * # 引入CYaRon的庫
_n = ati([0, 7, 50, 1E4]) # ati函數(shù)將數(shù)組中的每一個(gè)元素轉(zhuǎn)換為整形,方便您可以使用1E4一類的數(shù)來表示數(shù)據(jù)大小
_m = ati([0, 11, 100, 1E4])
# 這是一個(gè)圖論題的數(shù)據(jù)生成器,該題目在洛谷的題號(hào)為P1339
for i in range(1, 4): # 即在[1, 4)范圍內(nèi)循環(huán),也就是從1到3
test_data = IO(file_prefix="heat", data_id=i) # 生成 heat[1|2|3].in/out 三組測(cè)試數(shù)據(jù)
n = _n[i] # 點(diǎn)數(shù)
m = _m[i] # 邊數(shù)
s = randint(1, n) # 源點(diǎn),隨機(jī)選取一個(gè)
t = randint(1, n) # 匯點(diǎn),隨機(jī)選取一個(gè)
test_data.input_writeln(n, m, s, t) # 寫入到輸入文件里,自動(dòng)以空格分割并換行
graph = Graph.graph(n, m, weight_limit=5) # 生成一個(gè)n點(diǎn),m邊的隨機(jī)圖,邊權(quán)限制為5
test_data.input_writeln(graph) # 自動(dòng)寫入到輸入文件里,默認(rèn)以一行一組u v w的形式輸出
test_data.output_gen("D:\\std_binary.exe") # 標(biāo)程編譯后的可執(zhí)行文件,不需要freopen等,CYaRon自動(dòng)給該程序輸入并獲得輸出作為.out