GoGPT Best VPN GoSearch

OnWorks 网站图标

Dicelab - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 Dicelab

这是可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行的命令 Dicelab,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


骰子实验室 - 滚动和检查骰子滚动方案

概要


骰子实验室 [选项] [-F ]

配置


-h, - 帮帮我, -?
打印帮助信息

- 版, -v
显示版本号

--计算, -c
计算分布

- 卷, -r
按照规定掷骰子。 如果没有请求其他操作,这也将被使用

--评估, -e
多次重新滚动并总结结果以获得统计分布
价值观

- 数数, -n
指定 --eval 的重新滚动次数,默认为 10000

--打印树, -p
打印解析树(用于调试目的)

-f
从文件而不是从标准输入读取方案描述

商品描述


Dicelab 从文件中读取骰子滚动方案的描述,如果没有文件则从 stdin 中读取
指定然后滚动或检查此方案。

主页


可以使用 'd' 操作符制作单个模具辊,后跟上的面数
要滚动的骰子。 例如,d6 将掷出一个六面骰子,而 d2 将掷硬币。
表达式可以由标准算术运算符修改。 d10-1 将产生一个值
0 到 9(含)之间。 要掷出多个相同类型的骰子,请使用
重复运算符“#”。 2#d6 将掷出两个六面骰子; 这与 2*d6 不同,
它只掷一个骰子,但将结果乘以 2 或 6dXNUMX,这将导致
语法错误。 为了得到两个六面骰子的和,做 sum(2#d6)。

句法


::=
-?[0-9]+
::=
[A-Z-Z]+
::=

|
| ( )
| ——
| +
| ——
| *
| /
| %
| ^
| .
| d
| 和
| 产品
| 数数
::=
#
| ( )
| ..
| ,
| 烫发
| 种类
| 转
| (下降|保持)? 低的
| (下降|保持)? 高的
| (下降|保持)? 第一的
| (下降|保持)? 最后的
| (下降|保持)? ==
| (下降|保持)? !=
| (下降|保持)? <
| (下降|保持)? >
| (下降|保持)? <=
| (下降|保持)? >=
| 如果然后别的
| 让= 在
| 尽管= 做
| foreach 在做
::=


::=

| ;

可以像在 C 中一样使用双斜线 (//) 插入注释。

语义


+ - * / ^

这些是熟悉的二元算术运算符,用于加法、减法、
乘法、除法和求幂。 除法向零舍入。
示例:5+7、d6-1、2^10

-

这是一元减运算符。 示例:-1

%

这是模运算符。 x % y 给出 x 除以 y 的余数。
示例:11%2、d6%3

.

这是标量串联运算符。 X 。 y 给出 xy,x 的串联
和y。 示例:-10.9、d6.d6

d

这是模具辊操作员。 dn 给出一个 n 面的单卷的值
死。 例子:d6, 2#d6

总和

这些是扩展的 sum 和 product 运算符。 如果 e 是一个表达式,求和 e 和
prod e 给出 e 的成员的总和和 e 的成员的乘积,
分别。 示例: sum(1..100), prod(3#d6)



这是列表大小运算符。 如果 e 是一个表达式,则计数 e 给出
e. 成员数量例子:计数(1,2,3),计数(== 6 10#d6)

#

这是列表重复操作符。 如果 n 是一个非负标量并且 e 是一个
表达式,则 n#e 是一个包含对 e 进行 n 次评估的结果的列表。
示例:10#8、3#d10

..

这是范围运算符。 如果 x 和 y 是标量,则 x..y 是一个列表,包括
区间 [x,y] 的。 如果 x>y,则结果列表为空。 例子:1..10,
4..d10

,

这是列表连接运算符。 v,u 给出包含所有
v 的成员,然后是 u 的所有成员。 例子:1,2 4,(3#d6)

分类

这是列表排序运算符。 sort e 按升序对列表 e 进行排序。
示例:排序(10#d6)

烫发

这是列表置换运算符。 排序 e 导致随机排列
清单 e. 使用 perm 对列表进行洗牌。 示例:烫发(1..52)



这是列表反转运算符。 rev e 产生具有相同成员的列表
与列表 e 相同,但顺序相反。 示例:rev(1..10),rev sort(10#d8)



这些运算符通过查找列表中的最小值和最大值来充当过滤器。
如果 n 是一个非负标量并且 e 是一个表达式,那么低 ne 给出 n 最少
e 的成员,高 ne 给出 e 的 n 个最大成员。 例子:高3 5#d6

第一 最后

这些运算符通过查找列表的初始和最终段来充当过滤器。 如果 n
是一个非负标量,e 是一个表达式,然后第一个 ne 给出第一个 n
e 的成员,last ne 给出 e 的最后 n 个成员。 示例:前 3
(1..10)

== != < > <= >=

这些运算符通过在满足给定的列表中查找值来充当过滤器
状况。 如果 x 是标量而 e 是表达式,则 == xe 给出以下列表
e 的成员等于 x; != xe 给出不等于 x 的 e 成员列表; < x
e 给出 e 小于 x 的成员列表; > xe 给出 e 的成员列表
大于 x; <= xe 给出 e 小于或等于 x 的成员列表; >= x
e 给出 e 大于或等于 x 的成员列表。 例子:>= 3 5#d6

下降 保持

这些运算符修改列表上的过滤器。 如果 fop 是一个过滤操作
表达式 e,然后 keep fop e 与 fop e 具有相同的结果并 drop fop e 求值
e 少保留 fop e。 换句话说, drop 否定过滤条件,并保持
肯定他们。 keep 从来都不是必需的,只是为了对称而存在。 例子:
总和(下降低 1 4#d6)



这是变量赋值和替换运算符。 如果 x 是一个变量而 e
和 f 是一个表达式,然后让 x = e in f 给出结果的列表
用 e 的值代替 x 在 f 中的每次出现来评估 f。
e 的评估是在替换之前完成的。 例子:让 x = d6 in x*x

的foreach

这是有界迭代算子。 如果 x 是一个变量并且 e 和 f 是
表达式,然后 foreach x in e do f 给出分配结果的列表
对 e 的每个成员进行 x 并评估 f。 例子:foreach x in c do x+1



这是无界迭代算子。 如果 x 是一个变量并且 e 和 f 是
表达式,然后 while x = e do f 是列表 v0,v1,...,vn,其中 v0 是结果
评估 e 和 vi+1 是将 vi 分配给 x 并评估 f 的结果,
停在第一个空的 vi 处。 示例:while x=d6 do ((count <6 x)#d6)

if

这是分支运算符。 如果 e、f 和 g 是表达式,则 if e then f
如果 e 非空,则 g 给出 f,否则给出 g。 例子:如果 count(>4 2#d6) 那么
1 其他 0

示例


计算大于 7 的骰子数:

计数>7 5#d10

计算大于 7 的骰子数减去等于 1 的骰子数:

让 c=5#d10 in (count >7 c)-(count ==1 c)

计算掷出的次数,直到掷出 6:

计数(而 x=d6 do ((count <6 x)#d6))

计算掷骰数,直到掷出 6,更有效:

计数 (而 x=(d6/6) do ((count <1 x)#(d6/6)))

新 D&D 角色的滚动属性:

6#sum(降低1 4#d6)

在 The Gamers' Civil War Brigade Series 中的 11..66 士气检查表上滚动:

d6.d6

求 3 d20s 的中位数:

高 1 低 2 3#d20

3d6 与 6s 重投:

求和(而 x=3#d6 做((计数 ==6 x)#d6))

掷 7 d10 并找出相同骰子的最大和:

let x = 7#d10 in high 1 (foreach y in 1..10 do sum (==yx))

斐波那契数列定义为 Fn = Fn-1 + Fn-2,其中 F1 = F2 = 1。计算
前二十个斐波那契数:

让 n = 20 in
让 f = (1,1) 在
foreach i in 1..n 做
让 f = (f,sum(high 2 f)) in
if ==ni then f else ()

Risk 有攻击者掷 3d6 和防御者掷 2d6 的战斗。 最高的
攻击者死亡与最高的防御者死亡和第二高的攻击者死亡相匹配
以第二高的防守者死。 对于两场比赛,最高的胜利,平局将
防御者。 进攻方获胜人数:

让 a = 3#d6 输入
让 b = 2#d6 in
计数((<(高1 a)高1 b),
(<(高 1 低 2 a) 低 1 b))

说书人掷骰子,目标编号为 8,错误指示为 -1:

让 c=5#d10 输入
让 succs = count >7 c in
让一个 = 计数 ==1 c in
如果 >0 成功,则高 1(0,成功者)
否则如果 >0 则 -1 否则 0

《寂静的死亡》中的战斗相当复杂。 三个骰子被掷出。 如果它们的总和高于
目标,掷骰成功。 为了计算伤害,相同的骰子被排序。 如果这三个都是
相等,所有的总和产生损害。 如果至少两个相等,但第三个是
越高,高死就是伤害。 如果两个最高的相等,但第三个较低,
将两个高骰子相加以产生伤害。 如果三个骰子都不同,则
中间不死就是伤害。 这个例子假设骰子是两个 d8s 和一个 d10,有一个
目标人数为 15:

让 x = 2#d8,d10 在
(count >15 sum x)#
让 a = 低 1 x in // 低死
让 b = 高 1 低 2 x // 中间骰子
让 c = 高 1 x in // 高骰子
if ==a ==bc then a+b+c // 全部相等
否则如果==a
else if >a ==cb then b+c // 两个高等于 else
b // 全不同

鸣谢


Dicelab 基于 Torben Mogensen 的优秀作品“roll”
(http://www.diku.dk/~torbenm/Dice.zip)。 如果没有他的工作和评论,这几乎不会
曾经发生过。

导出当前语言规范和对原始语言的扩展
来自乔尔·乌克尔曼 (Joel Uckelman) 的作品 (http://dice.nomic.net/bones.html), 大部分的
文件也从他那里偷走了。

这段代码是由 Robert Lemmen 编写的[email protected]> 谁会很高兴听到
您的问题和评论。

使用 onworks.net 服务在线使用 Dicelab


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad




×
广告
❤️在这里购物、预订或购买——免费,有助于保持服务免费。