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...).
Accueil­Portail­Calendrier­FAQ­Rechercher­S'enregistrer­Membres­Groupes­Connexion
Poster un nouveau sujet   Répondre au sujetPartager | 
 

 [Optimisation] Mastermind

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
Myo
Débutant
Débutant


Féminin Age: 19
Classe: TS optSI spéM
Calculatrice(s): TI-84+SE
Messages: 5
Efficacité: 0
Date d'inscription: 05/08/2007

MessageSujet: [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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Syfo
Légende
Légende


Masculin 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

MessageSujet: 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:

Code:
Effecr


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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://syfo-dias.skyblog.com
tama
Animateur
Animateur


Masculin 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

MessageSujet: 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)

_________________
Modérateur des salons z80

Lisez le Journal de tibank, y a du bon ! :)

Envie de nous voir IRL ? participez à la réunion Nord de tibank !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://tamast.actifforum.com/index.htm
tama
Animateur
Animateur


Masculin 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

MessageSujet: 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,ic 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 ?

_________________
Modérateur des salons z80

Lisez le Journal de tibank, y a du bon ! :)

Envie de nous voir IRL ? participez à la réunion Nord de tibank !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://tamast.actifforum.com/index.htm
Yak
Légende
Légende


Masculin 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

MessageSujet: 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.safotoservice.com
tama
Animateur
Animateur


Masculin 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

MessageSujet: 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 :

  • For
  • While
  • Goto

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...

_________________
Modérateur des salons z80

Lisez le Journal de tibank, y a du bon ! :)

Envie de nous voir IRL ? participez à la réunion Nord de tibank !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://tamast.actifforum.com/index.htm
Myo
Débutant
Débutant


Féminin Age: 19
Classe: TS optSI spéM
Calculatrice(s): TI-84+SE
Messages: 5
Efficacité: 0
Date d'inscription: 05/08/2007

MessageSujet: 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.)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yak
Légende
Légende


Masculin 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

MessageSujet: 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 :

  • For
  • While
  • Goto

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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.safotoservice.com
tama
Animateur
Animateur


Masculin 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

MessageSujet: Re: [Optimisation] Mastermind   Mar 7 Aoû - 11:30

oui c'est tordu comme façon de faire

_________________
Modérateur des salons z80

Lisez le Journal de tibank, y a du bon ! :)

Envie de nous voir IRL ? participez à la réunion Nord de tibank !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://tamast.actifforum.com/index.htm
Syfo
Légende
Légende


Masculin 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

MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://syfo-dias.skyblog.com
tama
Animateur
Animateur


Masculin 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

MessageSujet: 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

_________________
Modérateur des salons z80

Lisez le Journal de tibank, y a du bon ! :)

Envie de nous voir IRL ? participez à la réunion Nord de tibank !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://tamast.actifforum.com/index.htm
ProgVal
Animateur
Animateur


Masculin 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

MessageSujet: 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 :

  • For
  • While
  • Goto

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

_________________

<span style="font-size: 0.75em">Fondateur du Forum des Admins: Forum d'aide pour les administrateurs de forums</span>

Salut Invité!
Tu as posté 0 messages.
Le forum compte 71794 messages et 4588 sujets.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://adminforum.fr.cr
tama
Animateur
Animateur


Masculin 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

MessageSujet: Re: [Optimisation] Mastermind   Jeu 9 Aoû - 10:39

non Loop n'existe pas sur z80

on préfère faire
Code:

While 1
...
End

_________________
Modérateur des salons z80

Lisez le Journal de tibank, y a du bon ! :)

Envie de nous voir IRL ? participez à la réunion Nord de tibank !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://tamast.actifforum.com/index.htm
ProgVal
Animateur
Animateur


Masculin 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

MessageSujet: Re: [Optimisation] Mastermind   Jeu 9 Aoû - 15:23

Ca marche aussi sur 68k ce truc? C'est plus rapide qu'une Loop?

_________________

<span style="font-size: 0.75em">Fondateur du Forum des Admins: Forum d'aide pour les administrateurs de forums</span>

Salut Invité!
Tu as posté 0 messages.
Le forum compte 71794 messages et 4588 sujets.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://adminforum.fr.cr
tama
Animateur
Animateur


Masculin 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

MessageSujet: 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

_________________
Modérateur des salons z80

Lisez le Journal de tibank, y a du bon ! :)

Envie de nous voir IRL ? participez à la réunion Nord de tibank !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://tamast.actifforum.com/index.htm
 

[Optimisation] Mastermind

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Le Forum de TI-BANK.fr :: Forum TIz80 :: Programmation-
Poster un nouveau sujet   Répondre au sujet