Błąd gracza jest uprzedzeniem poznawczym, w którym błędnie spodziewamy się, że rzeczy, które miały miejsce, często będą mniej prawdopodobne w przyszłości, a rzeczy, które nie zaistniały od dłuższego czasu, prawdopodobnie będą miały miejsce wkrótce. Twoim zadaniem jest wdrożenie określonej wersji tego.
Wyzwanie Wyjaśnienie
Napisz funkcję, która zwraca losową liczbę całkowitą od 1 do 6 włącznie. Haczyk: przy pierwszym uruchomieniu funkcji wynik powinien być jednorodny (w granicach 1%), jednak każde kolejne wywołanie będzie przekrzywione na korzyść wartości, które rzuciło się wcześniej kilka razy. Szczegółowe informacje są następujące:
- Kostka pamięta liczbę wygenerowanych do tej pory liczb.
- Każdy wynik jest ważony według następującego wzoru:
- Na przykład, jeśli dotychczasowe liczby rzutów wynoszą , wagi będą wynosić , to znaczy, że będziesz 4 razy bardziej prawdopodobne, że wyrzuci niż .
- Zauważ, że wzór oznacza, że wynik rzutu jest ważony tak samo jak
Zasady i założenia
- Obowiązują standardowe zasady we / wy i zakazane luki
- Rzuty nie powinny być deterministyczne. (tzn. użyj PRNG z niestabilnego źródła, jak zwykle jest dostępne jako wbudowane).
- Twoje losowe źródło musi mieć okres co najmniej 65535 lub być prawdziwą przypadkowością.
- Rozkłady muszą zawierać się w granicach 1% dla wag do 255
- 16-bitowe RNG są wystarczająco dobre, aby spełnić oba powyższe wymagania. Większość wbudowanych RNG jest wystarczająca.
- Możesz przekazać aktualną dystrybucję, o ile rozkład ten jest albo mutowany przez wywołanie, albo dystrybucja po rzucie jest zwracana obok rzutu. Aktualizacja dystrybucji / zliczeń jest częścią tego wyzwania .
- Możesz używać wag zamiast zliczeń. Robiąc to, ilekroć waga spadnie do 0, wszystkie ciężary powinny wzrosnąć o 1, aby osiągnąć taki sam efekt, jak liczenie zapasów.
- Możesz użyć tych wag jako powtórzeń elementów w tablicy.
Powodzenia. Niech bajty będą zawsze na twoją korzyść.