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ść.
Odpowiedzi:
R , 59 bajtów
Wypróbuj online!
Utrzymuje liczenia w
T
, który jest następnie przekształcany do użycia jakoweights
argument dosample
(co następnie najprawdopodobniej normalizuje je do sumy1
).[<<-
Operatora do przypisania wartości doT
w jednym ze środowisk macierzyste (w tym przypadku tylko środowisko macierzysty jest.GlobalEnv
).źródło
T
? (Oprócz tego, że kod jest trudniejszy do odczytania!)T
lubF
wewnętrznie tej funkcji, a potem byłem zbyt leniwy, aby ją zmienić, gdy zdałem sobie sprawę, że potrzebuję globalnego przydziału.pawl
.Python 3 ,
11299 bajtówWypróbuj online!
Wyjaśnienie
Edycja: Zapisano 13 bajtów. Dzięki, attinat !
źródło
c,=
i upuszczania[0]
). Warto również zauważyć, żechoices
jest to Python05AB1E , 13 bajtów
Wypróbuj online!
Pobiera listę zliczeń jako dane wejściowe. Wysyła rzut i nowe liczy się.
Wyjaśnienie:
źródło
JavaScript (ES8), 111 bajtów
Wypróbuj online!
W jaki sposób?
Jest to raczej naiwna i prawdopodobnie nieoptymalna implementacja, która przeprowadza symulację zgodnie z opisem.
źródło
APL (Dyalog Unicode) , 32 bajty SBCS
-4 bajty przy użyciu replikacji zamiast indeksu interwału.
Wypróbuj online!
Zdefiniowane jako funkcja, która przyjmuje bieżący rozkład jako argument, drukuje wynikowy rzut matrycy i zwraca zaktualizowany rozkład. Pierwszy przebieg na TIO to 100 wywołań rozpoczynających się od
[0,0,0,0,0,0]
, drugi przebieg jest silnie tendencyjny w kierunku 1 z[0,100,100,100,100,100]
, a ostatni przebieg jest silnie tendencyjny w kierunku 6 w ten sam sposób.źródło
Perl 6 , 31 bajtów
Wypróbuj online!
Akceptuje bieżący rozkład ciężaru jako BagHash, zaczynając od tego, gdzie wszystkie ciężary wynoszą 1. Rozkład jest mutowany na miejscu.
Metoda BagHash
pick
wybiera losowo klucz przy użyciu powiązanych wag; waga tego klucza jest następnie zmniejszana o jeden. Jeśli w ten sposób waga jest zerowa,++«.{1..6}
zwiększa się masy wszystkich liczb 1-6.źródło
Wolfram Language (Mathematica) , 91 bajtów
Wypróbuj online!
źródło
JavaScript (ES6 +), 97 bajtów
Wyjaśnienie
Warto zauważyć, że w końcu wysadzić jeśli
w
przekracza długość 2 32 -1, co jest maksymalna długość tablicy w js, ale prawdopodobnie będziesz hit limit pamięci wcześniej, biorąc pod uwagę 32-bitową tablicę int 2 32 -1 długo 16GiB, a niektóre (większość?) Przeglądarek nie pozwalają na użycie więcej niż 4GiB.źródło
Perl 6 , 49 bajtów
Wypróbuj online!
Bierze poprzednie rolki jako torbę (multiset). Zwraca nową rolkę i nową dystrybucję.
Wyjaśnienie
źródło
Pyth ,
2220 bajtówWypróbuj online!
Dane wejściowe to poprzednie częstotliwości w postaci listy, dane wyjściowe następnego rzutu i zaktualizowane częstotliwości są oddzielone znakiem nowej linii.
źródło
Galaretka , 12 bajtów
Wypróbuj online!
Łącze monadyczne, które pobiera pojedynczy argument, bieżącą listę zliczeń i zwraca listę wybranych liczb oraz zaktualizowaną listę zliczeń.
Galaretka , 18 bajtów
Wypróbuj online!
Alternatywnie, oto link niladyczny, który zwraca wybrany numer i śledzi listę zliczeń w rejestrze.
źródło