Hintergrund
Eine Quelle der Langeweile in Tabletop-Rollenspielen ist das Würfeln mit vielen Würfeln. Das Wirken eines Zerfallszaubers mag augenblicklich sein, aber das Würfeln und Addieren von 40 Würfeln ist es mit Sicherheit nicht!
Unter rpg.stackexchange.com werden eine Reihe von Vorschlägen zur Behandlung dieses Problems erörtert . Einige von ihnen, wie das Verwenden eines Rollprogramms oder das Mitteln von Würfeln, nehmen den Spielern jedoch etwas Spaß und Gefühl der Kontrolle. Andere, wie das Werfen von 4 Würfeln und das Multiplizieren der Gesamtsumme mit 10, führen zu weitaus schwungvolleren Ergebnissen (während das Mitteln von Würfeln in die entgegengesetzte Richtung erfolgt).
Diese Frage bezieht sich auf eine Methode zur Verringerung der Anzahl der Würfelwürfe, ohne dass das Durchschnittsergebnis (Mittelwert) oder dessen Schwankung (Varianz) geändert werden.
Notation und Mathematik
In dieser Frage verwenden wir die folgende Notation, um Würfelwürfe darzustellen:
- n d k (z. B. 40d6) bezieht sich auf die Summe von n Walzen eines k-seitigen Würfels.
- n d k * c (z. B. 4d6 * 10) beschreibt das Multiplizieren des Ergebnisses mit einer Konstanten c.
- Wir können auch Rollen (zB 4d6 * 10 + 40d6) und Konstanten (zB 4d6 + 10) hinzufügen.
Für einen einzelnen Würfelwurf können wir zeigen, dass:
- Mittelwert : E [1d k ] = (k + 1) / 2
- Varianz : Var (1d k ) = (k - 1) (k + 1) / 12
Anhand der grundlegenden Eigenschaften von Mittelwert und Varianz können wir ferner schließen, dass:
- Mittelwert : E [ m d k * a + n d l * b + c ] = am .E [1d k ] + bn [1d. L ] + c
- Variance : Var ( m d k * a + n d l * b + c ] = a . ² m .var (1d k ) + b ². N .var (1d l )
Aufgabe
Bei drei Ganzzahlen n , k und r sollte Ihr Programm eine Methode ausgeben, mit der Sie n d k in höchstens r Rollen approximieren können , mit den folgenden Einschränkungen:
- Die Lösung sollte den gleichen Mittelwert und die gleiche Varianz wie n d k haben .
- Die Lösung sollte die größtmögliche Anzahl von Rollen enthalten, die kleiner oder gleich r ist , da mehr Rollen eine gleichmäßigere Verteilung ergeben.
- Sie sollten Ihre Lösungen darauf beschränken, nur k- seitige Würfel zu verwenden, es sei denn, Sie streben den Bonus an (siehe unten).
- Wenn es keine Lösung gibt (da r zu klein ist), sollte das Programm den String "I AM A SEXY SHOELESS GOD OF WAR!" Ausgeben.
- Die Parameter werden als einzelne, durch Leerzeichen getrennte Zeichenfolge übergeben.
- Sie können annehmen, dass 1 ≤ n ≤ 100, 1 ≤ r ≤ n und k einer von 4, 6, 8, 10, 12 und 20 ist (die Standardwürfel, die in Tischplatten verwendet werden).
- Die Ausgabe sollte das in Notation beschriebene Format haben (z. B. 4d6 * 10 + 5), mit optionalen Leerzeichen um + s, aber nirgendwo anders. Einheitenmultiplikatoren sind ebenfalls optional: Sowohl 4d6 * 1 als auch 4d6 sind gültig.
Sie können ein Programm oder eine Funktion schreiben und Eingaben über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen. Die Ergebnisse sollten an STDOUT (oder die nächstgelegene Alternative) ausgegeben oder als Zeichenfolge zurückgegeben werden.
Beispiele
>> "10 6 10"
10d6
>> "10 6 4"
2d6*2+2d6+14
>> "10 6 3"
1d6*3+1d6+21
>> "10 6 2"
1d6*3+1d6+21
>> "10 6 1"
I AM A SEXY SHOELESS GOD OF WAR!
Wertung
Kürzester Code gewinnt. Es gelten Standardregeln.
Bonus
-33% (vor Subtraktion abgerundet), wenn Ihr Programm auch Lösungen zurückgibt, die andere gültige Würfel als k enthalten (wobei die gültigen Werte, wie oben erwähnt, 4, 6, 8, 10, 12 und 20 sind). Wenn Sie sich dazu entschließen, sollten Sie solche Lösungen bei Bedarf immer zurückgeben und Lösungen behandeln, die mehrere Arten von Stempeln verwenden. Beispiel:
>> "7 4 3"
3d6+7