Porque no hay suficientes desafíos simples de código de golf :
Cree un programa o función opcionalmente sin nombre que, dado (por cualquier medio) un número entero 1 ≤ N ≤ 10000, genera el valor Verdadero de su idioma con una probabilidad pseudoaleatoria de 1 / N, Falso de lo contrario.
Tenga en cuenta que se ha eliminado el requisito de denominación. Siéntase libre de editar las respuestas y las puntuaciones en consecuencia.
Algunos idiomas usan 1 (o -1) y 0 para Verdadero y Falso, eso también está bien.
Ejemplo:
Ejemplo de pruebas de entrada:
4 -> True
4 -> False
4 -> False
4 -> False
4 -> False
4 -> True
4 -> False
4 -> False
Es decir, 4; devuelve True con una probabilidad del 25% y False con una probabilidad del 75%.
N
que tenemos que aceptar?Respuestas:
Plantillas MediaWiki con ParserFunctions , 48 bytes
fuente
#time
, probablemente para actualizar la edad de las personas vivas, etc.Pyth, 3 bytes
Pruébalo en línea
Inversión simple de elección aleatoria de 0 a entrada
Divertidamente en Pyth no es posible hacer una función que lo haga sin esto
$
porque las funciones de Pyth se memorizan automáticamente.fuente
Q
relleno al final, de lo contrario habría respondido!O
;)CJam, 5 bytes
Tengo que ser rápido con estos ...
Pruébalo aquí.
Explicación
fuente
TI-BASIC, 4 bytes usando tokens de un byte
Determina si la parte entera de la entrada multiplicada por un número aleatorio en [0,1) es cero.
Ansrand<1
También funciona.fuente
MATL, 5 bytes
Tres versiones diferentes de este, todas de longitud 5.
que toma una entrada (
i
), genera un número entero aleatorio entre 1 y ese número (Yr
), y ve si es igual a 1 (1=
). Alternativamente,hacer un 1 (
l
, una solución alternativa porque hay un error al hacer1i
en este momento), tomar una entrada (i
), dividir para obtener 1 / N (/
), hacer un número aleatorio entre 0 y 1 (r
), y ver si el azar El número es menor que 1 / N. O,take e input (
i
), y multiplique por un número aleatorio entre 0 y 1 (r*
), y vea si el resultado es menor que 1 (1<
).En Matlab, no en MATL, puedes hacer esta función anónima
para 12 bytes, que se usa haciendo
ans(5)
, por ejemplo.fuente
JavaScript ES6, 15 bytes
-5 bytes gracias a Downgoat.
Basado en (usos) de la técnica de esta respuesta.
fuente
new Date
también puede funcionar y puede ahorrar algunos bytesJulia,
171615 bytesEsta es una función que genera un número entero aleatorio entre 1 y
n
prueba si es menor que 2. Habrá una probabilidad de 1 / n de que esto suceda y, por lo tanto, una probabilidad de 1 / n de regresartrue
.¡Salvado 1 byte gracias a Thomas Kwa!
fuente
Microscript II , 3 bytes
Lee un entero
n
, genera un entero aleatorio entre0
yn-1
(inclusive), luego aplica una negación booleana a ese valor.fuente
Candy , 2 bytes
H significa Heisen-double
n significa no
La 'n' se pasa con la bandera -i como entrada numérica. Los valores que quedan en la pila se imprimen al salir.
"Forma larga:
fuente
-i
como un byte.lambda x: random.random()<1/x
(sin golf) también se "especifica de forma gratuita" que el argumento es un número.En serio, 3 bytes
0
es falsey y1
es sincero. Pruébalo en líneaExplicación:
fuente
R,
3022 bytescódigo
Genera un número a partir de una distribución uniforme (0 a 1) y debe evaluar a verdadero 1 / n de las veces.
fuente
Japt, 6 bytes
Pruébalo en línea!
Mr
es equivalente a JS'sMath.random
. El resto es bastante obvio. Probablemente podría agregar una función numérica que genere un flotante aleatorio entre 0 y el número. Cuando esto sucede, se guardarán dos bytes:Versión alternativa:
Ð
es equivalente anew Date(
, y el objeto Fecha, cuando se le pide que convierta a un número, se convierte en la marca de tiempo actual en milisegundos. Por lo tanto, esto es completamente aleatorio, a menos que se ejecute varias veces por ms.fuente
Maravilloso , 21 bytes
He considerado
0
ser falso y1
sincero, aunque no hay una razón real para eso, ya que Marbelous realmente no tiene un if. Más Marbelousy se generaría como{0
verdadero y{>
falso. Esto se vería así:Pero no estoy seguro de que sea válido.
fuente
APL,
63 bytesEste es un tren de funciones que toma un número entero y devuelve 1 o 0 (APL verdadero / falso). Generamos un entero aleatorio de 1 a la entrada usando
?
, luego verificamos si la entrada es igual a ese entero. Eso da como resultado una probabilidad de 1 / entrada de verdadero.¡Guardado 3 bytes gracias a Thomas Kwa!
fuente
⊢
lugar de '+' porque+
significa Conjugar para números complejos. Por supuesto, no importa aquí, y+
es la función de identidad tradicional (no-op), pero ahora tenemos⊢
(lo mismo). Otros no-ops para escalares son:⌷
(materialize),⊃
(pick),⊂
(adjuntar),↑
(split),↓
(mix),∪
(unique),∊
(allist),,
(ravel),⍪
(table),⌽
(reverse),⊖
(reverse primero) y⍉
(transponer). Algunos cambian el escalar en un vector o matriz.PlatyPar , 3 bytes
#?
obtiene un número aleatorio[0,n)
donden
se ingresa.!
devuelvetrue
si el número anterior es0
, de lo contrario, regresafalse
.Utilizando funciones más recientes que fueron implementadas (pero desafortunadamente para mí no comprometidas) antes de que se hiciera esta pregunta, puedo bajarla a 2 con ¡
~!
Pruébelo en línea !fuente
Java, 43 bytes
fuente
a->a*Math.random()<1
Es más corto.C, 24 bytes
fuente
return
sin elf(n)
no tiene ningún sentido sintáctico.rand()%n
es una forma estándar de obtener un número aleatorio en el rango0..n-1
. Tiene razón, se basa enn
ser mucho más pequeño que,RAND_MAX
pero no hay un límite superior paran
mencionar en la pregunta. Un enfoque alternativo sería rechazar y volver a tirar todos los números desden
RAND_MAX, pero sería ineficaz en absoluton
.> <>, 27 + 3 para -v = 30 bytes
Aquí hay una solución no uniforme en absoluto donde modifico N la suma de 15876 selecciones aleatorias de 0 o 1:
N debe ingresarse en la pila con el indicador -v, la salida es 0 para falsey y 1 para verdadero.
Una solución mucho más inteligente y uniforme que funciona para 1/2 ^ N en su lugar:
Para una entrada 3 tienes 1/8 de posibilidades de obtener 1 y 7/8 de obtener 0.
Explicacion:
Agrego todo lo
x
que sea necesario en la cuarta línea y los rodeo con instrucciones, por lo que solo hay dos formas de salirx
: la salida falsey o la siguientex
. Si todosx
van en la dirección correcta, el último se dirigirá a la salida verdadera.Por ejemplo, para N = 5, el espacio de código final es el siguiente:
fuente
(iterNum/2)%N
. No creo que usar un número más bajo sea una solución tampoco. ¿Acaso no te entendí bien, o tendrías alguna idea adicional para mejorar la solución?Mathematica,
1816 bytesSolución básica El anónimo
Function
crea un número aleatorio en [0, 1), lo multiplica por su argumento y comprueba si aún es menor que 1.fuente
Python, 42 bytes
Editar : se eliminó la
time.time()
respuesta debido a la distribución.fuente
random
, vale la pena hacerfrom random import*
para ahorrarrandom.
.time
Aunque no por eso .n
el efecto podría ser notable. Creo que1>time.time()%1*n
podría funcionarrand
C ytime.time
Python ... Una característica obvia de este último es que devuelve el tiempo actual , que no tiene límites, por lo quetime.time()%n
tiene una distribución uniforme (durante períodos de tiempo lo suficientemente largos) para cualquiern
.TeaScript , 3 bytes
Pruébalo aquí.
Explicación
fuente
®
representa el carácter,'\xae'
por lo que es solo un byte. :)Fuzzy Octo Guacamole, 10 bytes
Explicación:
fuente
Perl 6 ,
108 bytesEste código crea un rango desde 0 hasta, pero excluye la entrada
*
. Luegopick
es uno al azar y!
devuelve True cuando recibe a0
.Esto toma la entrada
*
y la multiplica por un Num aleatorio y0..^1
luego devuelve True si era menor que1
.fuente
Prólogo (SWI), 24 bytes
Código:
quizás (+ P) es una función que tiene éxito con probabilidad P y falla con probabilidad 1-P
Ejemplo:
fuente
PowerShell, 25 bytes
La
Get-Random
función cuando se le da un-Ma
parámetro ximumn
devuelve un valor del rango[0,n)
. Aprovechamos eso restando 1 de nuestra entrada$args[0]
, por lo que estamos indexados adecuadamente a cero y obtenemos un valor aleatorio. Precisamente1/n
la mayor parte del tiempo, este valor será0
, así que cuando lo booleanos, no con!
él, devolveráTrue
. Los otros tiempos volveránFalse
.fuente
J, 3 bytes
Esta es una bifurcación monádica que lleva un argumento a la derecha. De manera similar a APL,? genera un entero aleatorio; sin embargo, las matrices J están basadas en cero. Entonces comparamos a 0 en lugar de a la entrada.
fuente
Minkolang 0.14 , 7 bytes
Pruébalo aquí.
Explicación
fuente
PHP, 22 bytes
Lee
n
desde la línea de comandos, como:Salidas
(
false
se convierte en una cadena vacía en PHP) o1
(en caso detrue
).fuente
C #,
5645 bytesGracias a, pinkfloydx33 es 45 ahora.
56 bytes antiguos
Genera un entero positivo aleatorio mayor o igual a 0 y menor que
n
y comprueba si es menor1
y devuelve el resultado de la comparación.fuente
Random.Next(k)
devuelve un número enterok
tal que0 <= k < n
. Al cambiar la condición a<1
, será correcta. Además, el uso de una expresión lambda puede acortar su código.0 < k <= n
y debería ser como dijiste. Lo corregiré de inmediato.var r
ahorra tres. O si es c # 6,bool a(int n) => new Random().Next(n)<1;
para 41. ¿Aunque no está seguro si inicializar una nuevaRandom
llamada por método funcionará correctamente en cuanto a distribución?Scratch , 63 bytes
Pruébalo en línea!
Imagen: Código de Scratchblocks :
fuente