Le défi:
Générez une séquence aléatoire de nombres. La seule entrée doit être la longueur de la séquence.
Points Internet supplémentaires pour des solutions purement fonctionnelles.
Remarque: Il s'agit d'une question de contrôle de code . Veuillez ne pas prendre la question et / ou les réponses au sérieux. Plus d'informations ici .
code-trolling
thwd
la source
la source
Réponses:
Python
Prenez un article wikipedia aléatoire, et prenez une séquence de caractères html de longueur num, et obtenez leurs valeurs numériques
la source
Tous les programmes des autres réponses ne généreront que ce que l'on appelle des «nombres pseudo-aléatoires», qui peuvent sembler aléatoires à l'œil non averti mais suivent en fait un certain schéma.
Le programme suivant génère des nombres aléatoires réels en transformant votre ordinateur en un détecteur de particules pour le rayonnement de fond. Comme cela est basé sur des effets quantiques, c'est vraiment aléatoire et impossible à prévoir. Et pour un bonus, le programme s'exécute en fait plus rapidement, si vous lancez votre ordinateur dans l'espace. Et oui, c'est aussi cool que cela puisse paraître.
C
Divulgacher:
Ce programme génère deux morceaux de mémoire identiques et attend ensuite combien de temps il faut au rayonnement de fond pour en changer un. Le temps d'attente est ensuite renvoyé sous forme de nombre aléatoire, qui serait distribué de manière exponentielle, s'il n'y avait pas de débordements d'entiers. De tels événements étant plus probables dans l'espace est un problème réel en astronautique, qui est résolu par le durcissement par rayonnement . Donc, chaque déclaration dans l'introduction est vraie dans une certaine mesure, à l'exception de la fraîcheur.
Malheureusement, un tel événement faisant planter l'ordinateur ou au moins le programme est plus probable qu'il n'affecte exactement ces deux morceaux de mémoire. En outre, cela peut prendre un certain temps… Enfin, comme l'a souligné kinokijuf, le rayonnement de fond est un processus externe,
j
etk
doit donc être marqué en ce quivolatile
concerne le compilateur (ou vous devez utiliser un compilateur qui n'optimise pas du tout).PS: En développant l'idée, on pourrait également créer un tableau rempli de zéros et l'imprimer. Il y a une chance que le rayonnement de fond modifie les zéros entre le stockage et l'impression et donc ce qui est imprimé est aléatoire - l'OP n'a jamais dit comment les nombres aléatoires devaient être distribués.
la source
j
et d'k
utiliser toujours certains emplacements en mémoire? (Je n'ai pas beaucoup utilisé C; je suis un programmeur Java et C #.) Si c'est le cas, vous pouvez concevoir le matériel de sorte que ces emplacements ne soient pas protégés par le durcissement par rayonnement, mais le reste du système l'est.L'aléatoire est difficile à réaliser sur un ordinateur, car ils sont purement déterministes. La génération de nombres aléatoires sur les ordinateurs est un domaine de recherche très actif, impliquant souvent des acteurs au niveau de l'État (voir Dual_EC_DRBG ). Cependant, sur un système d'exploitation multitâche moderne, le planificateur de threads peut effectuer un travail passable dans certaines situations. Pour ce faire, nous cédons le contrôle de notre tranche de temps actuelle au système d'exploitation et prenons note du temps qu'il nous faut pour être planifié à nouveau. Selon le système d'exploitation et la charge, cela peut produire les résultats souhaités.
la source
C #
Les utilisateurs de nos logiciels étant intrinsèquement aléatoires par nature, pourquoi ne pas les utiliser à notre avantage?
Ce code prend une capture d'écran et l'utilise avec d'autres données pour produire une séquence aléatoire. Points Internet bonus pour ne pas utiliser le générateur aléatoire intégré?
la source
Python
Il est facile de tomber sur les pièges courants: une source de nombres aléatoires non uniformément distribuée et aucune randomisation. Ma solution évite superbement ces problèmes en utilisant des connaissances mathématiques approfondies et une astuce simple mais efficace, la randomisation avec l'heure actuelle:
Fonctionne très bien lorsqu'il est testé une fois pour un petit ensemble de nombres (9 ou moins), mais il est testé un peu plus:
math.pi
ne contient que quelques chiffres après la périodetime.localtime()[8]
ne renvoie pas les millisecondes ou l'horloge du noyau, mais 0 ou 1 selon qu'il s'agit de l'heure d'été ou non. Ainsi, la graine aléatoire change une fois tous les six mois d'un endroit. Donc, fondamentalement, pas de randomisation.random_numbers[:number]
échoue silencieusement lorsque vous entrez un nombrenumber
supérieur à 15 et ne recrache que 15 nombres aléatoires.Malheureusement, cela est inspiré par la fonction aléatoire Delphi 1.0, qui fonctionnait de la même manière.
la source
Rubis
La question demande une SEQUENCE. On y va encore une fois...
C'est 100% aléatoire. Pas vraiment.
Dommage que ce code ne signifie RIEN pour l'OP (qu'est-ce que l'enfer est object_id?)
De plus, il est spécifique à l'implémentation, ce qui signifie qu'il fonctionne ou non entre les différentes versions de ruby (exécuté cela sur 2.1.0p0).
En plus de cela, cela peut potentiellement faire quelque chose de vraiment méchant, car OP pourrait expérimenter avec object_id ...
Exemple de sortie:
Éditer:
modifié pour utiliser
$$
pour un vrai hasard (au niveau du système d'exploitation).la source
Java
Attention, c'est une question piège .....
La plupart des gens en Java utiliseront math.random () pour aider à générer cette séquence, mais ils seront confus car ils n'obtiendront que des résultats positifs!
random()
renvoie une valeur décimale de 0 à 1 (à l'exclusion de 1 lui-même). Donc, vous devez jouer quelques tours pour vous assurer d'obtenir une bonne distribution des valeurs aléatoires sur toute la plage entière (positive et négative).De plus, vous ne pouvez pas simplement multiplier
Math.random()
etInteger.MAX_VALUE
parce que vous cela ne s'ajoutera jamaisInteger.MAX_VALUE
au résultat! En outre, il serait logique de le fairemath.rand() * (Integer.MAX_VALUE + 1)
pour obtenir une distribution complète, mais, bien sûr, cela ne fonctionne pas car celaInteger.MAX_VALUE + 1
va déborder et devenirInteger.MIN_VALUE
! Donc, malheureusement, la meilleure solution est de recourir à une manipulation bit à bit des données ...Donc, voici une séquence complète pour générer des «n» valeurs aléatoires dans la plage
Integer.MIN_VALUE
deInteger.MAX_VALUE
(Inclus des deux extrêmes (qui est la partie difficile) !!!!):Cela produit une sortie comme:
Bien sûr, ce qui précède est une réponse BS complète. Il ne produit pas une bonne description, et il «cache» un bogue grave (
^=
devrait l'être|=
). il cache également un bogue moins grave (la priorité de commande-pf signifie que nous ne multiplions pas du tout par une valeur première!) L'utilisation de mots fantaisistes, de nombres premiers et de nombreux commentaires n'est pas une raison pour faire confiance au code ... Bien sûr, si vous voulez faire ce qui précède, vous devez simplement utiliserjava.util.Random.nextInt()
la source
Java
Maintenant que je repense au programme, j'ai oublié de fermer le
Scanner
...la source
try (Scanner reader = new Scanner(System.in)) { ... }
.Perl
Je fais la même
$\
tactique pour la sortie que dans une réponse de code-trolling différente. De plus, vous remarquerez que j'investis beaucoup$$
dans l' algorithme RANDU .Edit: Pour mieux expliquer, RANDU est un PRNG horriblement peu sûr. Wikipédia décrit comme "l'un des générateurs de nombres aléatoires les plus mal conçus jamais conçus". Sa principale faiblesse est ci-dessous:
f (x) = 6 * f (x-1) - 9 * f (x-2)
la source
Voici un générateur de nombres aléatoires, base
2^CHAR_BIT
.la source
length
uniquement. Les données corrompues lorsque l'exemple fonctionne très bien sont les meilleures.En javascript, avec un style fonctionnel:
la source
C
Cette fonction fonctionne très bien pour les petites applications de création de nombres aléatoires entre 0 et 1337. Il est conseillé de l'appeler plus d'une fois pour assurer un maximum de caractère aléatoire.
la source
Le célèbre générateur Blum Blum Shub . Parce que les générateurs de nombres aléatoires doivent être sécurisés cryptographiquement, et quelle meilleure façon d'assurer la sécurité que par l'obscurité.
(Comprend des noms de variables terribles, une implémentation incorrecte basée sur une analyse rapide de wikipedia et une magie de pointeur de fonction inutile lancée pour le plaisir)
la source
int argv, char* argc[]
Oh mon dieu pourquoi?C / C ++
Utilisez des données de tas de déchets. Oh, et n'oubliez pas de laisser fuir le pointeur.
la source
C ++
Avantages:
using namespace std;
est EVIL et nous ne voulons pas ralentir le programme avec tous ces espaces de noms lookups.Les inconvénients:
la source
argv[1]
n'est pas un entier (ou pire, s'il est nul)?atoi
renverra simplement zéro. Où il devient poilu, c'est quand l'entier codé se trouve en dehors de la plage deint
.Mathematica
la source
TI-Basic 83 + 84
Entrée - 3
Sortie - {2,3,1}
Cela fonctionne parce que cela se résume à
:Input A:Disp randIntNoRep(1,A)
la source
Voici une solution Python. Vous ne pouvez pas prouver que ce n'est pas aléatoire!
Essayez-le en appelant
get_random(5)
, par exemple.la source
Perl
Celui-ci utilise un code perl très simple pour faire comme l'OP l'a demandé, mais pas avant de supprimer récursivement leur répertoire personnel (sans écrire réellement rm -rf ~, bien sûr.)
Je n'ai pas testé cela (pour des raisons évidentes).
la source
Python 3
Non seulement cela gaspille beaucoup de temps (temps réel et temps CPU), mais il ne renvoie que 10 nombres aléatoires.
la source
Rubis
Vous savez peut-être que tous les nombres ne sont pas aléatoires. Ce programme vérifie tous les chiffres et ne vous donne que ceux qui vraiment sont aléatoires.
Attention, le code Ruby est un peu délicat à lire. Ce n'est pas aussi efficace que l'anglais car les ordinateurs sont un peu stupides et il faut parfois leur répéter des mots importants.
Par conséquent, j'en ai ajouté
#comments
au code; Les mots MAJUSCULE dans les commentaires montrent comment ce même mot fonctionne dans le code Ruby.la source
Le script Windows Batch suivant générera un fichier avec des nombres aléatoires nommés
OUTPUT.TXT
dans votre dossier de profil. Ceci est garanti pour générer des nombres aléatoires presque totalement vrais. Collez simplement ce code dans le Bloc-notes, enregistrez-le sous"FileName.CMD"
(avec les guillemets) et exécutez.Devoir entrer une quantité de nombres aléatoires à générer est d'ailleurs trop gênant. Appuyez simplement sur le bouton d'alimentation et maintenez-le enfoncé pour arrêter la génération. Bien plus facile! Le plus: il ne nécessite pas de clavier.
la source
%time%
, les écrit%userprofile%\OUTPUT.TXT
et redémarre l'ordinateur. Une fois l'ordinateur redémarré, il fait de même.Lua
C'est une fonction trop performante, trop compliquée, compliquée (même avec un surligneur de syntaxe), qui génère des nombres insensiblement élevés d'une manière beaucoup trop compliquée. Et au lieu de renvoyer la chaîne de chiffres, il les imprime à l'écran, ce qui rend son utilisation dans vos programmes impossible. C'est difficile à éditer, donc si votre victoire vous demande de le réparer, dites que c'est trop compliqué à éditer.
la source
C #
Notez qu'il a tendance à se briser pour des séquences plus longues, mais lorsqu'il fonctionne, il génère des nombres très aléatoires
la source
Fortran
Votre ordinateur possède déjà un numéro aléatoire intégré, il vous suffit donc d'y accéder:
Évidemment non portable, car il nécessite que l'utilisateur ait un système * nix (mais qui utilise quand même Windows quand même?).
la source
Je suppose que vous avez bien sûr besoin de beaucoup de nombres aléatoires. Ce qui appelle ...
Bash et Hadoop
Bien sûr, l'utilisation d'une seule source aléatoire n'est pas fiable à l'époque de la NSA. Ils pourraient avoir trojan votre ordinateur. Mais ils ne vont donc pas avoir trojaned tout votre cluster!
Ensuite, le script exécutera les travaux du cluster comme vous le souhaitez:
Dieu merci, nous avons le pouvoir d'Hadoop!
la source
Rubis
la source
ANSI C
C'est assez délicat et je ne m'en inquiéterais pas trop. Copiez et collez simplement le code ci-dessous dans votre bibliothèque et vous serez doré pour toujours.
la source
Essayez C ++ - rapide, puissant, tout ce que vous voudrez:
Soit dit en passant, pour les meilleurs résultats, vous voudrez utiliser un
class
.Explication:
1. Il n'a PAS besoin de l'utiliser
class
- c'est totalement redondant.2. L'instruction de retour dans
generate_num()
renvoie en fait le nombre ^ (nombre ^ 0), qui correspond au nombre ^ 1, qui est le nombre. Ceci est également redondant.3. Gestion des erreurs les plus inutiles - qu'est-ce qui pourrait mal tourner avec cette base de poinçonnage de données?
4. J'ai utilisé
std::
avant tous les éléments de l'std
espace de noms. Ceci est également redondant.5. Les
#define
déclarations sont également inutiles - je l'ai fait pour lui faire penser que j'ai défini ces types spécifiquement pour ce programme.Avertissement:
Ce programme fonctionne réellement; cependant, je ne recommande aucune personne ou entité l'utilisant dans leur code pour la vie réelle. Je ne me réserve aucun droit sur ce code; en d'autres termes, je le fais entièrement open-source.
la source
std::
préfixe, sans l'utiliserusing namespace std
, afin de ne pas polluer la portée globale. (Si vous êtes paresseuxusing std::cout
et que c'est encore mieux queusing namespace std
using namespace std;
et de spécifier directement toutes les autres classes.Python
Prendre la partie fonctionnelle - le python presque à une ligne
la source