{"id":24811662,"url":"https://github.com/muzea-demo/random-data","last_synced_at":"2025-10-13T13:31:42.986Z","repository":{"id":57145577,"uuid":"165249537","full_name":"muzea-demo/random-data","owner":"muzea-demo","description":"随机数据产生姬","archived":false,"fork":false,"pushed_at":"2020-08-25T05:35:10.000Z","size":44,"stargazers_count":25,"open_issues_count":5,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-08-08T23:55:29.768Z","etag":null,"topics":["javascript","online-judge","random","template-string"],"latest_commit_sha":null,"homepage":"https://muzea-demo.github.io/random-data/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/muzea-demo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-01-11T13:38:46.000Z","updated_at":"2024-03-18T07:40:05.000Z","dependencies_parsed_at":"2022-09-05T13:00:45.227Z","dependency_job_id":null,"html_url":"https://github.com/muzea-demo/random-data","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muzea-demo%2Frandom-data","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muzea-demo%2Frandom-data/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muzea-demo%2Frandom-data/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/muzea-demo%2Frandom-data/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/muzea-demo","download_url":"https://codeload.github.com/muzea-demo/random-data/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":236353168,"owners_count":19135501,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","online-judge","random","template-string"],"created_at":"2025-01-30T13:15:48.872Z","updated_at":"2025-10-13T13:31:37.712Z","avatar_url":"https://github.com/muzea-demo.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003e随机数据产生姬\u003c/h1\u003e\n\n这是一个字符串拼接工具，可以用于OJ的测试数据生成， [点我在线体验](https://muzea-demo.github.io/random-data/)。\n\ncli 工具用法见 [cli使用指北](BIN.md)\n\n- [语法](#语法)\n  - [constraint 的语法](#constraint-的语法)\n    - [int类型](#int类型)\n    - [set类型](#set类型)\n  - [repeat 的语法](#repeat-的语法)\n    - [line类型](#line类型)\n    - [group类型](#group类型)\n- [案例](#案例)\n  - [普通案例](#普通案例)\n  - [sql测试数据](#sql测试数据)\n- [高级用法](#高级用法)\n- [更新日志](#更新日志)\n- [更新计划](#更新计划)\n- [其他](#其他)\n\n## 语法\n\n现在只支持两种语句\n\nconstraint 约束 限制变量取值\n\nrepeat 重复 会输出内容\n\n重要 每一个变量都需要有约束\n\n### constraint 的语法\n\n#### int类型\n```text\nconstraint 变量名 int 最小值 最大值\n```\n比如\n```text\nconstraint n int 1 233\n```\n变量名 最好都是字母（汉字也行）\n\n最小值和最大值可以是别的变量名\n\n区间是左闭右开\n\n#### set类型\n```text\nconstraint 变量名 set value1 value2 value3\n```\n比如\n```text\nconstraint 数字 set 一 二 三 四\n```\nvalue之间使用空格分隔\n\n### repeat 的语法\n\n#### line类型\n\nrepeat 重复次数 重复的内容\n\n重复次数 可以是一个数字，也可以是一个变量\n\n从紧跟 重复次数 的空格后面开始，到这一行结束都会被视为一个模板，我们使用 `${变量名}` 来引用一个变量\n\n比如\n```text\nrepeat 1 ${n}\n```\n亦或者\n```text\nrepeat 1 prefix string ${n}\n```\n都是被允许的\n\n#### group类型\n\n```text\nrepeat group 重复次数\nrepeat line\nrepeat line\nrepeat line\nend group\n```\n\n重复次数 可以是一个数字，也可以是一个变量\n\n## 案例\n\n### 普通案例\n\n举个例子，假如我们的数据是\n\n第一行输入一个n，代表接下来有n行数据，每行数据有三个数a b c\n\n那么就是\n```text\nrepeat 1 ${n}\nrepeat n ${a} ${b} ${c}\n```\n然后补充一下约束就好了\n\n再举一个例子\n\n假如我们的数据是这个样子的\n\n第一行是n，代表接下来有n组数据\n\n每组数据的第一行有三个数row min max，代表接下来有row个数字，每个数字的取值是 [min, max)\n\n那我们可以这样写\n\n```text\nconstraint n int 5 10\nconstraint row int 10 20\nconstraint min int 150 200\nconstraint max int 500 1000\nconstraint num int min max\nrepeat 1 ${n}\nrepeat group n\nrepeat 1 ${row} ${min} ${max}\nrepeat row ${num}\nend group\n```\n\n来一个set的例子\n\n```text\nconstraint 姓 set 赵 钱 孙 李\nconstraint 名 set 一 二 三 四\nrepeat 10 ${姓}${名}\n```\n\n当然，本质是个字符串拼接，也可以写别的东西\n\n### sql测试数据\n\n```text\nconstraint 姓 set 赵 钱 孙 李\nconstraint 名 set 一 二 三 四\nconstraint value int 10 1000\nconstraint status int 0 2\nrepeat 10 INSERT INTO list (name, value, status) VALUES (\"${姓}${名}\", ${value}, ${status});\n```\n\n**程序没有检查输入是否合法，所以需要你自己注意一下 :)**\n\n## 高级用法\n\n图、flags 这些的使用，参见 [高级用法](ADVANCED.md)\n\n## 更新日志\n\n参见 [更新日志](CHANGELOG.md)\n\n## 更新计划\n\n不存在的\n\n## 其他\n\n这个轮子的目的是设计一个足够简单的工具来生成数据，这也就意味着她不能支持所有的场景，也不能对数据做高度定制。\n\n如果有这种需求的话，应该自己写代码，或者使用类似 [CYaRon](https://github.com/luogu-dev/cyaron) 的工具。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuzea-demo%2Frandom-data","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmuzea-demo%2Frandom-data","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmuzea-demo%2Frandom-data/lists"}