Mais le jeu n'est pas comme ça.
Il ne dit pas si chaque élément est bien placé ou pas. Il donne juste une indication, sans dire lequel est bien placé et lequel est mal placé.
-----
Mais le jeu n'est pas comme ça.
Il ne dit pas si chaque élément est bien placé ou pas. Il donne juste une indication, sans dire lequel est bien placé et lequel est mal placé.
En gros la réponse est bonne, car le troisième 3 est bel et bien un pion qui existe dans la combinaison à trouver mais en troisième position il est mal placé. Ce qui te dérange est donc le fait que le A possède une sorte d'ordre, c'est ça ?
Dans ce cas pour enlever l'ordre de calcul il suffira de trier A ... par exemple
Trier A J'y avais pensé oui mais je le ferai à la fin.
Mais ce que je veux dire c'est que le 10 ne devrait pas être affiché du tout.
Donc comment m'expliquerais-tu en Français la manière de procéder dans ce cas ?
Ben l'idéal serait de comparer tous les bien placés en premier et si M(i)=S(i) on pourrait remplacer S(i) par 0 comme ça il ne pourra plus correspondre à un élément de M
M(i) *
Je ferai quelque chose comme ça :
Mais on ne m'affiche plus A..Code:tour = 1; S=round(7*rand(1,4)+1) disp(S) M=[] victoire=%F while ( (tour<13) & (~victoire) ) disp('tour :'+string(tour)) M=[] while (~ isequal(size(M),[1,4])) M=input('Combinaison : ") if (~ isequal(size(M),[1,4])) then disp('Mauvais format') end end victoire = isequal(M,S) A=[] if (~victoire) then for k=1:4 if M(k)==S(k) then A=[A,11] M(k)=0 end end for i=1:4 j=1 while (j<5) if (i~=j) & (M(i)==S(j)) then A=[A,10] j=5 end j=j+1 end end end end disp(A) end tour=tour+1 end if (victoire) then disp('Bingo') else disp('Looser') end
Avec quelques déplacements de "end" A s'affiche, mais j'ai le même problème..
Quand S=[4 3 5 4] et M=[4 4 4 4] on me dit A=[11 11 10 10]
Quand on trouve M(1)=S(1), il ne faudrait plus comparer M(k) avec S(1)
J'ai ça. C'est mieux mais il reste encore des modifications à faire.
Quand je mets la bonne combinaison, ça me marque :
"Bingo
Mauvais format
Combinaison :"
Code:tour = 1; S=round(7*rand(1,4)+1) disp(S) M=[] victoire=%F while ( (tour<13) & (~victoire) ) disp('tour :'+string(tour)) M=[] while (~ isequal(size(M),[1,4])) M=input('Combinaison : ") if (~ isequal(size(M),[1,4])) then disp('Mauvais format') end end victoire = isequal(M,S) A=[] if (~victoire) then P=[] for k=1:4 if M(k)==S(k) then A=[A,11] M(k)=0 else P=[P,k] end end for j=P i=1 while (i<5) if (i~=j) & (M(i)==S(j)) then A=[A,10] i=5 end i=i+1 end end disp(A) end tour=tour+1 end if (victoire) then disp('Bingo') else disp('Looser') end
J'ai testé le code que tu as publié et voilà le résultat :
En gagnant ...
Plusieurs cas ...Code:-->exec('/home/fred/Desktop/mastermind.sce', -1) 2. 6. 1. 3. tour :1 Combinaison : [2,6,1,3] Bingo
en perdantCode:-->exec('mastermind.sce', -1) 6. 5. 7. 6. tour :1 Combinaison : [1,1,1,1] [] tour :2 Combinaison : [6,6,6,6] 11. 11. tour :3 Combinaison : [5,5,5,5] 11. tour :4 Combinaison : [5,6,6,7] 10. 10. 10. 10. tour :5 Combinaison : [6,5,7,6] Bingo
Le comportement en test me paraît correct.Code:.... tour :12 Combinaison : [1,1,1,1] 11. Looser
J'ai avancé le tour=tour+1 et ça marche bien !
Code:tour = 1; S=round(7*rand(1,4)+1) disp(S) M=[] victoire=%F while ( (tour<13) & (~victoire) ) disp('tour :'+string(tour)) M=[] while (~ isequal(size(M),[1,4])) M=input('Combinaison : ") if (~ isequal(size(M),[1,4])) then disp('Mauvais format') end end victoire = isequal(M,S) A=[] if (~victoire) then P=[] for k=1:4 if M(k)==S(k) then A=[A,11] M(k)=0 else P=[P,k] end end for j=P i=1 while (i<5) if (i~=j) & (M(i)==S(j)) then A=[A,10] i=5 end i=i+1 end end disp(A) tour=tour+1 end end if (victoire) then disp('Bingo') else disp('Looser') end
Tu y es arrivée. C'était un peu fastidieux ...
Je vais te sembler lourd mais la manière dont tu t'y es prise n'est pas la bonne ... il y a des méthodes pour arriver à un résultat correct plus rapidement.
Mais bon bravo
C'est pas fini.. Ça ne fonctionne pas dans tous les cas.
S= 3. 5. 5. 4.
M=[1 2 4 5]
=> A=10. 10. 10.
Alors qu'on doit avoir A=10 10
Disons que la réponse est dans S il y 3 mal placé par rapport à M ... non ?
Oui, mais on doit en noter que 2
Voilà ce que j'ai :
Code:tour = 1; S=round(7*rand(1,4)+1) M=[] victoire=%F while ( (tour<13) & (~victoire) ) disp('tour :'+string(tour)) M=[] while (~ isequal(size(M),[1,4])) M=input('Combinaison : ") if (~ isequal(size(M),[1,4])) then disp('Mauvais format') end end victoire = isequal(M,S) A=[] if (~victoire) then P=[] for k=1:4 if M(k)==S(k) then A=[A,11] M(k)=0 else P=[P,k] end end for j=P i=1 while (i<5) if (i~=j) & (M(i)==S(j)) then A=[A,10] M(i)=0 i=5 end i=i+1 end end disp(A) tour=tour+1 end end if (victoire) then disp('Bingo') else disp('Looser') Solution=disp(S) end
Vous pouvez me donner des pistes pour le faire plus rapidement?