programme de tirage pour l'euromillion. A optimiser...

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Avatar de l’utilisateur
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7838
Inscription : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: programme de tirage pour l'euromillion. A optimiser...

Message par jvernet » 10 nov. 2011 22:21

J'avais plus simple:

Code : Tout sélectionner

30 DIM N(50)
40 FOR I=1 TO 5
50 T=RND 50
60 IF N(T)=0 THEN N(T)=1 ELSE GOTO 50
70 NEXT
80 FOR I=1 TO 50:IF N(I)<>0 PRINT I;:NEXT

Tire les 5 numeros necessaires, le meme principe s'applique aux * et les affiche dans l'ordre.

EDIT: légèrement grille, le poste précédent est la meme idée. N'importe quel Pocket sait gérer untableau de 50 éléments.
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."

Avatar de l’utilisateur
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2483
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: programme de tirage pour l'euromillion. A optimiser...

Message par C.Ret » 10 nov. 2011 22:30

J'aime bien ce code, car la partie 'Tri' est implicite car liée à la façon de parcourir le tableau.

En plus, il serait facile de faire en sorte que ce programme puisse tirer plusieurs grille sans jamais utiliser deux fois le même nombre.

Sinon, oui, un tableau de 50 valeur, tous les Pockets savent gérer, même les plus anciens (à condition cependant de ne pas faire un programme trop long !).
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: programme de tirage pour l'euromillion. A optimiser...

Message par charognard » 10 nov. 2011 22:38

C.Ret a écrit :J'aime bien ce code, car la partie 'Tri' est implicite car liée à la façon de parcourir le tableau.

En plus, il serait facile de faire en sorte que ce programme puisse tirer plusieurs grille sans jamais utiliser deux fois le même nombre.

