CYaRon 文档
CYaRon 是洛谷团队开发的 OI 数据生成器,可以快速生成图、树等特殊数据, 参见 CYaRon:测试数据生成利器
graph = Graph.graph(n, m) # 生成一个n点,m边的无向图,边权均为1
graph = Graph.graph(n, m, directed=True, weight_limit=(5, 300)) # 生成一个n点,m边的有向图,边权范围是5到300
graph = Graph.graph(n, m, weight_limit=20) # 生成一个n点,m边的无向图,边权范围是1到20
graph = Graph.graph(n, m, weight_gen=my_func) # 生成一个n点,m边的无向图,使用自定义随机函数my_func的返回值作为边权
graph = Graph.graph(n, m, self_loop=False, repeated_edges=False) # 生成一个n点,m边的无向图,禁止重边和自环
# 以上的directed, weight_limit, weight_gen参数,对如下的所有函数都有效。
chain = Graph.chain(n) # 生成一条n个节点的链,是Graph.tree(n, 1, 0)的别名
flower = Graph.flower(n) # 生成一朵n个节点的菊花图,是Graph.tree(n, 0, 1)的别名
tree = Graph.tree(n) # 生成一棵n个节点的随机树
tree = Graph.tree(n, 0.4, 0.35) # 生成一棵n个节点的树,其中40%的节点呈现链状,35%的节点呈现菊花图状,剩余25%的节点随机加入
binary_tree = Graph.binary_tree(n) # 生成一棵n个节点的随机二叉树
binary_tree = Graph.binary_tree(n, 0.4, 0.35) # 生成一棵n个节点的二叉树,其中节点有40%的概率是左儿子,35%的概率是右儿子,25%的概率被随机选择
forest = Graph.forest(n, m) # 生成一个n点,m棵树的森林,其余参数与Graph.tree相同
graph = Graph.hack_spfa(n) # 生成一个n点,1.5*n(下取整)边的图,具有卡SPFA的特点
graph = Graph.hack_spfa(n, extra_edge=m) # 生成一个n点,1.5*n+m(下取整)边的图,具有卡SPFA的特点
# 下列方法生成的图保证连通
# 支持 self_loop, repeated_edges, weight_limit, weight_gen 参数,但不支持 directed,DAG 的 self_loop 默认为 False
graph = Graph.DAG(n, m) # 生成一个 n 点,m 边的有向无环图
graph = Graph.DAG(n, m, loop=True) # 生成一个 n 点,m 边的有向有环图
graph = Graph.UDAG(n, m) # 生成一个 n 点,m 边的无向联通图
print(graph.to_str()) # 输出这个图,以每条边u v w一行的格式
print(graph.to_str(shuffle=True)) # 打乱边的顺序并输出这个图
print(graph.to_str(output=Edge.unweighted_edge)) # 输出无权图,以每条边u v一行的格式
p = Polygon([(0, 0), (0, 4), (4, 4), (4 ,0)]) # 以这四个点生成四边形,注意点需要按照连线顺序
p.perimeter() # 周长
p.area() # 面积
print(p) # 输出多边形
p = Polygon.convex_hull(n) # 生成一个n个点的凸包
p = Polygon.simple_polygon(n) # 生成一个n个点的简单多边形
Vector.random(num=5, position_range=[10], mode=0)
# 参数 num:生成的向量个数。
# 参数 position_range:一个list。内有几个元素那么就是输出几维向量。
# 每个元素可以是一个二维整数(或实数)元组(min, max)表示每一维的取值是[min, max],
# 也可以是可以是一个整数(或实数)k,则范围是[0, k]。当该参数只有一个元素时,则生成的是一组数列而不是向量。
# 参数 mode:模式选择。0 为互相不重复的整数向量,1 为允许出现重复的整数向量(各维完全独立随机),2 为实数向量。
output = Vector.random()
# 默认值,随机生成5个[0, 10]的不重复数字的数列。
output = Vector.random(10, [(10,50)])
# 生成10个范围在[10, 50]之间的不重复数字数列。
output = Vector.random(30, [(10,50), 20])
# 生成30个第一维范围[10, 50]之间、第二维范围在[0, 20]之间的不重复的二维向量。
output = Vector.random(30, [(1,10), (1,10), (1,10)], 2)
# 生成30个每一维范围[1, 10]之间的三维实数向量。
output = Vector.random(30, [10], 1)
# 生成30个[0, 10]之间的随机数,当然肯定会有重复咯。
s = String.random(5) # 生成一个5个字母的单词,从小写字母中随机选择
s = String.random((10, 20), charset="abcd1234") # 生成一个10到20个字母之间的单词,从abcd1234共8个字符中随机选择
s = String.random(10, charset="#######...") # 生成一个10个字母的只有'#'和'.'组成的字符串,'#'的可能性是70%,'.'可能30%。
s = String.random(None, charset=["foo", "bar"]) # 从foo、bar两个单词中随机选择一个返回
# charset参数对于以下所有指令也有效。
s = String.random_sentence(5) # 生成一个5个单词的句子,以空格分割,第一个单词首字母自动大写,结尾有句号或感叹号,每个单词3到8个字母长
s = String.random_sentence((10, 20), word_separators=",;", sentence_terminators=None, first_letter_uppercase=False, word_length_range=(2, 10), charset="abcdefg")
# 生成一个10到20个单词的句子,以逗号或分号随机分割,第一个单词首字母不大写,结尾没有任何符号,每个单词2到10字母长,从abcdefg共7个字符中随机选择
# 以上所有参数,对于以下所有指令也有效
s = String.random_paragraph((3, 10))
# 生成一个3到10个句子的段落,句子之间以句号或感叹号分割,小句之间以逗号或分号分割,句子和小句结束后均接有一个空格,句子开头首字母大写而小句开头首字母不大写。生成句子的可能性为30%而小句的可能性为70%。
s = String.random_paragraph(6, sentence_joiners="|", sentence_separators=",", sentence_terminators=".?", termination_percentage=0.1)
# 生成一个6个句子的段落,句子之间以句号或问号号分割,小句之间以逗号分割,句子和小句结束后均接有一个"|"号,句子开头首字母大写而小句开头首字母不大写。生成句子的可能性为10%而小句的可能性为90%。
# 注意:如果您需要以两个空格分割单词,应该使用如下写法:
s = String.random_sentence(5, word_separators=[" "]) # 以两个空格分割单词
# 而不是:
s = String.random_sentence(5, word_separators=" ") # 这会导致从两个空格中随机选择一个,也就是只有一个空格。
s = String.random(5) # 生成一个5个字母的单词,从小写字母中随机选择
s = String.random((10, 20), charset="abcd1234") # 生成一个10到20个字母之间的单词,从abcd1234共8个字符中随机选择
s = String.random(10, charset="#######...") # 生成一个10个字母的只有'#'和'.'组成的字符串,'#'的可能性是70%,'.'可能30%。
s = String.random(None, charset=["foo", "bar"]) # 从foo、bar两个单词中随机选择一个返回
# charset参数对于以下所有指令也有效。
s = String.random_sentence(5) # 生成一个5个单词的句子,以空格分割,第一个单词首字母自动大写,结尾有句号或感叹号,每个单词3到8个字母长
s = String.random_sentence((10, 20), word_separators=",;", sentence_terminators=None, first_letter_uppercase=False, word_length_range=(2, 10), charset="abcdefg")
# 生成一个10到20个单词的句子,以逗号或分号随机分割,第一个单词首字母不大写,结尾没有任何符号,每个单词2到10字母长,从abcdefg共7个字符中随机选择
# 以上所有参数,对于以下所有指令也有效
s = String.random_paragraph((3, 10))
# 生成一个3到10个句子的段落,句子之间以句号或感叹号分割,小句之间以逗号或分号分割,句子和小句结束后均接有一个空格,句子开头首字母大写而小句开头首字母不大写。生成句子的可能性为30%而小句的可能性为70%。
s = String.random_paragraph(6, sentence_joiners="|", sentence_separators=",", sentence_terminators=".?", termination_percentage=0.1)
# 生成一个6个句子的段落,句子之间以句号或问号号分割,小句之间以逗号分割,句子和小句结束后均接有一个"|"号,句子开头首字母大写而小句开头首字母不大写。生成句子的可能性为10%而小句的可能性为90%。
# 注意:如果您需要以两个空格分割单词,应该使用如下写法:
s = String.random_sentence(5, word_separators=[" "]) # 以两个空格分割单词
# 而不是:
s = String.random_sentence(5, word_separators=" ") # 这会导致从两个空格中随机选择一个,也就是只有一个空格。