Numéros de loterie
GW-Basic, utilisé par PC-Basic
Programme avec Texte Seulement
PC-BASIC
La loterie a souvent été qualifiée de taxe sur les personnes qui sont mauvaises en maths. Pire encore, la loterie peut être considérée comme une taxe régressive, car chaque billet coûte disproportionnellement plus cher à un pauvre qu'à un riche - et les pauvres jouent à la loterie beaucoup plus fréquemment que les riches.
Les joueurs de loterie passionnés ne jurent que par les soi-disant systèmes de loterie; beaucoup de ces systèmes sélectionnent les numéros de cette semaine en examinant les numéros gagnants des semaines précédentes, en recherchant des modèles dans des masses de données. Ça sonne bien - de nombreux modèles seront sûrement trouvés.
Les êtres humains (et, par extension, les algorithmes informatiques que les êtres humains ont écrits) sont des chercheurs de modèles, voyant fréquemment un signal là où il n'y a que du bruit. C'est ce qu'on appelle l'apophénie.
À moins qu'il n'y ait une méthode délibérée non aléatoire pour la sélection des numéros de loterie, les modèles de numéros gagnants du passé sont simplement prédictifs, purs et simples, d'un ensemble de numéros futurs.
Le passé n'est pas ici un prologue : chaque essai (c'est-à-dire chaque tirage de nombres) est indépendant de tout autre, même si votre intuition pense peut-être le contraire. Les boules de loterie n'ont pas de cerveau, alors comment pourraient-elles se rappeler quand elles sont apparues dans le passé ?
En passant, croire qu'ils s'en souviennent est considéré comme une erreur du joueur. Malgré ce que les autres voudraient vous faire croire, il n'existe pas de "loi des moyennes", dans laquelle des chiffres qui ne sont pas apparus récemment apparaissent. pour corriger une sorte de "déséquilibre".
Avec tout cela à l'esprit, le programme LOTTERY.BAS crée simplement des ensembles aléatoires de nombres en fonction de quelques critères : combien d'ensembles, combien de nombres dans chaque ensemble et la limite supérieure des nombres. Bien entendu, chaque série de nombres est tirée sans remise.
La complexité du programme réside presque entièrement dans le fait que chaque ensemble doit être tiré sans remplacement : il ne peut y avoir de nombres répétés dans un ensemble donné. Un tableau, ainsi que quelques boucles FOR/NEXT, garantissent que s'il y a des répétitions, l'ensemble est rejeté et redessiné (voir lignes 15 à 60).
Supposons que vous souhaitiez tirer cinq séries de dix nombres, avec des boules numérotées de un à dix chacune. Peu importe la vitesse du processeur de votre ordinateur, cela peut prendre un certain temps. Étant donné que chaque ensemble doit inclure tous les nombres de un à dix, si cet ensemble unique particulier n'est pas choisi au hasard, les boucles relancent le programme pour redessiner l'ensemble - et cela peut se produire des dizaines de fois. Peut-être qu'un algorithme différent est nécessaire pour assurer un échantillonnage beaucoup plus rapide et plus efficace sans remplacement.
De plus, les loteries telles que le Powerball ont des tirages à partir de deux ensembles de boules différents (comme cinq boules blanches avec une Powerball rouge); ajouter cela comme une option dans le programme LOTTERY.BAS augmenterait son utilité.
5 RANDOMIZE TIMER
6 SCREEN
9:COLOR 15,1:CLS:KEY OFF
7 PRINT "GÉNÉRATEUR DE NUMÉROS DE LOTERIE":PRINT
8 INPUT "COMBIEN D'ENSEMBLES GÉNÉRER À L'ÉCRAN"; SETS: IF SETS<1 THEN 8
9
INPUT "COMBIEN DE NUMÉROS DE LOTERIE DANS CHAQUE ENSEMBLE";NUM:IF NUM<1 THEN 12
10 INPUT "CHAQUE NUMÉRO DE LOTERIE EST DE 1 À QUOI";MAX:IF MAX<2 THEN 13
11
DIM I(NUM)
14 FOR X=1 TO SETS
15 FOR A=1 TO NUM
20
I(A)=INT(1+MAX*RND(1))
25 NEXT A
30 FOR U=1 TO NUM-1
40 FOR W=U+1 TO
NUM
50 IF I(U)=I(W) THEN GOTO 15
60 NEXT W,U
65 PRINT "SET #";X;":";
70 FOR F=1 TO NUM:PRINT I(F);" ";:NEXT F
80 PRINT
90 NEXT X
Version 6/49 avec tri
5 REM
Bubble Tri
10 RANDOMIZE
TIMER
20 DIM A(6)
30 A(1)=INT(49*RND(1)+1)
40 A(2)=INT(49*RND(1)+1):IF
A(2)=A(1) THEN 40
50 A(3)=INT(49*RND(1)+1):IF A(3)=A(1) OR A(3)=A(2) THEN 50
60 A(4)=INT(49*RND(1)+1):IF A(4)=A(1) OR A(4)=A(2) OR A(4)=A(3) THEN 60
70
A(5)=INT(49*RND(1)+1):IF A(5)=A(1) OR A(5)=A(2) OR A(5)=A(3) OR A(5)=A(4) THEN
70
80 A(6)=INT(49*RND(1)+1):IF A(6)=A(1) OR A(6)=A(2) OR A(6)=A(3) OR
A(6)=A(4) OR A(6)=A(5)THEN 80
110 FLIPS=1
120 WHILE FLIPS
130 FLIPS=0
140 FOR N=1 TO 5
150 IF A(N)>A(N+1) THEN SWAP A(N), A(N+1): FLIPS=1
160
NEXT N
170 WEND
180 FOR N=1 TO 6
190 PRINT A(N);" ";
200 NEXT N