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%.

Nque 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
Qrelleno 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<1Tambié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 hacer1ien 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 Datetambién puede funcionar y puede ahorrar algunos bytesJulia,
171615 bytesEsta es una función que genera un número entero aleatorio entre 1 y
nprueba 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 entre0yn-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
-icomo 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
0es falsey y1es 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!
Mres 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
0ser falso y1sincero, aunque no hay una razón real para eso, ya que Marbelous realmente no tiene un if. Más Marbelousy se generaría como{0verdadero 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)dondense ingresa.!devuelvetruesi 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()<1Es más corto.C, 24 bytes
fuente
returnsin elf(n)no tiene ningún sentido sintáctico.rand()%nes una forma estándar de obtener un número aleatorio en el rango0..n-1. Tiene razón, se basa ennser mucho más pequeño que,RAND_MAXpero no hay un límite superior paranmencionar en la pregunta. Un enfoque alternativo sería rechazar y volver a tirar todos los números desdenRAND_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
xque 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 todosxvan 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
Functioncrea 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..timeAunque no por eso .nel efecto podría ser notable. Creo que1>time.time()%1*npodría funcionarrandC ytime.timePython ... Una característica obvia de este último es que devuelve el tiempo actual , que no tiene límites, por lo quetime.time()%ntiene 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
*. Luegopickes uno al azar y!devuelve True cuando recibe a0.Esto toma la entrada
*y la multiplica por un Num aleatorio y0..^1luego 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-Randomfunción cuando se le da un-Maparámetro ximumndevuelve 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/nla 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
ndesde la línea de comandos, como:Salidas
(falsese 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
ny comprueba si es menor1y devuelve el resultado de la comparación.fuente
Random.Next(k)devuelve un número enteroktal 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 <= ny debería ser como dijiste. Lo corregiré de inmediato.var rahorra tres. O si es c # 6,bool a(int n) => new Random().Next(n)<1;para 41. ¿Aunque no está seguro si inicializar una nuevaRandomllamada por método funcionará correctamente en cuanto a distribución?Scratch , 63 bytes
Pruébalo en línea!
Imagen: Código de Scratchblocks :
fuente