dicelab - Online în cloud

Aceasta este comanda dicelab care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS

PROGRAM:

NUME


dicelab - aruncați și examinați schemele de aruncare a zarurilor

REZUMAT


dicelab [Opțiuni] [-f ]

OPŢIUNI


-h, --Ajutor, -?
imprimați un mesaj de ajutor

--versiune, -v
afișează numărul versiunii

--calc, -c
calcula distributia

--rola, -r
aruncați zarurile așa cum este specificat. Acesta va fi folosit și dacă nu se solicită nicio altă acțiune

--eval, -e
rerolați de mai multe ori și însumați rezultatele pentru a obține o distribuție statistică a
Valorile

--numara, -n
specificați numărul de reluări pentru --eval, implicit este 10000

--print-tree, -p
tipăriți arborele de analiză (pentru scopuri de depanare)

-f
citiți descrierea schemei din fișier în loc de la stdin

DESCRIERE


Dicelab citește o descriere a schemei de rulare a zarurilor dintr-un fișier sau din stdin dacă nu există fișier
este specificat și apoi rulează sau examinează această schemă.

RAPID START


Rolurile de zaruri simple pot fi făcute folosind operatorul „d”, urmat de numărul de fețe pe
zarul să fie aruncat. De exemplu, d6 va arunca un singur zar cu șase fețe, iar d2 va arunca o monedă.
Expresiile pot fi modificate de operatorii aritmetici standard. d10-1 va da o valoare
intre 0 si 9, inclusiv. Pentru a arunca mai multe zaruri de același tip, utilizați
operator de repetiție „#”. 2#d6 va arunca două zaruri cu șase fețe; acesta nu este același lucru cu 2*d6,
care aruncă doar un singur zar, dar înmulțește rezultatul cu doi, sau 2d6 care va provoca a
eroare de sintaxă. Pentru a obține suma a două zaruri cu șase fețe, faceți suma (2#d6).

FULL SINTAXĂ


::=
-?[0-9]+
::=
[A-Za-z]+
::=

|
| ( )
| -
| +
| -
| *
| /
| %
| ^
| .
| d
| sumă
| prod
| numara
::=
#
| ( )
| ..
| ,
| permanent
| fel
| rev
| (aruncă | păstrează)? scăzut
| (aruncă | păstrează)? înalt
| (aruncă | păstrează)? primul
| (aruncă | păstrează)? ultimul
| (aruncă | păstrează)? ==
| (aruncă | păstrează)? !=
| (aruncă | păstrează)? <
| (aruncă | păstrează)? >
| (aruncă | păstrează)? <=
| (aruncă | păstrează)? >=
| dacă atunci altfel
| lăsa = în
| in timp ce = do
| pentru fiecare în do
::=


::=

| ;

Comentariile pot fi inserate folosind două bare oblice (//) ca în C.

SEMANTICĂ


+ - * / ^

Aceștia sunt operatorii aritmetici binari familiari pentru adunare, scădere,
înmulțire, împărțire și exponențiere. Diviziunea se rotunjește spre zero.
Exemple: 5+7, d6-1, 2^10

-

Acesta este operatorul unar minus. Exemple: -1

%

Acesta este operatorul de modul. x % y dă restul lui x împărțit la y.
Exemple: 11%2, d6%3

.

Acesta este operatorul de concatenare scalară. X . y dă xy, concatenarea lui x
și y. Exemple: -10.9, d6.d6

d

Acesta este operatorul de rulare a matriței. dn dă valoarea unei singure roluri de n fețe
a muri. Exemple: d6, 2#d6

sumă prod

Aceștia sunt operatorii de sumă extinsă și de produs. Dacă e este o expresie, suma e și
prod e da suma membrilor lui e și produsul membrilor lui e,
respectiv. Exemple: sum(1..100), prod(3#d6)

conta

Acesta este operatorul de dimensiune a listei. Dacă e este o expresie, atunci numărarea e dă
numărul de membri ai e. Exemple: count(1,2,3), count(== 6 10#d6)

#

Acesta este operatorul de repetiție a listei. Dacă n este un scalar nenegativ și e este an
expresie, atunci n#e este o listă care conține rezultatele n evaluări ale lui e.
Exemple: 10#8, 3#d10

..

Acesta este operatorul intervalului. Dacă x și y sunt scalari, atunci x..y este o listă formată
a intervalului [x,y]. Dacă x>y, atunci lista rezultată este goală. Exemple: 1..10,
4..d10

,

Acesta este operatorul de concatenare a listei. v,u oferă lista constând din toate
membrii lui v, urmați de toți membrii lui u. Exemple: 1,2 4,(3#d6)

fel

Acesta este operatorul de sortare a listei. sort e sortează lista e în ordine crescătoare.
Exemple: sort(10#d6)

permanent

Acesta este operatorul de permutare a listei. sort e are ca rezultat o permutare aleatorie a
lista e. Utilizați perm pentru a amesteca o listă. Exemple: perm(1..52)

rev

Acesta este operatorul de inversare a listei. rev e rezultă într-o listă cu aceiași membri
ca lista e, dar în ordine inversă. Exemple: rev(1..10), rev sort(10#d8)

scăzut înalt

Acești operatori acționează ca filtre prin găsirea celor mai mici și mai mari valori în liste.
Dacă n este un scalar nenegativ și e este o expresie, atunci ne mic dă cel mai mic n
membrii lui e, iar ne înalt dă cei n membri cei mai mari ai lui e. Exemple: mare 3 5#d6

primul ultimul

Acești operatori acționează ca filtre prin găsirea segmentelor inițiale și finale ale listelor. Dacă n
este un scalar nenegativ și e este o expresie, apoi mai întâi ne dă primul n
membrii lui e, iar ultimul ne oferă ultimii n membri ai lui e. Exemple: primele 3
(1..10)

== != < > <= >=

Acești operatori acționează ca filtre prin găsirea de valori în liste care îndeplinesc date
conditii. Dacă x este un scalar și e este o expresie, atunci == xe oferă lista de
membrii lui e egali cu x; != xe dă lista de membri ai lui e nu este egală cu x; < x
e dă lista membrilor lui e mai mici decât x; > xe dă lista membrilor e
mai mare decât x; <= xe dă lista membrilor lui e mai mici sau egali cu x; >= x
e dă lista membrilor lui e mai mari sau egale cu x. Exemple: >= 3 5#d6

picătură păstra

Acești operatori modifică filtrele pe liste. Dacă fop este o operațiune de filtrare pe an
expresia e, atunci păstrați fop e are același rezultat ca și fop e și drop fop e evaluează
a e mai putin tine fop e. Cu alte cuvinte, drop anulează condițiile de filtrare și păstrează
le afirmă. păstrarea nu este niciodată necesară și există doar pentru simetrie. Exemple:
suma(scăderea scăzută 1 4#d6)

lăsa

Acesta este operatorul de alocare și înlocuire a variabilelor. Dacă x este o variabilă și e
și f sunt expresii, atunci fie x = e în f dă lista care rezultă din
evaluând f cu valoarea lui e substituită pentru fiecare apariție a lui x în f.
Evaluarea lui e se face înainte de înlocuire. Exemple: fie x = d6 în x*x

pentru fiecare

Acesta este operatorul de iterație mărginită. Dacă x este o variabilă și e și f sunt
expresii, atunci pentru fiecare x în e do f dă lista care rezultă din atribuire
la x fiecare dintre membrii lui e și evaluând f. Exemple: foreach x in c do x+1

în timp ce

Acesta este operatorul de iterație nelimitată. Dacă x este o variabilă și e și f sunt
expresii, atunci în timp ce x = e do f este lista v0,v1,...,vn, unde v0 este rezultatul
a evaluării e și vi+1 este rezultatul atribuirii lui vi lui x și al evaluării f,
oprindu-se la primul vi care este gol. Exemple: în timp ce x=d6 do ((număr <6 x)#d6)

if

Acesta este operatorul de ramificație. Dacă e, f și g sunt expresii, atunci dacă e atunci f
altfel g dă f dacă e este nevid, iar g în caz contrar. Exemple: dacă count(>4 2#d6) atunci
1 altfel 0

EXEMPLE


Numărați numărul de zaruri mai mare de 7:

numără >7 5#d10

Numărați numărul de zaruri mai mare de 7 minus numărul de zaruri egal cu 1:

fie c=5#d10 în (număr >7 c)-(număr ==1 c)

Numărați numărul de role până când se aruncă un 6:

numărați (în timp ce x=d6 face ((numărați <6 x)#d6))

Numărați numărul de role până când un 6 este rulat, mai eficient:

numărați (în timp ce x=(d6/6) nu ((numărați <1 x)#(d6/6)))

Atributele rolului pentru un nou personaj D&D:

6#sum(scăderea scăzută 1 4#d6)

Dați pe tabelul de verificare a moralului 11..66 din seria The Gamers' Civil War Brigade:

d6.d6

Aflați mediana a 3 d20s:

ridicat 1 mic 2 3#d20

3d6 cu rerulări în 6s:

suma (în timp ce x=3#d6 face ((număr ==6 x)#d6))

Lansați 7 d10 și găsiți cea mai mare sumă de zaruri identice:

fie x = 7#d10 în mare 1 (pentru fiecare y în 1..10 face suma (==yx))

Secvența Fibonacci este definită prin Fn = Fn-1 + Fn-2, cu F1 = F2 = 1. Calculați
primele douăzeci de numere Fibonacci:

fie n = 20 in
fie f = (1,1) in
foreach i in 1..n do
fie f = (f,sum(mare 2 f)) în
if ==ni atunci f else ()

Riscul are bătălii în care atacatorul aruncă 3d6, iar apărătorul 2d6. Cel mai inalt
zarul atacatorului este asociat cu cel mai mare zar al apărătorului și al doilea cel mai mare zar al atacatorului
la al doilea cel mai înalt apărător moare. Pentru ambele meciuri, cea mai mare victorie, cu egalitate până la
aparatorul. Numărul de victorii ale atacatorului:

fie a = 3#d6 in
fie b = 2#d6 in
count((<(mare 1 a) mare 1 b),
(<(mare 1 scăzut 2 a) scăzut 1 b))

Rolă de zar pentru povestitor cu numărul țintă 8 și erorile indicate la -1:

fie c=5#d10 in
lasă succs = numără >7 c in
fie cele = numără ==1 c in
dacă >0 succes, atunci mare 1 (0,succs-one)
altfel, dacă >0, atunci -1 altfel 0

Combaterea în Silent Death este destul de complexă. Se aruncă trei zaruri. Dacă suma lor este peste a
țintă, aruncarea este o lovitură. Pentru a calcula daunele, aceleași zaruri sunt sortate. Dacă toate trei sunt
egale, toate sunt însumate pentru a produce prejudiciul. Dacă cei mai puțini doi sunt egali, dar al treilea este
mai mare, zarul mare este deteriorarea. Dacă cele două cele mai mari sunt egale, dar al treilea este mai mic,
cele două zaruri înalte sunt însumate pentru a produce daune. Dacă toate cele trei zaruri sunt diferite,
moarul mijlociu este paguba. Acest exemplu presupune că zarurile sunt două d8 și un d10, cu a
numărul țintă de 15:

fie x = 2#d8,d10 in
(număr >15 sumă x)#
fie a = scăzut 1 x în // moar mic
fie b = mare 1 scăzut 2 x în // mijloc moar
fie c = mare 1 x în // mare moare
dacă ==a ==bc atunci a+b+c // toate egale
altfel dacă ==a
else if >a ==cb then b+c // două mari egale altfel
b // toate diferite

CREDITE


Dicelab are la bază lucrarea excelentă „rula” a lui Torben Mogensen
(http://www.diku.dk/~torbenm/Dice.zip). Fără munca și comentariile lui, acest lucru cu greu ar fi făcut-o
sa întâmplat vreodată.

Specificația actuală a limbajului și extensiile la limba originală sunt derivate
din opera lui Joel Uckelman (http://dice.nomic.net/bones.html), Cele mai multe dintre
i se fură și documentația.

Acest cod a fost scris de Robert Lemmenrobertle@semisable.com> cine ar fi bucuros să audă
întrebările și observațiile dvs.

Utilizați dicelab online folosind serviciile onworks.net



Cele mai recente programe online Linux și Windows