Pyth , 11 octets
WOyG~ZtOT)Z
Remarque: ce programme se bloquera probablement avec une erreur de mémoire sur n'importe quel ordinateur réel. Pour le tester, essayez de le remplacer Gpar une chaîne plus courte, comme dans ce code, qui génère des nombres en moyenne autour de 28000:
pyth -c 'WOy"abcdefghijklm"~ZtOUT)Z'
Ce code boucle, en ajoutant un nombre aléatoire de -1 à 8 Z, avec une probabilité de 2 ^ -26 de quitter la boucle à chaque répétition. La probabilité 2 ^ -26 est atteinte en sélectionnant un élément aléatoire ( O) de l'ensemble de tous les sous-ensembles ( y) de l'alphabet ( G).
Détails techniques et justification:
La probabilité 2 ^ -26 est dérivée de deux faits:, ylorsqu'elle est appelée sur des séquences, est la fonction power-set, an construit la liste de tous les sous-ensembles de l'entrée. Depuis l'entrée,, Gest de 26 caractères de long, ce bloc d'alimentation, yGa 2 ^ 26 entrées. OyGsélectionne un élément aléatoire parmi ces 2 ^ 26 entrées. Exactement l'une de ces entrées, la chaîne vide, sera évaluée comme fausse lorsqu'elle est passée à W, la boucle while. Par conséquent, il y a une probabilité de 2 ^ -26 de sortir de la boucle à chaque fois.
Dans tout nombre fixe de cycles de boucle K, la probabilité d'obtenir le nombre K * 3,5 + m et d'obtenir K * 3,5 - m est égale, car chaque séquence d'additifs qui atteint un total peut être inversée, -1 -> 8, 0 -> 7, etc., pour réaliser l'autre. De plus, les nombres plus proches de K * 3,5 sont nettement plus probables que les nombres plus éloignés. Ainsi, si K> 2000000 / 3,5 = 571428,5, la probabilité d'obtenir un nombre supérieur à 1000000 est supérieure à 75%, car certains des résultats supérieurs à ce nombre peuvent être mis en correspondance un à un avec tous les résultats inférieurs à ce nombre, et la moitié inférieure supérieure, peuvent être mis dans une correspondance un à un avec ceux de moins de 1000000. La probabilité d'obtenir au moins 571429 boucles est (1-2 ^ -26) ^ 571429, ce qui n'est pas moins de (1-2 ^ -26 * 571429), le nombre attendu de sorties de boucle au cours des 571429 premiers essais, soit 99,1%. Ainsi, sur 99,1% ou plus des essais, il y a 75% ou plus de chances d'obtenir au moins 1000000, donc il y a plus de 50% de chances de dépasser 1000000.
Ce code repose sur un comportement de l' Oendroit où un bogue a été introduit accidentellement il y a 3 jours et a été corrigé aujourd'hui. Il devrait fonctionner sur n'importe quelle version de Pyth 3 avant le 22 décembre ou après aujourd'hui. Le code suivant est équivalent et a toujours fonctionné:
WOyG~ZtOUT)Z