
Opti-Défi n°2 : Snake
48 posts
• Page 3 of 5 • 1, 2, 3, 4, 5
Re: Opti-Défi n°2 : Snake
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
.... m'enfin je vais aussi essayer.

-
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)- Posts: 342
- Images: 0
- Joined: 16 Jan 2013, 18:27
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: Médecine
Re: Opti-Défi n°2 : Snake
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 ^^
J'essaye de comprendre ton code mais tu as beaucoup de calculs compliqués ^^
-
m@thieu41Premium
Niveau 11: LV (Légende Vivante)- Posts: 230
- Joined: 20 Jun 2013, 14:24
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: TS
Re: Opti-Défi n°2 : Snake
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 

-
TheMachine02Modo
Niveau 16: CC2 (Commandeur des Calculatrices)- Posts: 342
- Images: 0
- Joined: 16 Jan 2013, 18:27
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: Médecine
Re: Opti-Défi n°2 : Snake
Pas très esthétique mais...ça marche !!! 
(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)

(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)
Last edited by grosged on 09 Jun 2014, 09:41, edited 3 times in total.
-
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)- Posts: 776
- Images: 92
- Joined: 14 Sep 2011, 12:29
- Gender:
- Calculator(s):→ MyCalcs profile
Re: Opti-Défi n°2 : Snake
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?
devient
On perd 2 octets mais on gère tous les cas...
Que se passe-t-il si L1 est déjà définie avant de lancer le prgm?
On perd 2 octets mais au moins c'est propre
Et on gagne 1 octet par rapport à si on avait utilisé DelVar ^^
On peut se servir de Y1 pour Y2?
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
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

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?

- Code: Select all
Z–(S>9
devient
- Code: Select all
Z-iPart(log(Z+.9
On perd 2 octets mais on gère tous les cas...
- Code: Select all
{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?

- Code: Select all
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: Select all
"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: Select all
"1+int(Z¯¹(Ans–1→Y1 // calcule la ligne de la position dans Ans
"Ans+Z-ZY1→Y2 // calcule la colonne ...
- Code: Select all
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

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
-
m@thieu41Premium
Niveau 11: LV (Légende Vivante)- Posts: 230
- Joined: 20 Jun 2013, 14:24
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: TS
Re: Opti-Défi n°2 : Snake
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
annule/efface complètement un éventuel ancien L1
se servir de Y1 pour définir Y2?...bien vu !! j'vais tester ça

la gestion d'un score qui ne dépasserait pas 99 , c'est volontaire


sinon, concernant L1, j'ai fait des test : le fait d'avoir
- Code: Select all
{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

Last edited by grosged on 09 Jun 2014, 10:03, edited 1 time in total.
-
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)- Posts: 776
- Images: 92
- Joined: 14 Sep 2011, 12:29
- Gender:
- Calculator(s):→ MyCalcs profile
Re: Opti-Défi n°2 : Snake
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é
EDIT: à propos de
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:
et la 2ème partie , c'était
Pourrais-tu poster ton idée au sujet des boucles ?...parce qu'avec les modifs un peu partout, je m'y perds..héhé

EDIT: à propos de
- Code: Select all
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: Select all
Ans-128(D²>1)((Ans>128)-(Ans<1)
et la 2ème partie , c'était
- Code: Select all
+16D(D²=cos(2π16¯¹(T–not(D+1
Last edited by grosged on 09 Jun 2014, 10:16, edited 2 times in total.
-
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)- Posts: 776
- Images: 92
- Joined: 14 Sep 2011, 12:29
- Gender:
- Calculator(s):→ MyCalcs profile
Re: Opti-Défi n°2 : Snake
Je modifie juste ton ancien code, sans tenir compte des remarques précédentes:
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
Oui j'ai dis une bêtise pour L1, autant pour moi ^^
En fait j'aime bien ton utilisation de cos ^^
- Code: Select all
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

Oui j'ai dis une bêtise pour L1, autant pour moi ^^
En fait j'aime bien ton utilisation de cos ^^
-
m@thieu41Premium
Niveau 11: LV (Légende Vivante)- Posts: 230
- Joined: 20 Jun 2013, 14:24
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: TS
Re: Opti-Défi n°2 : Snake


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
Last edited by grosged on 09 Jun 2014, 19:54, edited 1 time in total.
-
grosgedVIP++
Niveau 14: CI (Calculateur de l'Infini)- Posts: 776
- Images: 92
- Joined: 14 Sep 2011, 12:29
- Gender:
- Calculator(s):→ MyCalcs profile
Re: Opti-Défi n°2 : Snake
- Code: Select all
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 ? ^^
-
m@thieu41Premium
Niveau 11: LV (Légende Vivante)- Posts: 230
- Joined: 20 Jun 2013, 14:24
- Gender:
- Calculator(s):→ MyCalcs profile
- Class: TS
48 posts
• Page 3 of 5 • 1, 2, 3, 4, 5
Who is online
Users browsing this forum: No registered users and 8 guests