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 G
par 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:, y
lorsqu'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,, G
est de 26 caractères de long, ce bloc d'alimentation, yG
a 2 ^ 26 entrées. OyG
sé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' O
endroit 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