Sinon, oui, un tableau de 50 valeur, tous les Pockets savent gérer, même les plus anciens (à condition cependant de ne pas faire un programme trop long !).
As tu remarqué que mon code précédent utilise cette technique mais en nettement moins de pas ?
badaze a écrit :
charognard a écrit :Me suis trompé à la recopie :(
Voilà la bonne maintenant

Code : Tout sélectionner

10 CLS:Z=7,X=42
20 Y=RND X:IF POINT Y=0 GCURSOR Y:GPRINT 1;:Z+Z-1
30 IF Z GOTO 20
40 Z=1:FOR Y=1 TO X:IF POINT Y LET @(Z)=Y,Z=Z+1
50 NEXT Y
60 FOR Y=1 TO 7:PRINT @(Y);:NEXT Y
et là pas de problème il n'y en aura pas deux identique, et la mémoire écran c'est pinuts
Oui mais là tu gruges car virtuellement tu utilises 42 mémoires.
Pas de gruge.
Pas 42 mémoires 42 bits uniquement.

42 bits d'un côté soit l'équivalent de 6 octets et 350 octets avec le code de jérome.

Conformément aux règles edictées dans d'autre posts la mémoire écran ne compte pas.
De plus avec quelques ruses je peux aussi me passer du tableau de sortie, ce qui résumerait ce programme à 3 variables utilisées après optimisation (Y,Z et une autre pour le curseur de PRINT)

Avatar de l’utilisateur
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7462
Inscription : 12 févr. 2007 19:36
Localisation : Pas très loin de Lyon
Contact :

Re: programme de tirage pour l'euromillion. A optimiser...

Message par badaze » 10 nov. 2011 22:53

charognard a écrit :
C.Ret a écrit :J'aime bien ce code, car la partie 'Tri' est implicite car liée à la façon de parcourir le tableau.

En plus, il serait facile de faire en sorte que ce programme puisse tirer plusieurs grille sans jamais utiliser deux fois le même nombre.

Sinon, oui, un tableau de 50 valeur, tous les Pockets savent gérer, même les plus anciens (à condition cependant de ne pas faire un programme trop long !).
As tu remarqué que mon code précédent utilise cette technique mais en nettement moins de pas ?
badaze a écrit :
charognard a écrit :Me suis trompé à la recopie :(
Voilà la bonne maintenant

Code : Tout sélectionner

10 CLS:Z=7,X=42
20 Y=RND X:IF POINT Y=0 GCURSOR Y:GPRINT 1;:Z+Z-1
30 IF Z GOTO 20
40 Z=1:FOR Y=1 TO X:IF POINT Y LET @(Z)=Y,Z=Z+1
50 NEXT Y
60 FOR Y=1 TO 7:PRINT @(Y);:NEXT Y
et là pas de problème il n'y en aura pas deux identique, et la mémoire écran c'est pinuts
Oui mais là tu gruges car virtuellement tu utilises 42 mémoires.
Pas de gruge.
Pas 42 mémoires 42 bits uniquement.

42 bits d'un côté soit l'équivalent de 6 octets et 350 octets avec le code de jérome.

Conformément aux règles edictées dans d'autre posts la mémoire écran ne compte pas.
De plus avec quelques ruses je peux aussi me passer du tableau de sortie, ce qui résumerait ce programme à 3 variables utilisées après optimisation (Y,Z et une autre pour le curseur de PRINT)
Non non non. Sans l'écran tu utiliserais 42 mémoires.
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.

Avatar de l’utilisateur
Hobiecat
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3397
Inscription : 06 sept. 2011 14:57
Localisation : Normandie

Re: programme de tirage pour l'euromillion. A optimiser...

Message par Hobiecat » 10 nov. 2011 22:55

Bravo les gars !
On devrait renommer ce fil "Misez p'tit, optimisez N°12" !! :mrgreen:

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: programme de tirage pour l'euromillion. A optimiser...

Message par charognard » 10 nov. 2011 22:58

badaze a écrit :
charognard a écrit :
C.Ret a écrit :J'aime bien ce code, car la partie 'Tri' est implicite car liée à la façon de parcourir le tableau.

En plus, il serait facile de faire en sorte que ce programme puisse tirer plusieurs grille sans jamais utiliser deux fois le même nombre.

Sinon, oui, un tableau de 50 valeur, tous les Pockets savent gérer, même les plus anciens (à condition cependant de ne pas faire un programme trop long !).
As tu remarqué que mon code précédent utilise cette technique mais en nettement moins de pas ?
badaze a écrit :
charognard a écrit :Me suis trompé à la recopie :(
Voilà la bonne maintenant

Code : Tout sélectionner

10 CLS:Z=7,X=42
20 Y=RND X:IF POINT Y=0 GCURSOR Y:GPRINT 1;:Z+Z-1
30 IF Z GOTO 20
40 Z=1:FOR Y=1 TO X:IF POINT Y LET @(Z)=Y,Z=Z+1
50 NEXT Y
60 FOR Y=1 TO 7:PRINT @(Y);:NEXT Y
et là pas de problème il n'y en aura pas deux identique, et la mémoire écran c'est pinuts
Oui mais là tu gruges car virtuellement tu utilises 42 mémoires.
Pas de gruge.
Pas 42 mémoires 42 bits uniquement.

42 bits d'un côté soit l'équivalent de 6 octets et 350 octets avec le code de jérome.

Conformément aux règles edictées dans d'autre posts la mémoire écran ne compte pas.
De plus avec quelques ruses je peux aussi me passer du tableau de sortie, ce qui résumerait ce programme à 3 variables utilisées après optimisation (Y,Z et une autre pour le curseur de PRINT)
Non non non. Sans l'écran tu utiliserais 42 mémoires.
Non j'utiliserais des drapeaux binaires donc 6 octets, le code sera plus long par contre.
ou une chaine de caractères.
Explication :
prenons un OP qui code la table de caractère sur 8 bits, par caractère dans la chaine on mémorise 8 bits (ça tombe bien).
Donc avec les 7 octets d'une variables alpha je peux stocker mes drapeaux.
j'avais d'ailleur commencé par cela, avant d'utilisé les drapeaux binaire de la mémoire écran

1 mémoire est donnée pour 7 ou 8 octets suivant l'op.

De plus optimisez ptit porte bien sur les ressources utilisées non ?

Le GPRINT du 1600 avec son OR (exclusivité au 1600) permet les manipulations facile d'une colonne de 8 points.
J'aurais aussi pu utiliser PSET si c'est le GPRINT qui te gène.

Sur une colonne de GPRINT soit 350 octets (Qui ne sont pas pris en RAM) c'est 8 tirages que je peux mémoriser

Avatar de l’utilisateur
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7838
Inscription : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: programme de tirage pour l'euromillion. A optimiser...

Message par jvernet » 10 nov. 2011 23:29

J'avoue, le code de charo est particulièrement tordu, mais c'est le meme prinipe que le mein! Attention, on se limite au e500!. Mon code ne doit pas marche dessus, d'ailleurs, i. est teste sur un e650.
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."

Avatar de l’utilisateur
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2483
Inscription : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: programme de tirage pour l'euromillion. A optimiser...

Message par C.Ret » 10 nov. 2011 23:42

charognard a écrit : As tu remarqué que mon code précédent utilise cette technique mais en nettement moins de pas ?
Euh, non. Désolé, j'avais pas vu la ligne 40. En fait, je m'étais surtout concentré sur la partie utilisation des commandes graphiques. L'affichage des résultats au travers de la boucle m'avait complètement échapé.

Sinon, contrairement à Badaze, je ne suis pas persuadé que sans utiliser l'écran, tu utiliserais 50 variables, mais bien uniquement 50 bits, soit 2 ou 3 variables. Tout dépend de ce qu'accepte les fonctions AND et OR sur ton Pocket.

La version de jxano utilisant une chaine de cartères va elle aussi économiserles octets. S'il utilise les codes ASCII, son tableau peut se limiter à 50 octets.


Mais, je reste campé sur mon schema, pas de tableau, pas de test :

Voici une version pour un SHARP PC-1211 qui fête allègrment ses 30 ans et une semaine :

Code : Tout sélectionner

1 X=0:FOR I=N TO 1 STEP -1:R=R*9^8+√5,R=R-INT R,X=1+X+INT (R*(1+M-X-I)/I^(N/(N+1)))
2 A(I)=X:NEXT I:RETURN

10 M=50:N=5:GOSUB 1:PRINT "NOMBRES:";E;D;C;B;A
20 M=11:N=2:GOSUB 1:PRINT "ETOILES:";B;A
Pas de gruge,
Pas de fonction RND, donc il faut la composer: pour cela la variable R contient la racine de génération des nombres pseudo-aléatoires. Il faut effectuer un RANDOMIZE manuellement avant d'utiliser le programme en plaçant un nombre décimal aléatoire dans R.
Pas de tableau. Pour faciliter l'affichage, les tirages sont mémorisé dans les variables A(N) à A(1) , c'est à dire E,D,C,B et A.
Pas de Test.
Pas de tirage aléatoire perdu ou gaspillé.
SHARP PC-1211 + CE-121 + CE-122. | VIC 20 Commodore 128D + Printer P-803 + SD2iec. | TI-57 LCD | HP-28S + HP82240A | TI-74 BasiCalc | HP-41C + (2 memory + stat + IR) | HP-15C | HP Prime Color Touchscreen Graphing Calculator| TI-92 II | CASIO fx-602p + FA-1 | HP-71B 64K+JPC-ROM+HPIL+card reader . Sommaire des M.P.O..

Avatar de l’utilisateur
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7838
Inscription : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: programme de tirage pour l'euromillion. A optimiser...

Message par jvernet » 11 nov. 2011 00:03

@CRet: balaise, j'ai rien compris!
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: programme de tirage pour l'euromillion. A optimiser...

Message par charognard » 11 nov. 2011 09:42

Toujours sur PC1600 (et autre)

Code : Tout sélectionner

10 CLS:Z=7
20 X=RND 60: IF NOT POINT(X,9) PSET (x,9):PRINT X;:Z=Z-1
30 IF Z GOTO 20
Avantages :
2 variables utilisées
Pas de tableau de sortie
Le nombre d'itérations sera faible
L'affichage de la valeur est embarqué dans la boucle

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: programme de tirage pour l'euromillion. A optimiser...

Message par charognard » 11 nov. 2011 10:36

Cret : tu décrète dans ta première iteration (et aussi dans les suivantes) la limite basse.
Tu dirige donc le tirage !
de plus pour ne pas trop "dirigé" de hazard tu fixe que le nombre le plus petit du tirage sera <= 1+(1+M-I)/I^(N/N+1) soit pour M=50 et N=5 il y aura toujours un nombre entre 1 et 12 !
(je te passe pour les suivants c'est le même principe)
CE N'EST PEUT ETRE PAS DE LA GRUGE CELA ????? ;)

Le code épuré du générateur aléatoire pour une meilleur compréhension

Code : Tout sélectionner

10 M=50:N=5:GOSUB 1:PRINT E;D;C;B;A:END
20 X=0:FOR I=N TO 1 STEP -1:X=1+X+RND((1+M-X-I)/I^(N/(N+1))):@(I)=X:NEXT I:RETURN

Avatar de l’utilisateur
jvernet
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7838
Inscription : 24 mai 2002 09:57
Localisation : France 69
Contact :

Re: programme de tirage pour l'euromillion. A optimiser...

Message par jvernet » 11 nov. 2011 12:02

charognard a écrit :Toujours sur PC1600 (et autre)

Code : Tout sélectionner

10 CLS:Z=7
20 X=RND 60: IF NOT POINT(X,9) PSET (x,9):PRINT X;:Z=Z-1
30 IF Z GOTO 20
Avantages :
pas mal, pas de memoire utilisée, mais ça sort pas trié croissant !

Une version en une ligne de ci dessus, pour E650

Code : Tout sélectionner

20 CLS:Z=5:WHILE(Z):X=RND 50: IF NOT POINT(X,9) PSET (x,9):PRINT X;:Z=Z-1:WEND ELSE WEND
Ca trie pas, mais j'ai une idée pour tirer et trier le tout en une ligne. Pas le temps la.
"l'ordinateur et l'homme sont les deux opposés les plus intégraux qui existent. L'homme est lent, peu rigoureux et très intuitif. L'ordinateur est super rapide, très rigoureux et complètement con."

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: programme de tirage pour l'euromillion. A optimiser...

Message par charognard » 11 nov. 2011 12:11

OUPS !
je n'ai pas fusionné avec mon code du dessus

Code : Tout sélectionner

10 CLS:Z=7
20 X=RND 60: IF NOT POINT(X,9) PSET (X,9):Z=Z-1
30 IF Z THEN 20
40 FOR X=1 TO 60:IF POINT(X,9) PRINT X;
50 NEXT X
Adaptable en 1 ligne avec WHILE/WEND ET ELSE mais je reste dans du BASIC standard
Toujours 2 variables, mais 67 itérations minimum (Pour une plage de 60)

Notez que la fonction POINT du 1600 fonctionne suivant deux méthodes :
1) POINT (X,Y) envoi 1 ou 0 suivant le point allumé
2) POINT X envoi 0~255 suivant la colonne X étudié de la ligne courante (CURSOR X,Y)
Dernière édition par charognard le 11 nov. 2011 12:24, édité 1 fois.

Avatar de l’utilisateur
badaze
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7462
Inscription : 12 févr. 2007 19:36
Localisation : Pas très loin de Lyon
Contact :

Re: programme de tirage pour l'euromillion. A optimiser...

Message par badaze » 11 nov. 2011 12:19

charognard a écrit :OUPS !
je n'ai pas fusionné avec mon code du dessus

Code : Tout sélectionner

10 CLS:Z=7
20 X=RND 60: IF NOT POINT(X,9) PSET (X,9):Z=Z-1
30 IF Z THEN 20
40 FOR X=1 TO 60:IF POINT(X,9) PRINT X;
50 NEXT X
Adaptable en 1 ligne avec WHILE/WEND ET ELSE
Waouh posté le 11/11/11 à 11:11 !!!

Chapeau pour l'algo..... Mais utiliser l'écran est et restera de la gruge.
Tout est bon dans le pocket.
Moi j'aime tout.... Casio, HP, Sharp, TI et les autres sauf que les TI semblent ne pas m'aimer :(
http://www.emmella.fr
Mes Casio - HP - Sharp - TI
Homme invisible.

Avatar de l’utilisateur
charognard
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4411
Inscription : 06 juin 2007 19:28
Localisation : Indre et loire
Contact :

Re: programme de tirage pour l'euromillion. A optimiser...

Message par charognard » 11 nov. 2011 12:33

badaze a écrit : Chapeau pour l'algo..... Mais utiliser l'écran est et restera de la gruge.
PAS D'ACCORD :lol:
c'est une mémoire comme les autres et vu que les variables booéeennes n'existe pas sur pocket et bien je les crèes.
Je me souviens de nombreux programme utilisant cette technique, dont un pokant des chaines hexa en DATA fort bien fait.

Ex. un truc comme ça:

Code : Tout sélectionner

READ A$(0)
CLS: AD=&XXXX:GPRINT A$(0)
FOR A=0 TO LEN A$(0):POKE AD,POINT A:AD=AD+1:NEXT A
DATA "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Souvenez vous du décompatage des programmes en MEM video sur atari et amiga !

Répondre

Revenir vers « Tous les Pockets »