Files

3.0 KiB
Raw Permalink Blame History

rand

一个快速、可组合的命令行随机数生成器,支持 6 种概率分布,原生管道语法。

安装

# 源码运行
bun install
bun run index.ts

# 构建独立二进制
bun run build          # → dist/rand
sudo cp dist/rand /usr/local/bin/

快速开始

rand                  # 0100 的随机整数
rand 50               # 050
rand 10 20            # 1020
rand -c 5             # 生成 5 个数
rand -f2              # 保留 2 位小数

选项

选项 说明
-c, --count <n> 生成个数,默认 1
-f[N] 小数位数:-f 默认 2 位,-f1 = 1 位,-f3 = 3 位
--float [N] -f 的长形式
-d, --dist <name> 概率分布,默认 uniform
-V, --version 版本信息
-h, --help 帮助信息
-- 之后所有参数视为位置参数(用于负数)

概率分布

分布 命令 参数 默认值
uniform rand [min] [max] 0, 100
normal rand -d normal [μ] [σ] 0, 1
binomial rand -d binomial [n] [p] 10, 0.5
poisson rand -d poisson [λ] 1
exponential rand -d exponential [λ] 1
hypergeometric rand -d hypergeometric [N] [K] [n] 100, 50, 10

采样算法

分布 算法
normal Box-Muller 变换(双值缓存)
binomial Bernoulli 试验求和;n > 10,000 时切换为正态近似
poisson Knuth 算法;λ > 100 时切换为正态近似(防止 exp 下溢)
exponential 逆 CDF 变换
hypergeometric 不放回抽样模拟

管道

stdout 输出纯数据,stderr 输出诊断信息,天然支持管道组合:

rand | xargs echo                    # 管道输出
echo 50 | rand                       # stdin 提供上限
echo "5 2" | rand -d normal -f1      # stdin 覆盖分布参数
rand -c 100 | sort -n | head -5      # 生成 100 个,取最小的 5 个

示例

# 正态分布:均值 100,标准差 15
rand -d normal 100 15 -f1

# 二项分布:20 次试验,成功概率 0.3,生成 5 个样本
rand -d binomial 20 0.3 -c 5

# 泊松分布:λ=3
rand -d poisson 3

# 指数分布:λ=0.5,保留 1 位小数
rand -d exponential 0.5 -f1

# 超几何分布:总体 100,成功 30,抽取 5 次
rand -d hypergeometric 100 30 5

# 负数范围(用 -- 分隔标志和参数)
rand -- -10 -5
rand -d normal 0 -1   # stddev 必须 > 0,会报错

## 项目结构

index.ts # 入口 src/ types.ts # 类型定义与默认值 help.ts # 帮助文本 args.ts # 参数解析与校验 stdin.ts # 管道输入读取 dist.ts # 分布采样器与调度 main.ts # 编排逻辑 tests/ # 单元测试 (bun test)


## 构建

```bash
bun run build       # → dist/rand(独立二进制,约 74MB

基于 Bun 构建,零外部依赖。