URL: https://linuxfr.org/forums/programmation-shell/posts/le-probleme-avec-l-aleatoire-c-est-qu-on-ne-peut-jamais-etre-sur-que-ce-le-soit Title: Le problème avec l’aléatoire c’est qu’on ne peut jamais être sûr que ce le soit Authors: Marotte ⛧ Date: 2024年02月15日T05:21:33+01:00 License: CC By-SA Tags: nombres_aléatoires Score: 5 En fait on ne peut qu’estimer la probabilité que ce le soit plus ou moins. Et de toute manière, rien n’est aléatoire. Henri Poincaré l’a clairement postulé il y a longtemps et personne n’a pu le démentir :>« Une cause très petite, qui nous échappe, détermine un effet considérable que nous ne pouvons pas ne pas voir, et alors nous disons que cet effet est dû au hasard. » En Français comptant pour rien, sans cette horrible double négation : « Le hasard c’est rien que des relations de causes à effets, que les effets on les voit bien, même qu’ils peuvent être tellement énormes et gigantesques qu’on peut pas les rater, mais qu’on est trop teubé pour voir les causes, alors là on dit « trop pas de chance ! » Pour en venir à Bash, - La variable $RANDOM Pratique n’est-ce pas ? Et bien non, quand on regarde de près on se demande même pourquoi elle existe ! Alors avec les dernières version de Bash (5.?+) c’est un peu moins cringe, mais sur tous les systèmes qui tournent dans la vraie vie professionnelle, `$RANDOM` sort des nombres qui vont de 0 à 32767, autant dire que si vous prenez les cinq chiffres à chaque fois vous aurez plus de 12588 que de 44588 (parce que vous en aurez pas de ce dernier !). Donc vraiment pas top. Vous êtes en train de vous dire : « j’ai qu’à prendre les trois derniers chiffres, concaténer et re-concaténer un bon nombre de fois et ça fera le job. » C’est possible, mais au final vous n’aurez au mieux qu’un nombre entier aléatoire, sans pouvoir facilement le borner, bref, vous ne serez pas totalement satisfaits et aller vous remettre à Python en grognant. Retrouvez votre joie de vivre, je vous fais don d’une solution hautement versatile, couvrant tous les besoins, ou presque, du simple lancé d’un dé à six faces à la génération automatique d’un programme en [Brainfuck](https://esolangs.org/wiki/Brainfuck) ! - Ma solution, que je soumets à votre sagacité : ranran() { tr -cd "${1:-0-9}" < /dev/urandom>>(head -c"${2:-1}"); } Deux arguments : le jeu de caractères que votre valeur aléatoire peut prendre, et le nombre de caractères que vous souhaitez. La syntaxe ci-dessus n’est pas POSIX me semble-t-il, mais il doit être assez facile de reproduire la méthode en respectant POSIX, l’exercice est laissé au lecteur. Voici comment vous pouvez utiliser cette fonction "ranran" Le dé à six faces : $ ranran 1-6 Sans argument c’est un dé à dix faces : $ ranran Il n’y aurait aucun décaèdre régulier sur les [32300 existants](http://www.numericana.com/data/polyhedra.htm), Ce qui prouve que la nature n’est pas aussi bien faite que ça. Mais c’est là toute la beauté de l’informatique, rendre possible l’impossible ! Veuillez notez que je prends cette dernière information pour argent content, personnellement je suis même pas sûr de pouvoir construire un seul décaèdre avec un couteau et une patate, même avec tout un sac de patates d’entraînement. De l’hexadécimal ? Pas de souci, aller, un octet : ranran a-f0-9 2 Plus grand ? Aucun souci, avec des lettres majuscules cette fois-ci : ranran A-Z0-9 64 Un nombre compris entre 0 et un [googol](https://fr.wikipedia.org/wiki/Gogol_(nombre)) ? Fastoche : ranran 0-9 $(ranran 1-9 2) Bon ok, 99 chiffres 9 alignés ça fait un googol - 1, et je suis pas sûr que la distribution soit tout à fait homogène et donc parfaitement aléatoire, mais ! Comme c’est un exemple à l’utilité strictement didactique, OSEF à la puissance googol puissance googol. Plus inquiétant; si j’en crois Wikipédia, "googol" se dirait "gogol" en français... vraiment pas les derniers des gogols ces bouffeurs de grenouilles... Et comme promis ! La génération d’un code source de Brainfuck : ranran ']+-.,<[>' $(ranran 0-9 3) Il est possible que le code source généré ne compile pas du premier coup, il faut probablement lancer la commande plusieurs fois (beaucoup de fois éventuellement). Mais ça doit marcher. Après tout "Shakespeare", on le sait aujourd’hui, n’était qu’une armée de singes ayant accès à des machines à écrire pendant un temps suffisamment long.