Etwas, was ich nun schon vor einiger Zeit geschrieben habe (Februar 2007): Ein
Würfelprogramm. Unterstützt wird eine beliebige Anzahl an Würfeln (naja,
zumindest bis zu gewissen anderen Beschränkungen in der Shell, wie
32-bit-Ganzzahlen und Zeichenketten um 32000 Zeichen) und beliebig viele
Würfelseiten (bis zu … naja, kennen wir schon). Also, wenn man zum Beispiel
1200 Würfel mit 462 Seiten würfeln möchte, dann kann man das auch tun:
Die Ergebnisse werden dann auf der Konsole ausgegeben in der Reihenfolge wie
sie gewürfelt wurden. Sortiert wird momentan nicht, ich hatte bislang noch
keine Lust, auch nur einfache Sortieralgorithmen zu implementieren, aber
irgendwann kommt das sicher.
Diese harmlos aussehende Batchdatei enthält einen endlichen Automaten um die
Parameter zu parsen. Diese werden von dem folgenden regulären Ausdruck
beschrieben:
[1-9][0-9]*[WDwd][1-9][0-9]*(\+[1-9][0-9]*)?
Ich erlaube sowohl die deutsche als auch die englische Notation (w und
d)
als Trennzeichen für die Anzahl und die Seiten der Würfel sowie die Option,
alle Würfe und eine Konstante aufzusummieren (für Initiativewürfe in
Shadowrun 3). Aufgrund des Parsers kriegt der Benutzer relativ genaue Angaben
über Fehler und wo genau ein Fehler auftrat (vielleicht wäre es mal an der
Zeit für ein allgemeines Tool, welches endliche Automaten in Batch
generiert :-)).
Einige Beschränkungen:
- Würfeln ist langsam, also 1000 Würfe brauchen ein wenig.
- Da CMD nur 32-bit-Ganzzahlen mit Vorzeichen kennt, ist die maximale Anzahl
von Würfeln 2147483647.
- Da die Resultate in einer einzelnen Umgebungsvariable gespeichert werden,
die auf 32764 Zeichen beschränkt sind, ist die maximal nutzbare Anzahl an
Würfeln deutlich kleiner. Sonst werden halt ein Haufen Ergebnisse
abgeschnitten.
- Da der Pseudozufallszahlengenerator von CMD lediglich eine Zahl zwischen
0 und 32767 liefert, ist die maximale praktische Anzahl an Würfelseiten
32768. Ansonsten wird kein Wurf ein Ergebnis größer als 32768 liefern.
- Da einzelne Würfe durch eine Modulo-Operation auf die Anzahl der Seiten
gebracht werden, sind die Resultate nicht gleich verteilt, wenn die Anzahl der
Seiten kein Teiler von 32768 ist (Das dürfte besonders auffällig bei mehr als
16384 Seiten sein).
Der Code ist fast undokumentiert, aber das macht beim Lesen nur um so mehr
Spaß :-)
Kommentare
Neuen Kommentar abgeben