6 个版本 (稳定)

2.1.0 2024年6月5日
2.0.1 2024年2月27日
1.0.0 2023年9月3日
0.2.0 2023年9月3日
0.1.0 2023年8月30日

命令行工具 中排名第 647

每月下载 30

MIT 许可证

50KB
1.5K SLoC

RNG 查询

crates.io docs.rs license

通过命令行轻松使用伪随机数并帮助我克服决策困难

rq "a, b, c"              # choose a, b or c at random
rq "2d20"                 # roll 2 20 sided dice and sum the result
rq "[1, 10)"              # random decimal between 1 and 10, not including 10
rq "a, b, c / shuffle"    # shuffle the list
rq "coin, d6, -5..5 / 2"  # 2 values from the list and evaluate the result
cat file.txt | rq "/10o"  # choose 10 lines keeping original order

命令行界面

# Install it
cargo install rng-query

# Basic usage
rq "your query"   # run a quick query
rq --help         # see help message

GitHub 发布中也有预编译的二进制文件。

使用 CLI,您可以从 stdin 读取条目。每行将是一个条目,但仅作为文本。您可以传递 -e 标志将每行作为单独的表达式进行评估。然后,您执行的查询将包含 stdin 中的条目。

输入文件将存储在内存中,略有开销。因此,非常大的文件可能会占用大量内存。这可以改进,但目前不在本项目的范围内。

语法

查询是从列表中选择条目并带有选项的过程。每个条目可以是一个表达式,也可以是纯文本。

条目由逗号 , 或换行符分隔。然后,查询结尾之前的所有内容(直到 /)都是选项。

选项

如果输入末尾没有选项,则默认为 / 1

选项的格式为 / [n] [flags],其中标志是单个字符。空格被忽略。 [n] 是非负整数或 all。如果没有指定,则默认为 1。

标志是单个字符,可以用空格分隔,且不能重复。标志如下:

  • r:允许选项重复。
  • o:在选择多个时保持原始顺序。

有一些具有更好名称的预设操作

  • / shuffle/ all 相同
  • / list/ all o 相同

表达式

每个条目可以是一个表达式,目前有 4 种表达式

子查询

另一个查询可以嵌套在 {} 之间。当选定时,将像根查询一样进行评估。这允许对某些选项表达更多偏好。

例如

"a, {b, c}"  # a query where 'a' has a 50% chance of being selected and 'b'
              # and 'c' split the other 50%, so 25% each

区间

选择一个随机数。在 [(]) 之间。边界由包含字符确定。方括号包含边界,而圆括号不包含。

两个数字之间代表下限和上限。如果它们由逗号 , 分隔,则被视为浮点数。如果它们用 .. 分隔,则至少有一个是浮点数。一些例子包括

"(1, 5)"   # decimal between 1 and 5, not included
"(1, 5]"   # decimal between 1 and 5, 5 included
"[1..5]"   # integer between 1 and 5
"[1..5.5)" # decimal betwen 1 and 5.5, not included

仅适用于整数的另一种语法是这种范围

"1..5"  # integer between 1 and 4
"1..=5" # integer between 1 and 5

负数在整数和浮点数中均受支持。

不支持开区间/半开区间,因为我不知道处理最大/最小值的好方法。

骰子

使用类似D&D的语法掷骰子。

[amount]d<sides>[!][select][modifier*]

d6        => roll a 6 sided die
2d6       => 2 x 6s dice and sum
2d20k     => 2 x 20s dice and keep the highest

面数也可以是 %,它等于 100

! 是爆炸的。如果掷出最大值,将再次掷骰子。

对于选择,可以添加 <k|d>[h|l][n]。如果未指定 n,则为 1。您可以有

  • kkh 来保留最高的 n 个骰子。
  • kl 来保留最低的 n 个骰子。
  • ddl 来丢弃最低的 n 个骰子。
  • dh 来丢弃 n 个最高的骰子。

修改器是 <+|->[m],用于将值添加或从总结果中减去。您可以指定多个。

在评估时,您将获得所有骰子掷出的总和。

还有许多其他方式可以扩展这种骰子表示法,但请勿将此工具用于您的D&D游戏,掷真实的骰子!如果您真的真的真的认为更多的修改器很有用,请提交问题。

硬币

掷硬币。很简单,只需写下 coin。最后,它等同于子查询 { heads, tails }

颜色

生成一个随机的RGB颜色。关键字是 color

UUID

生成一个随机的UUID(v4)。关键字是 uuid

关于伪随机性的说明

目前,随机性应该是统计上有效的,但不应该是加密安全的。如果您需要更改这一点,请提交问题。

依赖关系

~2.6–4MB
~65K SLoC