
Le Forum de TI-BANK.fr Le forum de la banque de programmes pour calculatrices graphiques Texas Instruments (aide débutants, résolution problèmes...). |
| | | [Optimisation] Mastermind | |
| |
| Auteur | Message |
|---|
Myo Débutant

Age: 19 Classe: TS optSI spéM Calculatrice(s): TI-84+SE Messages: 5 Efficacité: 0 Date d'inscription: 05/08/2007
 | Sujet: [Optimisation] Mastermind Dim 5 Aoû - 14:06 | |
| Hellow, je me suis déjà amusée à créer quelques petits programmes sur ma TI84+SE mais ils ne sont pas très optimisés (alkashi, trinome, ..., voire carrément lourd pour mon convertisseur dec-bin-bcd-hex ! [>_<]) Tout récemment (hier soir), j'ai codé un tit mastermind. Mais il fait plus de 600oct et il ne fonctionne que pour 4 chiffres différents (sinon, ça compte 2 ou 3 fois le même chiffre, enfin on se retrouve avec 3 bien placés et un mal placé, ou 2 bien placés et 3 mal placés... c'est du n'importe quoi !) ü correspond à STO (->) - corres. à é ø corres. à Différent pour les variables: ABCD sont les chiffres de la combinaison à deviner IJKL sont les chiffres proposés par le joueur (enfin le joueur propose T qui est séparé en 4 chiffres) Y est le nombre de tour M ne sert que pour l'affichage des bons chiffres mal placés (U) et des bons chiffres bien placés (V) | Code: | EffEcr
entAl–at(1,8)üA AüB While A=B entAl–at(1,8)üB End BüC While A=C ou B=C entAl–at(1,8)üC End CüD While A=D ou B=D ou C=D entAl–at(1,8)üD End
1üY While Y÷12 Input "",T T/1000üI partEnt(I)üI T-I*1000üT T/100üJ partEnt(J)üJ T-J*100üT T/10üK partEnt(K)üK T-K*10üL 0üU 0üV
If I=A Then V+1üV Else If ((I=B et IøJ) ou (I=C et IøK) ou (I=D et IøL)) et IøA Then U+1üU End End
If J=B Then V+1üV Else If ((J=A et JøI) ou (J=C et JøK) ou (J=D et JøL)) et JøB Then U+1üU End End
If K=C Then V+1üV Else If ((K=A et KøI) ou (K=B et KøJ) ou (K=D et KøL)) et KøC Then U+1üU End End
If L=D Then V+1üV Else If ((L=A et LøI) ou (L=B et LøJ) ou (L=C et LøK)) et LøD Then U+1üU End End
0üV If A=I Then V+1üV End If B=J Then V+1üV End If C=K Then V+1üV End If D=L Then V+1üV End
YüM If Mù7 Then 7üM End
If V=4 Then Output(M,9,"BRAVO!" Pause Stop End
If Y=12 Then A*10^3+B*10Ü+C*10+DüR Output(M,13,R End
Output(M,8,U Output(M,11,V
Y+1üY End |
Si quelqu'un pouvait m'aider (et surtout m'expliquer !) pour alléger le code et un peu l'améliorer ! |
|  | | Syfo Légende


Age: 18 Classe: prepa integree polytech (L2) Calculatrice(s): 80,82,83,83+, 84+ Messages: 2581 Efficacité: 9 Localisation: Montpellier Date d'inscription: 21/02/2006
Divers Dernière note en maths: 14,5 maintenant tama t'arrete de me bourrer le mou
 | Sujet: Re: [Optimisation] Mastermind Dim 5 Aoû - 15:36 | |
| Salut Myo! Je vais lire ton code et tenter de voir ce qui ne va pas trop et ce que tu peux ameliorer. Voyons:
Jusque la, ça va. ^^
| Code: | entAl–at(1,8)üA AüB While A=B entAl–at(1,8)üB End BüC While A=C ou B=C entAl–at(1,8)üC End CüD While A=D ou B=D ou C=D entAl–at(1,8)üD End
|
Ca aussi ça va, ça doit etre optimisable, mais on verra plus tard. (au fait, dans les regles du mastermind, faut que les 4 chiffres soient differents [enfin les couleurs], donc que ce soient 4 chiffres differents, ben c'est pas grave)
Ah ben non, chui con, tu veux justement qu'on t'optimises tout ça!
bon: Tel quel, c'est difficilement optimisable, alors je te conseille de remplacer tes variables par une liste a 4 elements (par exemple LMASTER : le L c'est un petit L qui commence une liste (tu peux le trouver dans le catalogue, c'est le premier signe en "l")
Au fait, je programme en anglais, et je connait pas les correspondances en francais, donc si tu cherches quelque chose, cherches sa traduc' (genre Fill = remplir)
| Code: | 4->dim(LMASTER Fill(0,LMASTER
|
LA, tu initialises ta liste a 4 elements (dim), et tu la remplis de 0. Ensuite, tu fais une boucle pour remplir la liste de 4 elements differents:
| Code: | For(A,1,4 //debut de la boucle Delvar B Repeat B different de LMASTER(1) and B different de LMASTER(2) etc avec LMASTER(3) et (4) // la on veut que B dans lequel on va mettre le chiffre entre 1 et 8 soit different des autres chiffres ent-aleatoire(1,8)->B End : End // fin des deux boucles
|
Maintenant, tu as une liste LMASTER avec 4 elements. voyons la suite:
| Code: | 1üY While Y÷12 Input "",T T/1000üI partEnt(I)üI T-I*1000üT T/100üJ partEnt(J)üJ T-J*100üT T/10üK partEnt(K)üK T-K*10üL 0üU 0üV
|
Peux devenir, en utilisant encore une fois une deuxieme liste, qu'on appellera, heu... L2 (la flemme de chercher autre chose).
Donc:
| Code: | 4->dim(L2 // cette fois, pas la peine de la remplir de 0 1->Y While Y different de 12 Input( "", T
|
Merde, plus le temps de finir de t'expliquer. Desole
J'finirais demain, sauf si quelqu'un d'autre le fait entre temps. Gageons que ce n'est pas presse. |
|  | | tama Animateur


Age: 18 Classe: oui. (2ème année à l'Epita, sinon) Calculatrice(s): TI-84+, TI89 tita HW3, TI89 tita HW4 (eh oui, 3 TI :#geek#:) Messages: 10280 Efficacité: 29 Localisation: Paris ... dans un rayon de 15 km Date d'inscription: 19/12/2005
Divers Dernière note en maths: 13/20
 | Sujet: Re: [Optimisation] Mastermind Lun 6 Aoû - 11:02 | |
| lol ça me rappelle le défi qu'on s'était lancés avec adriweb pour le mastermind il a réussi à faire un mastermind de 255 octets et je suis descendu jusqu'à 198 octets (le code est dans ce même salon programmation je crois) |
|  | | tama Animateur


Age: 18 Classe: oui. (2ème année à l'Epita, sinon) Calculatrice(s): TI-84+, TI89 tita HW3, TI89 tita HW4 (eh oui, 3 TI :#geek#:) Messages: 10280 Efficacité: 29 Localisation: Paris ... dans un rayon de 15 km Date d'inscription: 19/12/2005
Divers Dernière note en maths: 13/20
 | Sujet: Re: [Optimisation] Mastermind Lun 6 Aoû - 11:05 | |
| | tama a écrit: | donc adriweb je peux poster mon code pour un mastermind très très très réduit mais qui fonctionne (j'ai rajouté 2 lignes de code...ça fait 233-17=216 octets maintenant)
MAJ 1 : j'ai supprimé une ligne de code => de 216 on passe à 212 MAJ 2: encore supprimé des lignes (décidément ça m'a aidé de recopier le code sur PC ^^) => 212 --> 187 (36% de moins que le tien ^^) MAJ 3 (encore ?!): supprimé une ligne qui ne devait pas être là (que je n'ai pas recopié ici c'était pour afficher la solution et tester si ça marchait) => donc on passe de 187 à 183 (39%) MAJ 4 : supprimé une ligne vide => 2 octets de gagnés encore => 181 désormais (41%)
A chaque fois que tu entres une combinaison ça te sort un nombre du type c,i où c est le nombre de chiffres bien placés et i le nombre de chiffres corrects mais mal placés
par exemple 2.2 -> il y a 2 chiffres corrects et bien placés et 2 chiffres corrects mais mal placés
| Citation: | bon voilà ça tient en 1 seul programme Ne mets pas ce qu'il y a après les "//" (enfin je pense que t'as compris...)
ClrHome Fix 1 randInt(0,9,4->LC //crée une liste de 4 chiffres aléatoires de 0 à 9 (combinaison) 4->dim(LR //crée une liste "réponse" = essais du joueur DelVar VDelVar C //V c'est "victoire" qui détermine si tous les nombres sont bons et C le nombre d'essais While V<4 and C<10 //tant qu'il n'a pas gagné ou il lui reste des chances 0->V //on réinitialise le nombre de réponses correctes C+1->C //nombre d'essais Input ">",Str0 //on demande une combinaison For(A,1,4 expr(sub(Str0,A,1->LR(A //on stocke les 4 chiffres séparément dans la liste réponse (LR) End For(A,1,4 For(B,1,4 If LC(A)=LR(B //si c'est bon Then If A=B //bien placé Then V+1->V //on ajoute 1 aux unités de V (=victoire) .2+LR(B->LR(B //pour éviter qu'il compte le même chiffre plusieurs fois (6.2 différent de 6 par exemple) et pour "debugger" (voir où ça bug si le programme bug) Else V+.1->V //on ajoute 1 aux décimales de V .1+LR(B->LR(B //voir plus haut End End End
|
End Disp V //on affiche les biens placés & mal placés End If C>=10 //s'il ne restait plus d'essais LC //on affiche la solution Float //on remet en virgule flottante (mode normal)
Voila en espérant que ça puisse t'aider ^^ |
le vla ^^ (c'est le topic un peu plus bas "aide à la création d'un mastermind")
apparemment c'est 181 octets le record :)
PS : syfo où est passé le dias ? PPS : univscien t'a copité ma signature PPPS : adriweb aussi ? PPPPS : et d'autres ? |
|  | | Yak Légende


Age: 20 Classe: PSI Calculatrice(s): TI-89 Messages: 3441 Efficacité: 0 Localisation: Le nez dans mon ordi Date d'inscription: 04/02/2005
Divers Dernière note en maths: e
 | Sujet: Re: [Optimisation] Mastermind Lun 6 Aoû - 12:29 | |
| Le plus court n'est pas toujours le plus rapide. J'ai découvert ça en php : par exemple le traitement ternaire est le plus long, après la methode des switch est moyenne et le mieux c'est le if et else... etonant ! Pareil pour for : | Code: | for($i = 0 ; $i<15 ; $i++) { //Instructions } |
plus lent que
| Code: | $i = 0 while($i++<15) { //instructions } |
Etonant non ? En basic je ne sait pas ni en C _________________ Segata sanshiro ! せがた三四郎 Prosternez vous devant le Dr. Lakav !
|
|  | | tama Animateur


Age: 18 Classe: oui. (2ème année à l'Epita, sinon) Calculatrice(s): TI-84+, TI89 tita HW3, TI89 tita HW4 (eh oui, 3 TI :#geek#:) Messages: 10280 Efficacité: 29 Localisation: Paris ... dans un rayon de 15 km Date d'inscription: 19/12/2005
Divers Dernière note en maths: 13/20
 | Sujet: Re: [Optimisation] Mastermind Lun 6 Aoû - 12:53 | |
| oui mais en basic une boucle for est plus rapide qu'une boucle while dans l'ordre : Ainsi, c'est mieux de faire | Code: | For(Z,0,104 getKey->Z End
|
plutôt que
| Code: | While Z=/105 (différent de) getKey->Z End
|
étonnant aussi... |
|  | | Myo Débutant

Age: 19 Classe: TS optSI spéM Calculatrice(s): TI-84+SE Messages: 5 Efficacité: 0 Date d'inscription: 05/08/2007
 | Sujet: Re: [Optimisation] Mastermind Lun 6 Aoû - 12:56 | |
| tama > j'ai vu (impressionnant, d'ailleurs!), mais si j'ai créé ce topic c'est pour que l'on m'aide à optimiser MON code en me montrant ce qu'il faut améliorer, etc... Je préfère que ça se fasse petit à petit pour bien comprendre et pouvoir réutiliser les notions que de faire un copier/coller. Syfo > merci pour cette première amélioration, je vais déjà tester avec ces modifications. [Et au passage, me renseigner sur les listes, je les avaient déjà trouvées par hasard mais je n'en connais pas tellement le fonctionnement...] (na na, ce n'est pas urgent, j'ai encore toutes les vacances.) |
|  | | Yak Légende


Age: 20 Classe: PSI Calculatrice(s): TI-89 Messages: 3441 Efficacité: 0 Localisation: Le nez dans mon ordi Date d'inscription: 04/02/2005
Divers Dernière note en maths: e
 | Sujet: Re: [Optimisation] Mastermind Lun 6 Aoû - 17:23 | |
| | tama a écrit: | oui mais en basic une boucle for est plus rapide qu'une boucle while dans l'ordre :
Ainsi, c'est mieux de faire
| Code: | For(Z,0,104 getKey->Z End
|
plutôt que
| Code: | While Z=/105 (différent de) getKey->Z End
|
étonnant aussi... |
J'avoue avoir eu du mal a la comprendre au début la premiere, vachement malin. Oui en effet c'est etrange ! _________________ Segata sanshiro ! せがた三四郎 Prosternez vous devant le Dr. Lakav !
|
|  | | tama Animateur


Age: 18 Classe: oui. (2ème année à l'Epita, sinon) Calculatrice(s): TI-84+, TI89 tita HW3, TI89 tita HW4 (eh oui, 3 TI :#geek#:) Messages: 10280 Efficacité: 29 Localisation: Paris ... dans un rayon de 15 km Date d'inscription: 19/12/2005
Divers Dernière note en maths: 13/20
 | Sujet: Re: [Optimisation] Mastermind Mar 7 Aoû - 11:30 | |
| oui c'est tordu comme façon de faire |
|  | | Syfo Légende


Age: 18 Classe: prepa integree polytech (L2) Calculatrice(s): 80,82,83,83+, 84+ Messages: 2581 Efficacité: 9 Localisation: Montpellier Date d'inscription: 21/02/2006
Divers Dernière note en maths: 14,5 maintenant tama t'arrete de me bourrer le mou
 | Sujet: Re: [Optimisation] Mastermind Mer 8 Aoû - 16:22 | |
| Salut Myo. N'ecoutes pas ces abrutis qui detournent ton topic. La j'ai vraiment pas de temps pour t'aider, mais dans le week-end, promis, je reviens et je t'explique les listes et je t'aide a optimiser ton code. |
|  | | tama Animateur


Age: 18 Classe: oui. (2ème année à l'Epita, sinon) Calculatrice(s): TI-84+, TI89 tita HW3, TI89 tita HW4 (eh oui, 3 TI :#geek#:) Messages: 10280 Efficacité: 29 Localisation: Paris ... dans un rayon de 15 km Date d'inscription: 19/12/2005
Divers Dernière note en maths: 13/20
 | Sujet: Re: [Optimisation] Mastermind Mer 8 Aoû - 17:08 | |
| moi ? tordu ? (tiens au passage y a plein de membres qui vont ou ont été en spé maths) bon faudrait utiliser une liste et comparer les éléments, Syfo le non-tordu en dira plus |
|  | | ProgVal Animateur


Age: 16 Classe: Première S SI (Sciences de l'Ingénieur) Calculatrice(s): Voyage 200 & TI-NSpire Messages: 2729 Efficacité: -49 Localisation: Metz Date d'inscription: 05/07/2007
Divers Dernière note en maths: 8,5/10
 | Sujet: Re: [Optimisation] Mastermind Jeu 9 Aoû - 10:00 | |
| | tama a écrit: | oui mais en basic une boucle for est plus rapide qu'une boucle while dans l'ordre :
Ainsi, c'est mieux de faire
| Code: | For(Z,0,104 getKey->Z End
|
plutôt que
| Code: | While Z=/105 (différent de) getKey->Z End
|
étonnant aussi... |
Les boucles Loop n'existent pas sur z80?
Les 2 boucles n'expriment pas du tout la même chose. Dans ce cas, on ne peux pas remplacer la boucle While |
|  | | tama Animateur


Age: 18 Classe: oui. (2ème année à l'Epita, sinon) Calculatrice(s): TI-84+, TI89 tita HW3, TI89 tita HW4 (eh oui, 3 TI :#geek#:) Messages: 10280 Efficacité: 29 Localisation: Paris ... dans un rayon de 15 km Date d'inscription: 19/12/2005
Divers Dernière note en maths: 13/20
 | Sujet: Re: [Optimisation] Mastermind Jeu 9 Aoû - 10:39 | |
| non Loop n'existe pas sur z80 on préfère faire |
|  | | ProgVal Animateur


Age: 16 Classe: Première S SI (Sciences de l'Ingénieur) Calculatrice(s): Voyage 200 & TI-NSpire Messages: 2729 Efficacité: -49 Localisation: Metz Date d'inscription: 05/07/2007
Divers Dernière note en maths: 8,5/10
 | Sujet: Re: [Optimisation] Mastermind Jeu 9 Aoû - 15:23 | |
| Ca marche aussi sur 68k ce truc? C'est plus rapide qu'une Loop? |
|  | | tama Animateur


Age: 18 Classe: oui. (2ème année à l'Epita, sinon) Calculatrice(s): TI-84+, TI89 tita HW3, TI89 tita HW4 (eh oui, 3 TI :#geek#:) Messages: 10280 Efficacité: 29 Localisation: Paris ... dans un rayon de 15 km Date d'inscription: 19/12/2005
Divers Dernière note en maths: 13/20
 | Sujet: Re: [Optimisation] Mastermind Jeu 9 Aoû - 15:27 | |
| oui ça marche sur z80 mais pas sur 68k et puis si c'est plus rapide je sais pas |
|  | | | | [Optimisation] Mastermind | |
|
| Page 1 sur 2 | Aller à la page : 1, 2  |
| | Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |
|