Dies ist der Befehl dicelab, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
Dicelab – Würfeln und untersuchen Sie Würfelschemata
ZUSAMMENFASSUNG
dicelab [Optionen] [-F ]
OPTIONAL
-h, --help, -?
Drucken Sie eine Hilfemeldung
--Version, -v
Versionsnummer anzeigen
--calc, -c
Berechnen Sie die Verteilung
--rollen, -r
Wirf die Würfel wie angegeben. Dies wird auch verwendet, wenn keine andere Aktion angefordert wird
--eval, -e
Rollen Sie viele Male neu und summieren Sie die Ergebnisse, um eine statistische Verteilung zu erhalten
Werte
--zählen, -n
Geben Sie die Anzahl der Wiederholungen für --eval an, der Standardwert ist 10000
--print-baum, -p
Drucken Sie den Parse-Baum (zu Debugzwecken)
-f
Lesen Sie die Schemabeschreibung aus der Datei statt aus stdin
BESCHREIBUNG
Dicelab liest eine Beschreibung eines Würfelschemas aus einer Datei oder aus stdin, wenn keine Datei vorhanden ist
angegeben wird und dann dieses Schema würfelt bzw. untersucht.
SCHNELL Starte das Spiel
Einzelwürfelwürfe können mit dem „d“-Operator durchgeführt werden, gefolgt von der Anzahl der Seiten darauf
der zu würfelnde Würfel. Beispielsweise wirft d6 einen einzelnen sechsseitigen Würfel und d2 wirft eine Münze.
Ausdrücke können durch die standardmäßigen arithmetischen Operatoren geändert werden. d10-1 ergibt einen Wert
zwischen 0 und 9, einschließlich. Um mehrere Würfel desselben Typs zu würfeln, verwenden Sie die
Wiederholungsoperator '#'. 2#d6 wirft zwei sechsseitige Würfel; das ist nicht dasselbe wie 2*d6,
das nur einen einzigen Würfel wirft, aber das Ergebnis mit zwei multipliziert, oder 2W6, was a verursacht
Syntax-Fehler. Um die Summe zweier sechsseitiger Würfel zu erhalten, führen Sie sum(2#d6) aus.
FULL SYNTAX
::=
-?[0-9]+
::=
[A-Za-z]+
::=
|
| ( )
| -
| +
| -
| *
| /
| %
| ^
| .
| D
| Summe
| Prod
| zählen
::=
#
| ( )
| ..
| ,
| Dauerwelle
| Sortieren
| rev
| (fallen|behalten)? niedrig
| (fallen|behalten)? hoch
| (fallen|behalten)? Erste
| (fallen|behalten)? zuletzt
| (fallen|behalten)? ==
| (fallen|behalten)? !=
| (fallen|behalten)? <
| (fallen|behalten)? >
| (fallen|behalten)? <=
| (fallen|behalten)? >=
| Wenn Dann anders
| lassen = In
| während = Tun
| für jede In Tun
::=
::=
| ;
Kommentare können wie in C mit einem doppelten Schrägstrich (//) eingefügt werden.
SEMANTIK
+ - * / ^
Dies sind die bekannten binären arithmetischen Operatoren für Addition, Subtraktion,
Multiplikation, Division und Potenzierung. Bei der Division wird gegen Null gerundet.
Beispiele: 5+7, d6-1, 2^10
-
Dies ist der unäre Minusoperator. Beispiele: -1
%
Dies ist der Moduloperator. x % y ergibt den Rest von x dividiert durch y.
Beispiele: 11%2, d6%3
.
Dies ist der skalare Verkettungsoperator. X . y ergibt xy, die Verkettung von x
Andy. Beispiele: -10.9, d6.d6
d
Dies ist der Würfelwurfoperator. dn gibt den Wert eines einzelnen Wurfs einer n-Seite an
sterben. Beispiele: d6, 2#d6
Summe Stoß
Dies sind die erweiterten Summen- und Produktoperatoren. Wenn e ein Ausdruck ist, summieren Sie e und
prod e geben die Summe der Mitglieder von e und das Produkt der Mitglieder von e an,
bzw. Beispiele: sum(1..100), prod(3#d6)
zählen
Dies ist der Listengrößenoperator. Wenn e ein Ausdruck ist, dann gibt count e den an
Anzahl der Mitglieder von e. Beispiele: count(1,2,3), count(== 6 10#d6)
#
Dies ist der Listenwiederholungsoperator. Wenn n ein nichtnegativer Skalar und e ein ist
Ausdruck, dann ist n#e eine Liste mit den Ergebnissen von n Auswertungen von e.
Beispiele: 10#8, 3#d10
..
Dies ist der Bereichsoperator. Wenn x und y Skalare sind, dann ist x..y eine Liste bestehend aus
des Intervalls [x,y]. Wenn x>y, ist die resultierende Liste leer. Beispiele: 1..10,
4..d10
,
Dies ist der Listenverkettungsoperator. v,u gibt die Liste bestehend aus allen an
die Mitglieder von v, gefolgt von allen Mitgliedern von u. Beispiele: 1,2 4,(3#d6)
sortieren
Dies ist der Listensortieroperator. sort e sortiert die Liste e in aufsteigender Reihenfolge.
Beispiele: sort(10#d6)
Dauerwelle
Dies ist der Listenpermutationsoperator. sort e ergibt eine zufällige Permutation von
die Liste e. Verwenden Sie perm, um eine Liste zu mischen. Beispiele: perm(1..52)
Umdrehung
Dies ist der Listenumkehroperator. rev e führt zu einer Liste mit denselben Mitgliedern
wie Liste e, jedoch in umgekehrter Reihenfolge. Beispiele: rev(1..10), rev sort(10#d8)
niedrig Highs
Diese Operatoren fungieren als Filter, indem sie die kleinsten und größten Werte in Listen finden.
Wenn n ein nichtnegativer Skalar und e ein Ausdruck ist, dann ergibt low ne den n-kleinsten
Mitglieder von e, und high ne gibt die n größten Mitglieder von e an. Beispiele: hoch 3 5#d6
zuerst letzte
Diese Operatoren fungieren als Filter, indem sie Anfangs- und Endsegmente von Listen finden. Wenn n
ein nichtnegativer Skalar und e ein Ausdruck ist, dann ergibt zuerst ne das erste n
Mitglieder von e, und last ne gibt die letzten n Mitglieder von e an. Beispiele: erste 3
(1..10)
== != < > <= >=
Diese Operatoren fungieren als Filter, indem sie Werte in Listen finden, die gegebenen Anforderungen entsprechen
Bedingungen. Wenn x ein Skalar und e ein Ausdruck ist, dann gibt == xe die Liste von an
Mitglieder von e gleich x; != xe gibt die Liste der Mitglieder von e an, die nicht gleich x sind; < x
e gibt die Liste der Mitglieder von e kleiner als x an; > xe gibt die Liste der Mitglieder von e an
größer als x; <= xe gibt die Liste der Mitglieder von e an, die kleiner oder gleich x sind; >= x
e gibt die Liste der Mitglieder von e an, die größer oder gleich x sind. Beispiele: >= 3 5#d6
fallen lassen halten
Diese Operatoren ändern Filter für Listen. Wenn fop eine Filteroperation auf einem ist
Ausdruck e, dann hat keep fop e das gleiche Ergebnis wie fop e und drop fop e wertet aus
um e weniger fop e zu halten. Mit anderen Worten: Drop negiert Filterbedingungen und Keep
bekräftigt sie. keep ist niemals notwendig und existiert nur aus Symmetriegründen. Beispiele:
sum(drop low 1 4#d6)
lassen
Dies ist der Variablenzuweisungs- und Substitutionsoperator. Wenn x eine Variable ist und e
und f ein Ausdruck sind, dann ergibt x = e in f die Liste, die sich aus ergibt
Bewerten von f mit dem Wert von e, der für jedes Vorkommen von x in f ersetzt wird.
Die Auswertung von e erfolgt vor der Substitution. Beispiele: sei x = d6 in x*x
foreach
Dies ist der beschränkte Iterationsoperator. Wenn x eine Variable ist und e und f es sind
Ausdrücke, dann liefert foreach x in e do f die Liste, die sich aus der Zuweisung ergibt
zu x jedes der Mitglieder von e und Auswerten von f. Beispiele: foreach x in c do x+1
während
Dies ist der unbegrenzte Iterationsoperator. Wenn x eine Variable ist und e und f es sind
Ausdrücke, dann ist while x = e do f die Liste v0,v1,...,vn, wobei v0 das Ergebnis ist
der Auswertung von e und vi+1 ist das Ergebnis der Zuweisung von vi zu x und der Auswertung von f,
Anhalten beim ersten vi, das leer ist. Beispiele: while x=d6 do ((count <6 x)#d6)
if
Dies ist der Verzweigungsoperator. Wenn e, f und g Ausdrücke sind, dann ist f, wenn e
sonst gibt g f, wenn e nicht leer ist, andernfalls g. Beispiele: if count(>4 2#d6) then
1 sonst 0
Beispiele:
Zähle die Anzahl der Würfel größer als 7:
zähle >7 5#d10
Zähle die Anzahl der Würfel, die größer als 7 sind, minus der Anzahl der Würfel, die gleich 1 sind:
sei c=5#d10 in (Anzahl >7 c)-(Anzahl ==1 c)
Zählen Sie die Anzahl der Würfe, bis eine 6 gewürfelt wird:
count (while x=d6 do ((count <6 x)#d6))
Zählen Sie die Anzahl der Würfe, bis eine 6 gewürfelt wird, effizienter:
count (while x=(d6/6) do ((count <1 x)#(d6/6)))
Rollenattribute für einen neuen D&D-Charakter:
6#sum(niedrig fallen 1 4#d6)
Würfeln Sie auf dem 11..66-Moral-Check-Tisch in der The Gamers' Civil War Brigade Series:
d6.d6
Finden Sie den Median von 3 d20s:
Hoch 1 Tief 2 3#d20
3W6 mit Neuwürfen bei 6ern:
sum(while x=3#d6 do ((count ==6 x)#d6))
Wirf 7 W10 und finde die größte Summe identischer Würfel:
Sei x = 7#d10 in hoch 1 (für jedes y in 1..10 ergibt die Summe (==yx))
Die Fibonacci-Folge ist definiert durch Fn = Fn-1 + Fn-2, mit F1 = F2 = 1. Berechnen Sie die
Die ersten zwanzig Fibonacci-Zahlen:
sei n = 20 Zoll
sei f = (1,1) in
foreach i in 1..n do
sei f = (f,sum(high 2 f)) in
if ==ni then f else ()
Risiko gibt es in Schlachten, bei denen der Angreifer 3W6 und der Verteidiger 2W6 würfelt. Das höchste
Der Angreiferwürfel wird mit dem höchsten Verteidigerwürfel und dem zweithöchsten Angreiferwürfel abgeglichen
zum zweithöchsten Verteidigerwürfel. In beiden Spielen gewinnt die höchste Mannschaft, es gibt Unentschieden
der Verteidiger. Die Anzahl der Angreifer gewinnt:
sei a = 3#d6 in
sei b = 2#d6 in
count( (<(hoch 1 a) hoch 1 b),
(<(hoch 1 niedrig 2 a) niedrig 1 b))
Würfelwurf des Geschichtenerzählers mit der Zielnummer 8 und den bei -1 angezeigten Pfuschern:
Sei c=5#d10 in
let succs = count >7 c in
lass eins = zählen ==1 c in
wenn >0 erfolgreich, dann hoch 1 (0,erfolgreich-eins)
sonst wenn >0 Einsen dann -1 sonst 0
Der Kampf in Silent Death ist ziemlich komplex. Es werden drei Würfel geworfen. Liegt ihre Summe über a
Ziel, der Wurf ist ein Treffer. Um den Schaden zu berechnen, werden die gleichen Würfel sortiert. Wenn alle drei es sind
gleich, alle werden summiert, um den Schaden zu ergeben. Wenn mindestens zwei gleich sind, der dritte jedoch gleich ist
Je höher der Schaden, desto höher ist der Würfel. Wenn die beiden höchsten gleich sind, der dritte jedoch niedriger ist,
Die beiden hohen Würfel werden addiert und ergeben den Schaden. Wenn alle drei Würfel unterschiedlich sind, wird der
Der mittlere Würfel ist der Schaden. In diesem Beispiel wird davon ausgegangen, dass es sich bei den Würfeln um zwei W8 und einen W10 mit a handelt
Zielzahl 15:
sei x = 2#d8,d10 in
(Anzahl >15 Summe x)#
lass a = low 1 x in // low sterben
Sei b = hoch 1 niedrig 2 x in // Mitte
sei c = high 1 x in // high sterben
if ==a ==bc then a+b+c // alle gleich
sonst wenn ==a
sonst wenn >a ==cb dann b+c // zwei hoch gleich sonst
b // alles anders
CREDITS
Dicelab basiert auf der hervorragenden Arbeit „roll“ von Torben Mogensen
(http://www.diku.dk/~torbenm/Dice.zip). Ohne seine Arbeit und Kommentare wäre dies kaum möglich
jemals passiert sind.
Die aktuelle Sprachspezifikation und die Erweiterungen zur Originalsprache werden abgeleitet
aus der Arbeit von Joel Uckelman (http://dice.nomic.net/bones.html), die meisten von den
Auch ihm werden Unterlagen gestohlen.
Dieser Code wurde von Robert Lemmen geschrieben[E-Mail geschützt] > wer würde sich freuen zu hören
Ihre Fragen und Anmerkungen.
Nutzen Sie Dicelab online über die Dienste von onworks.net