Implementieren Sie ein Programm oder eine Funktion, die gängige Würfel für Rollenspiele simuliert. Es sollte mindestens mit d6 und d20 umgehen, den beiden häufigsten Würfeln.
Es sollte jedoch so funktionieren, wie es stereotype Spieler erwarten, dass sie funktionieren, und nicht wie echte Würfel.
Es ist ein Scherz zwischen Spielern, dass man einen besonders glücklichen Würfel für einen sehr sehr wichtigen Wurf haben kann, indem man vorher viele Würfel wirft, diejenigen auswählt, die zu einer "1" geführt haben, und sie dann erneut wirft, bis man sie bekommt einige, die mehrmals eine "1" gewürfelt haben. Sie bewahren sie dann sorgfältig auf, da sie mehrmals hintereinander eine 1 gewürfelt haben. Daher sollte die Wahrscheinlichkeit, beim nächsten Mal eine 1 zu würfeln, äußerst gering sein.
Natürlich funktionieren Würfel im wirklichen Leben nicht so , weil die Würfe statistisch unabhängig sind.
Ihre simulierten Würfel müssen frühere Würfe berücksichtigen und ähnlich funktionieren, wie es der Spieler im Irrtum des Spielers erwartet. Wenn zum Beispiel viele niedrige Zahlen gewürfelt wurden, sollte die Wahrscheinlichkeit, eine höhere Zahl zu würfeln, erhöht werden.
Da dies jedoch Betrug ist, müssen Sie es gut verstecken . Dies bedeutet, dass ein gelegentlicher Blick auf das Programm nicht zeigen sollte, dass Sie betrogen haben. Dies bedeutet, dass es zu verdächtig wäre, die vorherigen Ergebnisse explizit zu speichern und sie bei jedem Wurf zu lesen. Sie müssen diese "Eigenschaft" Ihrer Würfel und Bonuspunkte verstecken, wenn Sie sie plausibel leugnen und als ehrlichen Fehler tarnen. (Zum Beispiel erstellen Sie Ihr eigenes RNG mit einem "unbeabsichtigten" Fehler.)
Wähler, bitte berücksichtigen Sie, wie gut dieser "Fehler" versteckt ist.
Die Programme sollten klar und nicht verschleiert sein. Es ist zu einfach, bösen Code in einem verschleierten Programm zu verstecken.
getRandomBetween(1,d)
würde mich veranlassen, tiefer in die Sprache zu schauen.Antworten:
Java
Es ist so einfach, dass es offensichtlich nichts verbirgt: Es
java.util.Random
ist ein einfacher linearer Kongruenzgenerator und verwendet eine Verwerfungstechnik, um die Gleichmäßigkeit sicherzustellen. So wird garantiert, dass in jedem Lauf des größten Vielfachen vonsize
weniger als 2 ^ 48 Samples die verteilt wird Zahlen gleichmäßig, die Anforderung zu erfüllen.quelle
java.util.Random
das ausgeführt wird, hat sehr wenig mit dem Verhalten dieser Antwort zu tun. Wirklich, worauf diese Antwort beruht, ist die Tatsache, dass sie wie jedes RNGjava.util.Random
einen Punkt hat, und wenn Sie eine Anzahl von Zahlen in der Reihenfolge des Zeitraums generieren, brechen seine statistischen Eigenschaften zusammen. Das ist nicht sehr interessant; Das gleiche würde sogar mit einem kryptografisch sicheren RNG wie Blum Blum Shub passieren, wenn Sie es lange genug laufen lassen.Rubin
Derzeit unterstützt nur d6, wird später d20 Unterstützung hinzufügen ...
Und siehe da - diese Würfel sind böse!
quelle
Haskell
Verwenden Sie eine zufällige Sache, um eine andere zufällige Sache zu machen: In diesem Fall mischen Sie Karten, um Würfelwürfe zu generieren.
Nimmt ein Argument, die Anzahl der Gesichter auf dem Würfel. Die Ausgabe ist wie folgt:
... und so weiter für alle Karten (Abwürfe werden nicht gedruckt). Zu offensichtlich?
quelle