[Optimisation] Mastermind

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)
Si quelqu'un pouvait m'aider (et surtout m'expliquer !) pour alléger le code et un peu l'améliorer !
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: Select all
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 !