π
<-
Chat plein-écran
[^]

Opti-Défi n°2 : Snake

Re: Opti-Défi n°2 : Snake

Message non lude TheMachine02 » 09 Juin 2014, 09:09

Ah oui effectivement, ça risque au niveau fuite de mémoire. On pourrait remarque aussi utiliser une autre boucle pour ce goto, mais là, on rendrait l’interpréteur fou :p .... m'enfin je vais aussi essayer.
Avatar de l’utilisateur
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 29.4%
 
Messages: 341
Images: 0
Inscription: 16 Jan 2013, 18:27
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Médecine

Re: Opti-Défi n°2 : Snake

Message non lude m@thieu41 » 09 Juin 2014, 09:13

Non tu ne peux pas remplacer par des boucles car les 2 ne sont pas imbriquées "normalement".

J'essaye de comprendre ton code mais tu as beaucoup de calculs compliqués ^^
Avatar de l’utilisateur
m@thieu41Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 71.3%
 
Messages: 230
Inscription: 20 Juin 2013, 14:24
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: TS

Re: Opti-Défi n°2 : Snake

Message non lude TheMachine02 » 09 Juin 2014, 09:17

Non, pas les deux boucles, mais le Lbl 0 : goto 0 peut bien être changé en While 1 : End sans risque de fuite de mémoire, et en sauvant 1 octet :p
Avatar de l’utilisateur
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Prochain niv.: 29.4%
 
Messages: 341
Images: 0
Inscription: 16 Jan 2013, 18:27
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile
Classe: Médecine

Re: Opti-Défi n°2 : Snake

Message non lude grosged » 09 Juin 2014, 09:26

Pas très esthétique mais...ça marche !!! :D
(voir mon poste édité plus haut : viewtopic.php?f=11&t=14596&start=10#p165142 )
c'est vrai qu'à chaque fois que le serpent tombera sur une nourriture, ce GOTO (placé dans la boucle repeat;end) va prendre de la mémoire (au niveau de la "pile " où sont stockés les branchements, je pense)
Dernière édition par grosged le 09 Juin 2014, 09:41, édité 3 fois.
Avatar de l’utilisateur
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 30.2%
 
Messages: 770
Images: 75
Inscription: 14 Sep 2011, 12:29
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Opti-Défi n°2 : Snake

Message non lude m@thieu41 » 09 Juin 2014, 09:39

Oui ça m'a l'air faisable ;)

Par contre il y a un truc que je pige pas:
Dans la liste L1 tu stockes la coordonnée de la prochaine position du serpent c'est bien ça?
Que ce passe-t-il si cette prochaine coordonnée est 9? Il risque d'y avoir conflit avec le nombre lié à la denrée non?

