Zaimplementuj program lub funkcję, która symuluje wspólne kości do gier RPG. Powinien obsługiwać przynajmniej d6 i d20, dwie najczęściej używane kości.
Powinno jednak działać tak, jak oczekują od stereotypowych graczy, a nie jak w prawdziwych kościach.
Żart między graczami polega na tym, że można mieć wyjątkowo szczęśliwą kostkę za bardzo ważny rzut, uprzednio rzucając dużą ilością kości, wybierając te, które dały wynik „1”, a następnie rzucając je ponownie, aż otrzymasz kilka, które rzuciły „1” wiele razy. Następnie ostrożnie je zachowaj, ponieważ rzuciły 1 wielokrotnie w sekwencji, więc prawdopodobieństwo rzutu 1 następnym razem powinno być bardzo niskie.
Oczywiście nie tak działają kości w prawdziwym życiu , ponieważ rzuty są statystycznie niezależne.
Twoje symulowane kości muszą brać pod uwagę wcześniejsze rzuty i działać podobnie do tego, jak hazardzista z błędu gracza oczekuje, że zadziała. Na przykład, jeśli wyrzucono wiele niskich liczb, należy zwiększyć prawdopodobieństwo wyrzucenia większej liczby.
Ponieważ jest to oszustwo, musisz to dobrze ukryć . Oznacza to, że przypadkowe spojrzenie na program nie powinno ujawniać, że oszukiwałeś. Oznacza to, że jawne zapisywanie poprzednich wyników i czytanie ich przy każdym rzucie byłoby zbyt podejrzane. Musisz ukryć tę „właściwość” swoich kości i punkty bonusowe, jeśli sprawisz, że będzie to możliwe, bez wątpienia, i ukryj to jako uczciwy błąd. (na przykład tworzysz własne RNG z „niezamierzoną” wadą)
Głosujący, proszę wziąć pod uwagę, jak dobrze ukryta jest ta „wada”.
Programy powinny być jasne i nie zaciemniać. Zbyt łatwo ukryć zły kod w zaciemnionym programie.
getRandomBetween(1,d)
spowodowałoby, że zajrzałbym głębiej.Odpowiedzi:
Jawa
Jest tak prosty, że oczywiście niczego nie ukrywa: ale
java.util.Random
jest prostym liniowym generatorem kongruencjalnym i wykorzystuje technikę odrzutu, aby zapewnić jednorodność, więc gwarantuje, że w każdej serii największej wielokrotnościsize
mniejszej niż 2 ^ 48 próbek rozdzieli liczby równomiernie, spełniając wymagania.źródło
java.util.Random
wykonuje, ma bardzo niewiele wspólnego z zachowaniem tej odpowiedzi. Naprawdę to, na czym polega ta odpowiedź, to fakt, że jak każdy RNGjava.util.Random
ma kropkę, a jeśli wygenerujesz liczbę liczb w porządku tego okresu, jej właściwości statystyczne się rozpadną. To nie jest bardzo interesujące; to samo stanie się z nawet bezpiecznym kryptograficznie RNG, takim jak Blum Blum Shub, jeśli uruchomisz go wystarczająco długo.Rubin
Obecnie obsługuje tylko d6, doda obsługę d20 później ...
I oto - te kości są paskudne!
źródło
Haskell
Użyj jednej losowej rzeczy, aby zrobić inną losową rzecz: w tym przypadku potasuj karty, aby wygenerować rzuty kostkami.
Przyjmuje jeden argument, liczbę twarzy na kości. Dane wyjściowe są takie:
... i tak dalej dla wszystkich kart (odrzuty nie są drukowane). Zbyt oczywisty?
źródło