Poster un nouveau sujet Poster une réponse
Amélioration Morpion
Auteur Message
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Mar 03 Déc 2013, 21:27   Citer 

J'ai allégé ce programme en perm.Il est (toujours) pas graphique et il devine (toujours) pas quand on a gagné. Le programme fait 380 octet, mais il doit pouvoir être (encore) optimisé. (EDIT : en fait non, lire en bas)


Code
ClrHome
"+--+--+--+→Str1
"!  !  !  !→Str2
For(I,1,7,2
Output(I,1,Str1
End
For(I,2,6,2
Output(I,1,Str2
End
Output(1,11,"MORPIO
Output(3,13,"J-X
Output(5,13,"J-O
Output(3,12,">
1→J
2→X:2→Y
2→A:2→B
{3,3→dim([A]
Fill(0,[A]
0→θ
Repeat θ=9
θ+1→θ
3-J→J
Repeat K=105
Output(A,B,"
Output(Y,X,"+
Y→A:X→B
getKey→K
X-3(K=24)+3(K=26→X
Y-2(K=25)+2(K=34→Y
If X>8:2→X
If X<2:8&#8594;X
If Y>6:2&#8594;Y
If Y<2:6&#8594;Y
End
J&#8594;[A](A/2,(B+1)/3
Output(7-2J,12,"
Output(1+2J,12,">
Output(A,B,"
Output(A,B+1,sub("OX",J,1
Matr>list([A],(B+1)/3,L&#8321;
prod(L&#8321;
Matr>list([A]^t,A/2,L&#8321;
max(J^3={Ans,prod(L&#8321;&#8594;D
{1,1
For(C,1,3
Ans{[A](C,C),[A](C,4-C
End
max(D,max(J^3=Ans
End
If Ans
Then
Output(8,5,sub("OX",J,1
Output(8,7,"GAGNE !
Else
Output(8,4,"MATCH NUL !
End



-> flèche sto
> plus grand que
< plus petit que

Bonne chance !

EDIT : Oubliez ce qui est dit au début ! Après les améliorations effectuées par Linkakro, m@thieu41 et moi-même sur ce sujet : http://www.tout82.org/t232-probleme-calcul-avec-listes, le programme vérifie la victoire. (aller sur le sujet pour le bon code)

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
Google_AdSense



Publicité    



 
linkakro



Autorisation : Membre
Nb de messages : 3738
Inscrit le : Lun 19 Oct 2009, 21:25
Posté le : Mar 03 Déc 2013, 22:29   Citer 


Citer
J'ai allégé ce programme en perm.Il est (toujours) pas graphique et il devine (toujours) pas quand on a gagné. Le programme fait 400 octet, mais il doit pouvoir être (encore) optimisé.


J'aimerais bien que tu indiques où tu as trouvé l'original, si j'ai bien compris le sous-entendu.
Je trouve ça. sujet1


Code
: If K=45
: Then
: Goto A
: End

Ceci est une très mauvaise idée. Et tous les Gotos dans des boucles/alternatives.

Je suis surpris de voir 3-J->J, c'est ma marque de fabrique dans pratiquement tous mes jeux. Tant mieux si je ne suis pas tout seul à en profiter.

----------------------
ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)

Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store
 Adresse email Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Mer 04 Déc 2013, 13:29   Citer 

Tu as bien vu le sujet que tu as mis en lien. J'ai publié ce programme il y a un an et tu l'avais déjà amélioré, donc en fait c'est ta correction. Je l'ai revu hier et ai réglé tous les problèmes. Pour les Goto j'essaie de les retirer de la boucle. Je corrige donc le premier message ! Merci.

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Mer 04 Déc 2013, 14:17   Citer 

L'astuce du 3-J->J est pas mal, mais je trouve mieux de faire non(J->J. Comme ça J vaut soit 0 soit 1, c'est plus pratique pour les différents tests (If J/If non(J)), et aussi pour éviter certains tests en utilisant les booléens.


Code
: If J=2
: Then
: Output (3,13,"
: Output (5,13,">
: Output (A,B,"
: Output (A,B+1,"X
: Else
: Output (3,13,">
: Output (5,13,"
: Output (A,B,"
: Output (A,B+1,"O
: End


Le If peut être supprimé avec un peu de méthode:

Code
: Output (7-2J,13,"  //7-2J = 5 si J = 1, et 3 si J = 2
: Output (1+2J,13,"> //1+2J = 3 si J = 1, et 5 si J = 2
: Output (A,B,"
: Output (A,B+1,"X //Edit: petite erreur ici, voire posts suivants



----------------------
Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)

Et au fait: la politesse n'a jamais tué personne winkle.gif
 Adresse email Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Mer 04 Déc 2013, 15:38   Citer 

@ m@thieu41 : Sauf que, à moins d'une incompréhension de ma part, O ne peut pas jouer. Ou alors on applique la même chose pour O ?

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Mer 04 Déc 2013, 15:43   Citer 

Oups autant pour moi, je n'avais pas vu la différence sur ces lignes crazy.gif

On peut alors utiliser la fonction sub(str, debut, longueur) pour extraire le bon symbole d'une chaine.
Remplace donc le Output(A,B+1,"X par:

Code
Output(A,B+1,sub("OX",J,1 //si J vaut 1, on récupère le premier caractère, soit O, et si J vaut 2, le second, soit X.



----------------------
Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)

Et au fait: la politesse n'a jamais tué personne winkle.gif
 Adresse email Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Mer 04 Déc 2013, 15:51   Citer 

Ca devrait marcher, mais c'est "Err:Domain". J'aurai oublié quelque chose dans le code ? Voilà ce que j'ai sur ma calto :

Code
: ClrHome
: Disp "+--+--+--+","!  !  !  !","+--+--+--+","!  !  !  !","+--+--+--+","!  !  !  !","+--+--+--+"
: Output(1,11,"MORPIO
: Output(3,14,"J-X
: Output(5,14,"J-O
: Output(3,13,">
: 1->J
: Lbl P
: 2->X : 2->Y
: 2->A : 2->B
: Repeat K=105
: Output (A,B," 
: Output (Y,X,"+
: Y->A : X->B
: getKey->K
: X-3(K=24)+3(K=26->X
: Y-2(K=25)+2(K=34->Y
: If X>8 : 2->X
: If X<2 : 8->X
: If Y>6 : 2->Y
: If Y<2 : 6->Y
: End
: not(J->J
: Output(7-2J,13,"
: Output(1+2J,13,">
: Output(A,B,"
: Output(A,B+1,sub("OX",J,1
: Goto P



----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
m@thieu41



Autorisation : Membre
Nb de messages : 848
Inscrit le : Mer 18 Juil 2012, 18:44
Posté le : Mer 04 Déc 2013, 16:06   Citer 

En fait j'avais les différents calculs avec l'astuce du 3-J->J ^^

Donc je reprend:
Avec le not(J->J :

Code
: not(J->J
: Output(3+2J,13,"
: Output(5-2J,13,">
: Output(A,B,"
: Output(A,B+1,sub("XO",J+1,1
: Goto P


Et maintenant avec le 3-J->J:

Code
: 3-J->J
: Output(7-2J,13,"
: Output(1+2J,13,">
: Output(A,B,"
: Output(A,B+1,sub("OX",J,1
: Goto P



Tu peux prendre l'astuce que tu veux, je conseille le not(J) pour les raisons que j'ai évoqué mais c'est au choix ^^

----------------------
Pour vous aidez dans vos débuts (et même ensuite ^^) :
*Tuto Algo->Ti Basic (par Linkakro) : Traduisez vos algo (de type algobox) en prgm pour votre TI!
*Catalogue des emplacements et traductions (anglais/français) des fonctions sur la TI.
*Faites vos propres programmes de maths (par ash)

Et au fait: la politesse n'a jamais tué personne winkle.gif
 Adresse email Haut de page Bas de page 
 
Mingerton



Autorisation : Membre
Nb de messages : 504
Inscrit le : Ven 07 Déc 2012, 20:09
Posté le : Mer 04 Déc 2013, 16:08   Citer 

ah ok. Erreur de compréhension de ma part. Merci ! J'ai plus qu'à bosser pour qu'il dise Victoire ou Egalité.

----------------------
Mes articles
Mes programmes en ligne (je termine peu de projets)

Guide traduction Algo-Basic, par Linkakro
Catalogue des fonctions 82/83/84 FR/EN
 Adresse email Haut de page Bas de page 
 
Poster un nouveau sujet Poster une réponse





  Page générée en 6 requêtes