Autre remarque: je me trompe peut être mais il me semble que tu gère la collision avec le score des unités et des dizaines, mais pas des centaines? :p
Code: Tout sélectionner
Z–(S>9

devient
Code: Tout sélectionner
Z-iPart(log(Z+.9

On perd 2 octets mais on gère tous les cas...

Code: Tout sélectionner
{2,3,4,5→L1 // positions successives de la queue
8Z→dim(L1 // liste contenant le terrain (128 cases)

Que se passe-t-il si L1 est déjà définie avant de lancer le prgm? :p
Code: Tout sélectionner
seq(A(A<7),A,2,1+8Z->L1

On perd 2 octets mais au moins c'est propre ;)
Et on gagne 1 octet par rapport à si on avait utilisé DelVar ^^


Code: Tout sélectionner
"1+int(Z¯¹(Ans–1→Y1 // calcule la ligne de la position dans Ans
"1+ZfPart(Z¯¹(Ans–1→Y2 // calcule la colonne ...

On peut se servir de Y1 pour Y2?
Code: Tout sélectionner
"1+int(Z¯¹(Ans–1→Y1 // calcule la ligne de la position dans Ans
"Ans+Z-ZY1→Y2 // calcule la colonne ...



Code: Tout sélectionner
Ans–Z(8(D²>1)((Ans>8Z)–(Ans<1))+D(D²=cos(π8¯¹(T–not(D+1→L1(T

Ca m'a l'air bien compliqué ce calcul ^^


PS: Je posterai mon code mais il est moins bien pensé ^^


EDIT: Pas cette boucle!!!
Tu mélanges les goto/boucles de façon tout à fait horrible :p
On a une fuite à chaque fois que le serpent mange une denrée, ça ralenti tout et c'est pas propre x)
http://tout82.free.fr/forum/sujet.php?sujet=2757
Il fallait modifier l'autre goto/lbl par un While 1/End plutôt, comme proposé par theMachine02
Avatar de l’utilisateur
m@thieu41Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 71.3%
 
Messages: 230
Inscription: 20 Juin 2013, 14:24
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: TS

Re: Opti-Défi n°2 : Snake

Message non lude grosged » 09 Juin 2014, 09:58

oui Mathieu, tu as raison : il risque d'y avoir conflit avec la denrée, ....on pourrait remplacer la valeur 9 par Pi par exemple ! (je modifie ça de suite ;) )
la gestion d'un score qui ne dépasserait pas 99 , c'est volontaire ;) (je me dis qu'arrivé à 100 , le serpent occuperait quand même 105 cases sur (128-3=)125 cases (en théorie, possible, mais en pratique , je doute fort ;) )

sinon, concernant L1, j'ai fait des test : le fait d'avoir
Code: Tout sélectionner
{2,3,4,5→L1 // positions successives de la queue
8Z→dim(L1 // liste contenant le terrain (128 cases)

annule/efface complètement un éventuel ancien L1

se servir de Y1 pour définir Y2?...bien vu !! j'vais tester ça :p
Dernière édition par grosged le 09 Juin 2014, 10:03, édité 1 fois.
Avatar de l’utilisateur
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 30.2%
 
Messages: 770
Images: 75
Inscription: 14 Sep 2011, 12:29
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Opti-Défi n°2 : Snake

Message non lude grosged » 09 Juin 2014, 10:01

Hey Mathieu ! j'viens de voir ton EDIT
Pourrais-tu poster ton idée au sujet des boucles ?...parce qu'avec les modifs un peu partout, je m'y perds..héhé :D

EDIT: à propos de
Code: Tout sélectionner
Ans–Z(8(D²>1)((Ans>8Z)–(Ans<1))+D(D²=cos(π8¯¹(T–not(D+1→L1(T

j'ai , au final , factorisé...et j'ai utilisé la fonction cosinus comme repère pour les bords gauche et droit (y a certainement moyen d'utiliser 1 ou 2 fpart bien placés mais j'avais la flemme...et comme c'était pas trop long..., haha)
la 1ère partie gère les extrémités supérieures/inférieures du terrain:
avant factorisation, c'était:
Code: Tout sélectionner
Ans-128(D²>1)((Ans>128)-(Ans<1)

et la 2ème partie , c'était
Code: Tout sélectionner
+16D(D²=cos(2π16¯¹(T–not(D+1
Dernière édition par grosged le 09 Juin 2014, 10:16, édité 2 fois.
Avatar de l’utilisateur
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 30.2%
 
Messages: 770
Images: 75
Inscription: 14 Sep 2011, 12:29
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Opti-Défi n°2 : Snake

Message non lude m@thieu41 » 09 Juin 2014, 10:09

Je modifie juste ton ancien code, sans tenir compte des remarques précédentes:
Code: Tout sélectionner
ClrHome //efface l'écran
Disp "ØØØØØ //affiche le serpent ( long de 5 cases au départ)
16→Z // nb de colonnes de l'écran
"1+int(Z¯¹(Ans–1→Y1 // calcule la ligne de la position dans Ans
"1+ZfPart(Z¯¹(Ans–1→Y2 // calcule la colonne ...
{2,3,4,5→L1 // positions successives de la queue
8Z→dim(L1 // liste contenant le terrain (128 cases)
DelVar SZ→D //score à 0, Direction=16 (vers le bas)
5→T:1→Q // position de la tête, et de la queue
While 1 // <- ICI
Z–(S>9 // colonne où l'on ...
Output(1,Ans,S // affichera le score
Ans→L1(Ans // marque cet emplacement d'une valeur autre que 0
While L1(Ans // détermine au hasard
randInt(1,8Z // l'emplacement d'une nouvelle denrée
End
Output(Y1,Y2,1 // puis l'affiche
9→L1(Ans // et marque sur le terrain (liste L1)
S+1→S // incrémente le score
Lbl 1
getKey // scrute le clavier
(Ans=26)–(Ans=24)+Z((Ans=34)–(Ans=25 //(gauche:-1 droite: 1 haut: -16 bas: 16)
If Ans:Ans→D // si l'une des flèches appuyées alors nouvelle direction dans D
T+D // va maintenant gérer les bords du terrain (téléporteurs)
Ans–Z(8(D²>1)((Ans>8Z)–(Ans<1))+D(D²=cos(π8¯¹(T–not(D+1→L1(T
Ans→T // mets à jour la position de la tête
Output(Y1,Y2,Ø // et l'affiche
If 9=L1(T // si on tombe sur la denrée
End // alors on n'efface pas la queue <- ET ICI
Q→W // efface la queue
Output(Y1,Y2,"░ // au moyen d'un espace
L1(Q→Q //nouvelle position de la queue
Ø→L1(W // marque d'un 0 à l'ancienne position
If not(L1(T // la tête a-t-elle heurtée qqchose?
Goto 1 // non? alors on continue

L'autre modif marche, mais est source de conflit entre les goto/lbl et la boucle... Donc ça ralenti de plus en plus, et c'est pas propre x)


C'est vrai que c'est dur mais possible quand même de dépasser 99 :p


Oui j'ai dis une bêtise pour L1, autant pour moi ^^


En fait j'aime bien ton utilisation de cos ^^
Avatar de l’utilisateur
m@thieu41Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 71.3%
 
Messages: 230
Inscription: 20 Juin 2013, 14:24
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: TS

Re: Opti-Défi n°2 : Snake

Message non lude grosged » 09 Juin 2014, 10:23

:=): Aaaaah OK OK je comprends maintenant !! merci !! :D

j'vais modifier mon programme...et, par la même occasion, remplacer cette valeur 9 ( représentant une denrée, et éventuellement conflictuelle) par Pi (j'avais aussi pensé au nb d'Euler, mais prends 1 octet de plus que Pi)
Ainsi, le programme est maintenant descendu à ... 302 / 305 octets :=):


ClrHome //efface l'écran
Disp "ØØØØØ //affiche le serpent ( long de 5 cases au départ)
16→Z // nb de colonnes de l'écran
"1+int(Z¯¹(Ans–1→Y1 // calcule la ligne de la position dans Ans
"Ans+Z-ZY1→Y2 // calcule la colonne ... opti de Mathieu ;)
{2,3,4,5→L1 // positions successives de la queue
8Z→dim(L1 // liste contenant le terrain (128 cases)
DelVar SZ→D //score à 0, Direction=16 (vers le bas)
5→T:1→Q // position de la tête, et de la queue
While 1
Z–(S>9 // colonne où l'on ...
Output(1,Ans,S // affichera le score
Ans→L1(Ans // marque cet emplacement d'une valeur autre que 0
While L1(Ans // détermine au hasard
randInt(1,8Z // l'emplacement d'une nouvelle denrée
End
Output(Y1,Y2,1 // puis l'affiche
π→L1(Ans // et la marque sur le terrain (liste L1)
S+1→S // incrémente le score
LBL 1 // tant que la tête va sur des cases vides (mis à part la denrée)
getKey // scrute le clavier
(Ans=26)–(Ans=24)+Z((Ans=34)–(Ans=25 //(gauche:-1 droite: 1 haut: -16 bas: 16)
If Ans:Ans→D // si l'une des flèches appuyées alors nouvelle direction dans D
T+D // va maintenant gérer les bords du terrain (téléporteurs)
Ans–Z(8(D²>1)((Ans>8Z)–(Ans<1))+D(D²=cos(π8¯¹(T–not(D+1→L1(T
Ans→T // actualise la position de la tête
Output(Y1,Y2,Ø // et l'affiche
If π=L1(T // (exception de la denrée)
End // alors on n'efface pas la queue
Q→W // efface la queue
Output(Y1,Y2,"░ // au moyen d'un espace
L1(Q→Q //nouvelle position de la queue
Ø→L1(W // marque d'un 0 l'ancienne position
If not(L1(T // continue si la tête n'a rien heurté
Goto 1
Dernière édition par grosged le 09 Juin 2014, 19:54, édité 1 fois.
Avatar de l’utilisateur
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Prochain niv.: 30.2%
 
Messages: 770
Images: 75
Inscription: 14 Sep 2011, 12:29
Genre: Non spécifié
Calculatrice(s):
MyCalcs profile

Re: Opti-Défi n°2 : Snake

Message non lude m@thieu41 » 09 Juin 2014, 12:21

Code: Tout sélectionner
Repeat L1(T // tant que la tête va sur des cases vides (mis à part la denrée)

Ca serait pas plutôt Lbl 1 ? ^^
Avatar de l’utilisateur
m@thieu41Premium
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Prochain niv.: 71.3%
 
Messages: 230
Inscription: 20 Juin 2013, 14:24
Genre: Homme
Calculatrice(s):
MyCalcs profile
Classe: TS

PrécédenteSuivante

Retourner vers TI-Basic

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 6 invités

-
Rechercher
-
Social TI-Planet
-
Sujets à la une
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Faire un don / Premium
Pour plus de concours, de lots, de tests, nous aider à payer le serveur et les domaines...
Faire un don
Découvrez les avantages d'un compte donateur !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partenaires et pub
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
964 utilisateurs:
>931 invités
>29 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Autres sites intéressants
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)