L'errore del giocatore è un pregiudizio cognitivo in cui ci aspettiamo erroneamente che le cose che si sono verificate spesso abbiano meno probabilità di accadere in futuro e le cose che non si sono verificate da un po 'di tempo avranno maggiori probabilità di accadere presto. Il tuo compito è implementare una versione specifica di questo.
Spiegazione della sfida
Scrivi una funzione che restituisce un numero intero casuale compreso tra 1 e 6, inclusi. Il problema: la prima volta che viene eseguita la funzione, il risultato dovrebbe essere uniforme (entro l'1%), tuttavia ogni chiamata successiva sarà distorta a favore di valori che sono stati lanciati meno volte in precedenza. I dettagli specifici sono i seguenti:
- Il dado ricorda i conteggi dei numeri generati finora.
- Ogni risultato è ponderato con la seguente formula:
- Ad esempio, se il tiro conta finora è , i pesi saranno , vale a dire che si sarà 4 volte più probabilità di ottenere un che un .
- Si noti che la formula indica che un risultato di rollio di è ponderato come
Regole e presupposti
- Si applicano le regole I / O standard e le lacune vietate
- I tiri di dado non dovrebbero essere deterministici. (ad esempio, utilizzare un PRNG con seeding da una fonte volatile, in quanto è generalmente disponibile come incorporato).
- La tua fonte casuale deve avere un periodo di almeno 65535 o essere vera casualità.
- Le distribuzioni devono essere entro l'1% per pesi fino a 255
- Gli RNG a 16 bit sono abbastanza buoni da soddisfare entrambi i requisiti di cui sopra. La maggior parte degli RNG integrati sono sufficienti.
- Puoi passare la distribuzione corrente fintanto che tale distribuzione è mutata dalla chiamata o la distribuzione post-lancio viene restituita insieme al tiro di dado. L'aggiornamento della distribuzione / conteggi fa parte di questa sfida .
- È possibile utilizzare pesi anziché conteggi. Nel fare ciò, ogni volta che un peso scende a 0, tutti i pesi dovrebbero aumentare di 1 per ottenere lo stesso effetto della memorizzazione dei conteggi.
- È possibile utilizzare questi pesi come ripetizioni di elementi in un array.
In bocca al lupo. Possano i byte essere sempre a tuo favore.