introduzione
Ti viene dato un generatore di numeri interi casuali con la seguente implementazione
- La prima chiamata restituisce sempre 1.
- La seconda invocazione restituisce un numero intero casuale compreso tra 1 e 2.
- La terza invocazione restituisce un numero intero casuale compreso tra 1 e 3.
- L'ennesima chiamata restituisce un numero intero casuale compreso tra 1 e n, incluso.
Sulla base della funzione sopra, scrivi un generatore di dadi casuale che sia perfettamente casuale, restituendo un valore compreso tra 1 e 6 (compreso) con uguale probabilità.
Regole
- Il tuo programma / funzione dovrebbe risultare in un numero intero casuale compreso tra 1 e 6, incluso, in qualche forma utilizzabile, ovvero in output standard o come valore di ritorno della funzione.
- Il generatore di numeri casuali ascendente sopra può essere definito come una funzione "libera" nel tuo programma (ovvero, non conta per il conteggio dei caratteri) o uno script / programma separato che viene eseguito secondo necessità, supponendo che lo stato (
n
) sia persistente tra le chiamate. - Supponi che non saranno mai richiesti più di 1000 tiri di dado in un singolo caso del tuo programma e che il generatore di numeri casuali iniziale può essere resettato alla
1
fine di 1000 tiri di dado per evitare il trabocco din
. - Il tuo programma non può usare nessun'altra fonte di numeri casuali tranne il generatore casuale ascendente sopra definito. Ovviamente puoi richiedere più numeri casuali al generatore di numeri casuali per ogni singolo lancio di dadi.
- Questo è code-golf, quindi il vincitore è la risposta più breve o la maggior parte dei voti in caso di pareggio. Se riesci a generare 1000 tiri di dado usando meno di 1000 numeri casuali generati, concediti un bonus di efficienza di 10 punti .
Esempio
./asc-rand
1 # random integer between 1 and 1
./asc-rand
1 # random integer between 1 and 2
./asc-rand
3 # random integer between 1 and 3
./asc-rand
4 # random integer between 1 and 4
# dice-gen generates random dice based on output of asc-rand program.
./dice-gen
3
./dice-gen
6
./dice-gen
5
./dice-gen
1
iterate(6):b=asc-rand(); print b
illegale o non funziona? Potrei fraintendere la terza regola.