Diseñe un generador de números aleatorios donde el i-ésimo número tenga un% de probabilidad de ocurrir para todos 0 <i <14. 0 debería tener exactamente un 9% de probabilidad de ocurrir. La semilla para el generador debe ser la hora del sistema. No puede usar una función predefinida para la generación de números aleatorios.
Básicamente 1 tiene 1% de probabilidad de ocurrir, 2 tiene 2% de probabilidad y así sucesivamente hasta 13 con 13% de probabilidad de ocurrir. Este es el código de golf, por lo que gana el código más corto.
code-golf
math
random
probability-theory
fantasmas_en_el_código
fuente
fuente
<
de la desigualdad y el>
del bloque de comillas formaban una etiqueta HTML.Respuestas:
CJam, 14 bytes
Pruébalo aquí.
Explicación
fuente
mR
?Pitón 2, 54
La expresión
f(t) = ((8*t+1)**.5+1)//2
transforma una distribución uniforme en una distribución entera triangular al mapear los intervalosConvertimos los dígitos de milisegundos del tiempo a un flotador uniforme de 0 a 100 haciendo
time.time()*1e4%100
. En realidad, lo hacemos%800
para reemplazar la multiplicación por 8 en el paso de conversión. Al final, 14 se convierten en 0 haciendo%14
.fuente
Pyth - 14 bytes
Genera una matriz con la distribución especificada, luego elige una aleatoria.
Pruébelo en línea aquí .
fuente
Dyalog APL , 20 bytes
⍳13
enteros 1 a 13(/⍨
...)
replicarse por sí mismo, por ejemplo,/⍨3
es3 3 3
y/⍨2 3
es2 2 3 3 3
n
↓
... soltar n elementos (deja la lista vacía si n > longitud de la lista)⎕TS
marca de tiempo del sistema, por ejemplo, 2015 11 1 13 28 56 834⊃⌽
último elemento, es decir, milisegundos actuales 0–999⌊.1×
multiplicar con 0.1 y redondear hacia abajo el⊃
primer elemento, da 0 si los datos están vacíosfuente
Procesamiento 3, 65
5574bytesObtenga un número aleatorio del 0 al 99 (inclusive). Si el número es 0-8, imprime 0, si es 9 imprime 1, si 10-11 imprime 2, si 12-14 imprime 3, etc.
Nadie lo notó, pero el problema con el código anterior es que millis () devuelve la cantidad de tiempo que la aplicación ha estado ejecutándose, lo que daría números muy similares en ejecuciones posteriores del programa. ¡Al menos ahora tenemos nano precisión!
fuente
PHP, 50 bytes
microtime
devuelve el tiempo como una cadena como "0.04993000 1446409253", cuando multiplico esto por 100, PHP coacciona la cadena a 0.04993000, resultado 4.993000. Entonces$t
se inicializa con un número "aleatorio" en[0,100)
$t
hasta que llegue a 0fuente
;echo
lugar de?><?=
, para el mismo recuento de bytes. Pero bien hecho!Python3, 86 bytes
sencillo:
fuente
J - 28 char
Este era tonto.
6!:0''
es elY M D h m s
tiempo actual como una lista de 6 elementos, donde los milisegundos se representan como fracciones en los segundos; para obtenerlos, no tenemos más remedio que multiplicar los segundos ({:
) por1e3
. Mientras tanto,#~i.14
es una lista de cero 0s, uno 1, dos 2s, y así sucesivamente hasta trece 13s, y lo completamos con 100 elementos100{.
.J no tiene indexación cíclica, por lo que puede ser tentador tomar el módulo 100 de milisegundos antes de indexar la lista grande. Sin embargo, podemos guardar dos caracteres al usar
$
para extender cíclicamente la lista de 100 elementos a la cantidad de milisegundos que obtengamos (de 0 a 60999 ) y tomar la última entrada.No es que una lista de 60000 elementos sea una gran cantidad de memoria utilizada ni nada, simplemente se siente como una exageración: P
fuente
JavaScript (ES6) 116
Esta es una adaptación de un RNG sin semillas simple que he usado en lugar del RNG estándar de javascript que no se puede sembrar (y por lo tanto no es repetible)
fuente
TI-BASIC, 18 bytes
100fPart(sub(getTime
obtiene el residuo aleatorio entre 0 y 99. El número triangular (n-1) es igual a(N^2+N)/2
, por lo que el inverso es igual a√(2y+1)-.5
. Piso esto después de ajustar hacia abajo por 9, y tenemos el resultadoEl único problema es que para residuos de menos de 8, obtenemos una raíz cuadrada imaginaria. Entonces, tomamos la parte real para que el programa produzca 0 en su lugar.
fuente
Perl 5, 51 bytes
50 bytes + 1 para en
-E
lugar de-e
:fuente