これは、Ubuntu Online、Fedora Online、Windows オンライン エミュレーター、MAC OS オンライン エミュレーターなどの複数の無料オンライン ワークステーションの XNUMX つを使用して、OnWorks 無料ホスティング プロバイダーで実行できるコマンド dicelab です。
プログラム:
NAME
dicelab - サイコロを振ってスキームを調べる
SYNOPSIS
ダイセラブ [オプション] [-NS ]
OPTIONS
-h, - 助けて, -?
ヘルプメッセージを印刷する
- バージョン, -v
バージョン番号を表示する
--計算, -c
分布を計算する
- ロール, -r
指定されたとおりにサイコロを振ります。 これは、他のアクションが要求されない場合にも使用されます
--eval, -e
何度も再ロールし、結果を合計して、統計的分布を取得します。
値
- カウント, -n
--eval にリロール数を指定します。デフォルトは 10000 です。
--print-tree, -p
解析ツリーを出力します (デバッグ目的)
-f
標準入力からではなくファイルからスキームの説明を読み取ります
DESCRIPTION
Dicelab は、ファイルから、またはファイルがない場合は標準入力からサイコロ振りスキームの記述を読み取ります。
が指定されてから、このスキームをロールまたは検査します。
QUICK 開始
単一のダイスロールは、「d」演算子に続いて面の数を使用して作成できます。
振られるサイコロ。 たとえば、d6 は単一の 2 面ダイスを振り、dXNUMX はコインを投げます。
式は標準の算術演算子によって変更できます。 d10-1 は値を生成します
0 から 9 までの値。 同じ種類の複数のサイコロを振るには、
繰り返し演算子「#」。 2#d6 は 2 つの 6 面ダイスを振ります。 これは XNUMX*dXNUMX とは異なります。
これは、サイコロを 2 つだけ振りますが、結果に 6 を乗算する、つまり XNUMXdXNUMX を掛けます。
構文エラー。 2 つの 6 面サイコロの合計を取得するには、sum(XNUMX#dXNUMX) を実行します。
FULL 構文
::=
-?[0-9]+
::=
[ア・ザ・ズ]+
::=
|
| ( )
| -
| +
| -
| *
| /
| %
| ^
| 。
| d
| 和
| プロッド
| カウント
::=
#
| ( )
| ..
| 、
| パーマ
| 選別
| 回転数
| (ドロップ|キープ)? 低い
| (ドロップ|キープ)? 高い
| (ドロップ|キープ)? 初め
| (ドロップ|キープ)? 最後
| (ドロップ|キープ)? ==
| (ドロップ|キープ)? !=
| (ドロップ|キープ)? <
| (ドロップ|キープ)? >
| (ドロップ|キープ)? <=
| (ドロップ|キープ)? >=
| もしそれからそれ以外
| させて= で
| その間= する
| フォーリーチでする
::=
::=
| ;
コメントは、C と同様に二重スラッシュ (//) を使用して挿入できます。
セマンティクス
+ - * / ^
これらは、加算、減算、などのよく知られた二項算術演算子です。
乗算、除算、累乗。 除算はゼロに向かって丸められます。
例: 5+7、d6-1、2^10
-
これは単項マイナス演算子です。 例: -1
%
これはモジュラス演算子です。 x % y は、x を y で割った余りを返します。
例: 11%2、d6%3
.
これはスカラー連結演算子です。 バツ 。 y は x を連結した xy を与えます
そしてy。 例: -10.9、d6.d6
d
これはダイスロールの演算子です。 dn は、n 辺の単一ロールの値を与えます。
死ぬ。 例: d6、2#d6
合計 突く
これらは拡張された和演算子と積演算子です。 e が式の場合、e と
prod e は、e のメンバーの合計と e のメンバーの積を与えます。
それぞれ。 例: sum(1..100)、prod(3#d6)
カウント
これはリスト サイズ演算子です。 e が式の場合、count e は次のようになります。
eの会員数。 例: count(1,2,3)、count(== 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
これはリストの並べ替え演算子です。 sort e はリスト e を昇順に並べ替えます。
例: sort(10#d6)
パーマ
これはリスト順列演算子です。 sort e の結果はランダムに並べ替えられます
リスト e. パーマを使用してリストをシャッフルします。 例: パーマ(1..52)
回転
これはリスト反転演算子です。 rev e の結果は同じメンバーのリストになります
リスト e と同様ですが、順序は逆です。 例: rev(1..10)、rev sort(10#d8)
低いです 高いです
これらの演算子は、リスト内の最小値と最大値を検索するフィルターとして機能します。
n が非負のスカラーで、e が式の場合、low ne は n を最小にします。
e のメンバー、および高い ne は e の最大の n メンバーを与えます。 例: 高 3 5#d6
最初の last
これらの演算子は、リストの最初と最後のセグメントを検索することでフィルターとして機能します。 nの場合
が非負のスカラーで、 e が式の場合、最初の ne は最初の n を返します。
e のメンバー、last ne は e の最後の n メンバーを与えます。 例: 最初の 3 件
(1..10)
== != < > <= >=
これらの演算子は、指定された条件を満たすリスト内の値を検索することでフィルターとして機能します。
条件。 x がスカラーで e が式の場合、 == xe は次のリストを与えます。
e のメンバーは x に等しい。 != xe は、x に等しくない e のメンバーのリストを与えます。 < x
e は、x より小さい e のメンバーのリストを与えます。 > xe は e のメンバーのリストを与える
xより大きい; <= xe は、x 以下の e のメンバーのリストを与えます。 >= ×
e は、x 以上の e のメンバーのリストを与えます。 例: >= 3 5#d6
ドロップ 続ける
これらの演算子はリストのフィルターを変更します。 fop が
式 e の場合、keep fop e は fop e と同じ結果になり、drop fop e は評価されます。
to e を少なくして fop e を維持します。 言い換えると、drop はフィルター条件を無効にし、keep はフィルター条件を無効にします。
と肯定します。 keep は決して必要ではなく、対称性のためだけに存在します。 例:
sum(ドロップロー 1 4#d6)
う
これは変数の代入および置換演算子です。 x が変数で e の場合
と f が式の場合、x = e in f は次の結果から得られるリストを与えます。
f 内のすべての x を e の値に置き換えて 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
while
これは無制限の反復演算子です。 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
else g は、e が空でない場合には f を与え、それ以外の場合には g を与えます。 例: if count(>4 2#d6) then
1 その他 0
例
7 より大きいサイコロの数を数えます。
カウント >7 5#d10
7 から 1 に等しいサイコロの数を引いたものより大きいサイコロの数を数えます。
let c=5#d10 in (count >7 c)-(count ==1 c)
6 が出るまで出目の数を数えます。
count (while x=d6 do ((count <6 x)#d6))
6 が出るまでの出目の数をより効率的に数えます。
count (while x=(d6/6) do ((count <1 x)#(d6/6)))
新しい D&D キャラクターのロール属性:
6#sum(ドロップロー 1 4#d6)
The Gamers' Civil War Brigade シリーズの 11..66 士気チェック テーブルにロールオンします。
d6.d6
3 d20 の中央値を求める:
高 1 低 2 3#d20
3s でのリロール付き 6d6:
sum(while x=3#d6 do ((count ==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) で定義されます。
最初の XNUMX 個のフィボナッチ数:
n = 20 とします
f = (1,1) にします
foreach i in 1..n do
f = (f,sum(high 2 f)) とします。
if ==ni then f else ()
リスクには、攻撃者が 3d6 をロールし、防御者が 2d6 をロールする戦闘があります。 最高
攻撃者のダイスは、最も高い防御者のダイスと XNUMX 番目に高い攻撃者のダイスと一致します。
XNUMX番目に高いディフェンダーにダイスします。 両方の試合で、最も高い人が勝ち、引き分けは次のとおりです。
ディフェンダー。 攻撃側の勝利数:
a = 3#d6 とします
b = 2#d6 とします
count( (<(高 1 a) 高 1 b),
(<(高 1 低 2 a) 低 1 b))
ストーリーテラーのダイスロールはターゲット番号 8 で、失敗は -1 と表示されます。
c=5#d10 にします
let succs = count >7 c in
let ones = count ==1 c in
>0 が成功した場合は、上位 1 (0,succs-ones)
それ以外の場合 >0 の場合 -1 それ以外の場合 0
Silent Death での戦闘はかなり複雑です。 XNUMX つのサイコロが振られます。 それらの合計が を超える場合、
ターゲット、ロールはヒットです。 ダメージを計算するには、同じダイスを並べ替えます。 XNUMXつともそうだったら
等しい場合、すべてを合計してダメージを与えます。 少なくとも XNUMX つが等しいが、XNUMX つ目が等しい場合
高いほど、高いダイスがダメージになります。 上位 XNUMX つが等しいが、XNUMX つ目が低い場合、
XNUMX つの高いサイコロを合計してダメージを与えます。 XNUMX つのサイコロがすべて異なる場合、
真ん中のダイがダメージです。 この例では、サイコロが 8 つの d10 と XNUMX つの dXNUMX であり、
目標数15:
x = 2#d8,d10 とします
(カウント >15 合計 x)#
let a = low 1 x in // low die
let b = 高 1 低 2 x in // 中央のダイ
let c = high 1 x in // ハイダイ
if ==a ==bc then a+b+c // すべて等しい
それ以外の場合 ==a
else if >a ==cb then b+c // XNUMX つの高い値が等しい else
b // 全部違う
CREDITS
Dicelab は、Torben Mogensen の優れた作品「roll」に基づいています。
(http://www.diku.dk/~torbenm/Dice.zip)。 彼の作品とコメントがなければ、これは不可能でした
今までに起こったことがある。
現在の言語仕様と元の言語の拡張機能が派生します。
ジョエル・ウッケルマンの作品より (http://dice.nomic.net/bones.html)、 ほとんど
書類も彼から盗まれます。
このコードは Robert Lemmen によって書かれました[メール保護]> 誰が聞いて喜ぶだろうか
ご質問やご意見。
onworks.net サービスを使用してオンラインで dicelab を使用する