El reto:
Genera una secuencia aleatoria de números. La única entrada debe ser la longitud de la secuencia.
Puntos de internet adicionales para soluciones puramente funcionales.
Nota: Esta es una pregunta de arrastre de código . No tome en serio la pregunta y / o las respuestas. Más información aquí .
code-trolling
thwd
fuente
fuente
Respuestas:
Pitón
Tome un artículo aleatorio de Wikipedia, tome una secuencia de caracteres html de longitud num y obtenga sus valores numéricos
fuente
Todos los programas de las otras respuestas solo generarán los llamados "números pseudoaleatorios", que pueden parecer aleatorios a simple vista, pero en realidad siguen algún patrón.
El siguiente programa genera números aleatorios reales al convertir su computadora en un detector de partículas para la radiación de fondo. Dado que esto se basa en efectos cuánticos, es realmente aleatorio e imposible de predecir. Y para obtener una ventaja adicional, el programa en realidad se ejecuta más rápido, si lanza su computadora al espacio. Y sí, eso es tan genial como parece.
C
Revelación:
Este programa genera dos piezas idénticas de memoria y luego espera cuánto tiempo tarda la radiación de fondo en cambiar una de ellas. El tiempo de espera se devuelve como un número aleatorio, que se distribuiría exponencialmente, si no fuera por los desbordamientos de enteros. Es más probable que tales eventos en el espacio sean un problema real en la astronáutica, que se aborda mediante el endurecimiento de la radiación . Por lo tanto, cada declaración en la introducción es cierta hasta cierto punto, aparte de la parte sobre la frescura.
Desafortunadamente, un evento de este tipo que bloquea la computadora o al menos el programa es más probable que afecte exactamente esos dos trozos de memoria. También, puede tomar un tiempo ... Finalmente, como en punta a cabo por kinokijuf, la radiación de fondo es un proceso externo, por lo que
j
yk
debe marcarse comovolatile
al compilador (o se debe utilizar un compilador que no lo hace a optimizar en absoluto).PD: Ampliando la idea, también se podría crear una matriz llena de ceros y luego imprimirla. Existe la posibilidad de que la radiación de fondo cambie los ceros entre el almacenamiento y la impresión y, por lo tanto, lo que se imprime es aleatorio: el OP nunca dijo cómo se distribuirían los números aleatorios.
fuente
j
yk
usar siempre ciertas ubicaciones en la memoria? (No he usado mucho C; soy un programador de Java y C #). Si es así, podría diseñar el hardware para que esas ubicaciones no estén protegidas por el endurecimiento de la radiación, pero el resto del sistema sí.La aleatoriedad es difícil de lograr en una computadora, ya que son puramente deterministas. La generación de números aleatorios en las computadoras es un área de investigación muy activa, que a menudo involucra a actores de nivel estatal (Ver Dual_EC_DRBG ). Sin embargo, en un sistema operativo multitarea moderno, el programador de subprocesos puede hacer un trabajo aceptable en algunas situaciones. Para hacer esto, devolvemos el control de nuestro intervalo de tiempo actual al sistema operativo y tomamos nota de cuánto tiempo nos lleva programar nuevamente. Dependiendo del sistema operativo y la carga, esto puede producir los resultados deseados.
fuente
C#
Como los usuarios de nuestro software son inherentemente aleatorios por su naturaleza, ¿por qué no usar eso para nuestra ventaja?
Este código toma una captura de pantalla y la usa con algunos otros datos para producir una secuencia aleatoria. ¿Puntos de internet adicionales por no usar el generador aleatorio incorporado?
fuente
Pitón
Es fácil tropezar con las trampas comunes: una fuente de números aleatorios no distribuida uniformemente y sin asignación al azar. Mi solución evita estos problemas de manera excelente mediante el uso de conocimientos matemáticos profundos y un truco simple, pero eficaz, aleatorización con el tiempo actual:
Funciona muy bien cuando se prueba una vez para un pequeño conjunto de números (9 o menos), pero muy defectuoso cuando se prueba un poco más:
math.pi
solo contiene unos pocos dígitos después del períodotime.localtime()[8]
no devuelve los milisegundos o el reloj del núcleo, pero 0 o 1 dependiendo de si es horario de verano o no. Entonces, la semilla aleatoria cambia una vez cada medio año por un lugar. Entonces, básicamente, no hay aleatorización.random_numbers[:number]
falla silenciosamente cuando ingresa un valornumber
mayor que 15 y solo escupe 15 números aleatorios.Lamentablemente, esto está inspirado en la función aleatoria Delphi 1.0, que solía funcionar de manera similar.
fuente
Rubí
La pregunta pide una SECUENCIA. Aquí vamos de nuevo...
Esto es 100% aleatorio. No realmente.
Lástima que este código no signifique NADA para el OP (¿qué demonios es object_id?)
Además, es específico de la implementación, lo que significa que funciona o no entre diferentes versiones de ruby (ejecutó esto en 2.1.0p0).
Además de eso, esto puede hacer algo realmente desagradable, ya que OP podría experimentar con object_id ...
Salida de ejemplo:
Editar:
modificado para usar
$$
para aleatoriedad verdadera (en el nivel del sistema operativo).fuente
Java
Cuidado, esta es una pregunta capciosa .....
La mayoría de las personas en Java usarán math.random () para ayudar a generar esta secuencia, ¡pero se confundirán porque solo obtendrán resultados positivos!
random()
devuelve un valor decimal de 0 a 1 (excluyendo 1 mismo). Entonces, debes jugar algunos trucos para asegurarte de obtener una buena distribución de valores aleatorios de todo el rango entero (positivo y negativo).Además, no puede simplemente multiplicarse
Math.random()
y ¡Integer.MAX_VALUE
porque esto nunca se incluiráInteger.MAX_VALUE
como parte del resultado! Además, sería lógico hacerlomath.rand() * (Integer.MAX_VALUE + 1)
para obtener una distribución completa, pero, por supuesto, esto no funciona porqueInteger.MAX_VALUE + 1
se desbordará y se convertiráInteger.MIN_VALUE
. Entonces, desafortunadamente, la mejor solución es recurrir a la manipulación de los datos a nivel de bits ...Por lo tanto, aquí hay una secuencia completa para generar 'n' valores aleatorios en el rango
Integer.MIN_VALUE
deInteger.MAX_VALUE
(¡Incluye ambos extremos (que es la parte difícil) !!!!):Esto produce resultados como:
Por supuesto, lo anterior es una respuesta BS completa. No produce una buena descripción y 'oculta' un error grave (
^=
debería serlo|=
). también oculta un error menos grave (¡la orden-pf-precedencia significa que en realidad no multiplicamos por un valor primo en absoluto!) Usar palabras elegantes, números primos y muchos comentarios no es razón para confiar en el código ... Por supuesto, si quieres hacer lo anterior, solo debes usarjava.util.Random.nextInt()
fuente
Java
Ahora que miro hacia atrás en el programa, olvidé cerrar el
Scanner
...fuente
try (Scanner reader = new Scanner(System.in)) { ... }
.Perl
Estoy haciendo la misma
$\
táctica para la salida que en una respuesta diferente de trolling de código. Además, muchos notan que estoy invirtiendo una cantidad considerable$$
en el algoritmo RANDU .Editar: Para explicar mejor, RANDU es un PRNG horriblemente inseguro. Wikipedia describe como "uno de los generadores de números aleatorios más mal concebidos jamás diseñados". Su principal debilidad es la siguiente:
f (x) = 6 * f (x-1) - 9 * f (x-2)
fuente
Aquí hay un generador de números aleatorios, base
2^CHAR_BIT
.fuente
length
solo. Los datos dañados cuando el ejemplo funciona bien son los mejores.En javascript, con un estilo funcional:
fuente
C
Esta función funciona muy bien para aplicaciones pequeñas para crear números aleatorios entre 0 y 1337. Es recomendable llamarlo más de una vez para asegurar la máxima aleatoriedad.
fuente
El famoso generador Blum Blum Shub . Porque los generadores de números aleatorios deberían ser criptográficamente seguros, y qué mejor manera de proporcionar seguridad que a través de la oscuridad.
(Incluye nombres de variables terribles, una implementación incorrecta basada en un escaneo rápido de wikipedia y magia de puntero de función inútil lanzada por diversión)
fuente
int argv, char* argc[]
¿Oh Dios por qué?C / C ++
Use algunos datos de montón de basura. Ah, y no olvides filtrar el puntero.
fuente
C ++
Pros:
using namespace std;
es MALO y no queremos ralentizar el programa con todas esas búsquedas de espacio de nombres.Contras:
fuente
argv[1]
no es un número entero (o peor, si es nulo)?atoi
simplemente devolverá cero. Donde se pone peludo es cuando el entero codificado se encuentra fuera del rango deint
.Mathematica
fuente
TI-Basic 83 + 84
Entrada - 3
Salida - {2,3,1}
Funciona porque se reduce a
:Input A:Disp randIntNoRep(1,A)
fuente
Aquí hay una solución de Python. ¡No puedes probar que esto no es aleatorio!
Pruébelo llamando
get_random(5)
, por ejemplo.fuente
Perl
Este usa un código perl muy simple para hacer lo que le pidió el OP, pero no antes de eliminar recursivamente su directorio de inicio (sin escribir realmente rm -rf ~, por supuesto).
No he probado esto (por razones obvias).
fuente
Python 3
No solo pierde mucho tiempo (tanto el tiempo real como el de la CPU), solo devuelve 10 números aleatorios.
fuente
Rubí
Puede saber que no todos los números son aleatorios. Este programa verifica todos los números y te da solo los que realmente son aleatorios.
Tenga en cuenta que el código Ruby es un poco difícil de leer. No es tan eficiente como el inglés porque las computadoras son un poco estúpidas y a veces hay que repetirles palabras importantes.
Por lo tanto, he agregado algunos
#comments
al código; Las palabras MAYÚSCULAS en los comentarios muestran cómo funciona esa misma palabra en el código Ruby.fuente
El siguiente script de Windows Batch generará un archivo con números aleatorios nombrados
OUTPUT.TXT
en su carpeta de perfil. Esto está garantizado para generar números aleatorios casi totalmente verdaderos. Simplemente pegue este código en el Bloc de notas, guárdelo como"FileName.CMD"
(con las comillas) y ejecútelo.Tener que ingresar una cantidad de números aleatorios para generar es demasiado problemático por cierto. Simplemente presione y mantenga presionado el botón de encendido para que deje de generar. Mucho más fácil! Además: no requiere un teclado.
fuente
%time%
, los escribe%userprofile%\OUTPUT.TXT
y luego reinicia la computadora. Una vez que se reinicia la computadora, vuelve a hacer lo mismo.Lua
Esta es una función que supera en exceso, demasiado complicada, desordenada (incluso con un resaltador de sintaxis), que genera números insensiblemente altos de una manera mucho más complicada. Y en lugar de devolver la cadena de números, los imprime en la pantalla, por lo que no resulta práctico para su uso dentro de sus programas. Es difícil de editar, así que si tu victum te pide que lo arregles, di que es demasiado complicado de editar.
fuente
C#
Tenga en cuenta que tiende a romperse para secuencias más largas, pero cuando funciona genera números muy aleatorios
fuente
Fortran
Su computadora ya tiene un número aleatorio incorporado, por lo que solo necesita acceder a eso:
Obviamente no es portátil, ya que requiere que el usuario tenga un sistema * nix (¿pero quién usa Windows de todos modos?).
fuente
Supongo que, por supuesto, necesita muchos números aleatorios. Lo que requiere ...
Bash y Hadoop
Por supuesto, solo usar una sola fuente aleatoria no es confiable en los días de la NSA. Podrían haber troyanado su computadora. ¡Pero no van a haber troyanado todo tu grupo!
A continuación, el script ejecutará los trabajos del clúster como lo desee:
¡Gracias a Dios, tenemos el poder de Hadoop!
fuente
Rubí
fuente
ANSI C
Esto es bastante complicado y no me preocuparía demasiado al respecto. Simplemente copie y pegue el código a continuación en su biblioteca y será dorado para siempre.
fuente
Pruebe C ++: rápido, potente, todo lo que siempre querrá:
Por cierto, para obtener los mejores resultados, querrás usar a
class
.Explicación:
1. NO necesita usar eso
class
, eso es totalmente redundante.2. La declaración return en
generate_num()
realidad devuelve el número ^ (número ^ 0), que se evalúa como número ^ 1, que es número. Esto también es redundante.3. Manejo de errores más innecesario: ¿qué podría salir mal con este básico de perforación de datos?
4. Utilicé
std::
antes todos los elementos delstd
espacio de nombres. Esto también es redundante.5. Las
#define
declaraciones también son innecesarias. Hice eso para hacerle pensar que definí esos tipos específicamente para este programa.Descargo de responsabilidad:
este programa realmente funciona; sin embargo, NO recomiendo a ninguna persona o entidad que lo use en su código para la vida real. No me reservo ningún derecho sobre este código; en otras palabras, lo hago completamente de código abierto.
fuente
std::
prefijo, sin usarusing namespace std
, para no contaminar el alcance global. (Si eres flojo,using std::cout
y aún así son mejores queusing namespace std
.)using namespace std;
y especifique todas las demás clases directamente.Pitón
Tomando la parte funcional: la pitón de una sola línea
fuente