astuce, raccourci, pattern, bref simplification pour 4 coins

Le
Olivier Masson
Bonjour,

Comment puis-je simplifier cette horreur ?
var x=1;
var y=1;

for () {

if (x == 1) {
if (y == 1) {
y = -1;
}
else {
x = -1;
y = 1;
}
}
else
if (y == 1)
y = -1
}

Le but étant d'avoir à chaque passage d'une boucle les coordonnées d'un
coin.
JS n'aimant pas avoir plusieurs instructions dans une condition de cette
forme : (x) ? (y=1;x=1) : x=0;

Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #17822941
Le 12/11/2008 17:33, Olivier Masson a écrit :

Comment puis-je simplifier cette horreur ?
var x=1;
var y=1;

for (...) {
...
if (x == 1) {
if (y == 1) {
y = -1;
}
else {
x = -1;
y = 1;
}
}
else
if (y == 1)
y = -1
}



Les variables x et y ne peuvent valoir que 1 ou -1 ? Si oui :

switch(2*x+y) {
case 3: // (1,1) -> (1,-1)
y = -1;
break;
case 1: // (1,-1) -> (-1,1)
x = -1;
y = 1;
break;
case -1: // (-1,1) -> (-1,-1)
y = -1;
break;
}

Le but étant d'avoir à chaque passage d'une boucle les coordonnées d'un
coin.
JS n'aimant pas avoir plusieurs instructions dans une condition de cette
forme : (x) ? (y=1;x=1) : x=0;



Tu as essayé « (x) ? (y=1,x=1) : x=0; » ?
Olivier Masson
Le #17823961
Olivier Miakinen a écrit :

Les variables x et y ne peuvent valoir que 1 ou -1 ? Si oui :




Oui

switch(2*x+y) {
case 3: // (1,1) -> (1,-1)
y = -1;
break;
case 1: // (1,-1) -> (-1,1)
x = -1;
y = 1;
break;
case -1: // (-1,1) -> (-1,-1)
y = -1;
break;
}




C'est joli mais le but est d'avoir l'expression la plus brève possible.


Tu as essayé « (x) ? (y=1,x=1) : x=0; » ?



Non, je vais essayé.
Merci.
Dr J R Stockton
Le #17827441
En fr.comp.lang.javascript message <491b0577$0$6124$
r>, 12 Nov 2008 17:33:52, Olivier Masson
...



Le but étant d'avoir à chaque passage d'une boucle les coordonnées d'un
coin.
JS n'aimant pas avoir plusieurs instructions dans une condition de
cette forme : (x) ? (y=1;x=1) : x=0;




Essayez s.v.p. cette forme : (x) ? (y=1,x=1) : x=0; // avec , pas ;

Essayez aussi x=1 ; y=1 ;
et plusieurs fois T = X ; X = -y ; y = T ; // <G>

C'est une bonne idée de lire le newsgroup C.L.J et sa FAQ. Voir ci-dessous.

--
(c) John Stockton, nr London UK. ?@merlyn.demon.co.uk IE7 FF2 Op9 Sf3
news:comp.lang.javascript FAQ
db
Le #17824961
Olivier Masson a écrit :
Bonjour,

Comment puis-je simplifier cette horreur ?
var x=1;
var y=1;

for (...) {
....
if (x == 1) {
if (y == 1) {
y = -1;
}
else {
x = -1;
y = 1;
}
}
else
if (y == 1)
y = -1
}

Le but étant d'avoir à chaque passage d'une boucle les coordonnées d'un
coin.
JS n'aimant pas avoir plusieurs instructions dans une condition de cette
forme : (x) ? (y=1;x=1) : x=0;

Merci.



Peut-être :
y=x==1?-xy:-1;
x=x==1?-y:-1;

db
Olivier Masson
Le #17825151
db a écrit :

Peut-être :
y=x==1?-xy:-1;
x=x==1?-y:-1;

db



Ouah ! Superbe, avec les parenthèses adéquates ça fonctionne comme il faut.
On gagne même une dizaine de caractères sur la version (qui donc
fonctionne avec la virgule, merci Olivier) :
(x == 1) ? ((y == 1) ? (y = -1) : (x = -1, y = 1)) : ((y == 1) ? y = -1
: '');
db
Le #17825571
Olivier Masson a écrit :
db a écrit :

Peut-être :
y=x==1?-xy:-1;
x=x==1?-y:-1;

db



Ouah ! Superbe, avec les parenthèses adéquates ça fonctionne comme il faut.
On gagne même une dizaine de caractères sur la version (qui donc
fonctionne avec la virgule, merci Olivier) :
(x == 1) ? ((y == 1) ? (y = -1) : (x = -1, y = 1)) : ((y == 1) ? y = -1
: '');



Pour gagner deux caractères de plus :
y=x==1?-xy:x;
x=x==1?-y:x;

db
db
Le #17825981
db a écrit :

Pour gagner deux caractères de plus :
y=x==1?-xy:x;
x=x==1?-y:x;





et donc :
y=x==1?-y:x;
x=x==1?-y:x;
Olivier Miakinen
Le #17827621
Le 12/11/2008 20:37, Dr J R Stockton a écrit :
...





En réalité c'était quatre heures et trois minutes plus tard...
NNTP-Posting-Date: Wed, 12 Nov 2008 23:40:35 UTC
Date: Wed, 12 Nov 2008 19:37:39 +0000

Vérifie soit ton heure locale (était-il 19 h 37 quand tu as écrit ?)
soit ton fuseau horaire (es-tu dans le timezone +0000 ?)

Essayez s.v.p. cette forme : (x) ? (y=1,x=1) : x=0; // avec , pas ;

[...]

C'est une bonne idée de lire le newsgroup C.L.J et sa FAQ. Voir ci-dessous.



Oui, mais c'est aussi une bonne idée de lire le groupe f.c.l.j. puisque
j'avais fait cette même réponse plus de six heures avant toi. Quant au
fait de conseiller régulièrement la lecture d'une FAQ en anglais dans un
groupe francophone... aurais-tu le courage de la traduire en français ?
Olivier Masson
Le #17832031
db a écrit :


et donc :
y=x==1?-y:x;
x=x==1?-y:x;



:) on atteint l'optimisation parfaite. Encore merci.
Dr J R Stockton
Le #17837161
In fr.comp.lang.javascript message 01:02:46, Olivier Miakinen
Le 12/11/2008 20:37, Dr J R Stockton a écrit :
...





En réalité c'était quatre heures et trois minutes plus tard...
NNTP-Posting-Date: Wed, 12 Nov 2008 23:40:35 UTC
Date: Wed, 12 Nov 2008 19:37:39 +0000

Vérifie soit ton heure locale (était-il 19 h 37 quand tu as écrit ?)
soit ton fuseau horaire (es-tu dans le timezone +0000 ?)



C'est ca. Je me sers de Turnpike, off-line, pour lire et pour ecrire.

J'ai ecrit jusqu'a 19:37 GMT, quand je le mets dans mon "Outbox". Il
dormait dans cette boite jusqu'a 23:40 GMT, quand j'au fait mon coup de
telephon, et l'article departait par NNTP.

Ton article arrivait ici vers 23:42 GMT; mais j'allait au lit; je l'ai
lu aujourd'hui apres-midi.

Essayez s.v.p. cette forme : (x) ? (y=1,x=1) : x=0; // avec , pas ;

[...]

C'est une bonne idée de lire le newsgroup C.L.J et sa FAQ. Voir ci-dessous.



Oui, mais c'est aussi une bonne idée de lire le groupe f.c.l.j. puisque
j'avais fait cette même réponse plus de six heures avant toi. Quant au
fait de conseiller régulièrement la lecture d'une FAQ en anglais dans un
groupe francophone... aurais-tu le courage de la traduire en français ?



Reading a foreign language is easier than writing one. I can read
written it. The same goes for "Asterix le Gaulois" and "De la Terre a
la lune" and "Les Trois Mousquetaires". You can read this paragraph,
but ...

--
(c) John Stockton, nr London, UK. ?@merlyn.demon.co.uk Turnpike v6.05.
Web PAS EXE etc : Dates - miscdate.htm moredate.htm js-dates.htm pas-time.htm critdate.htm etc.
Publicité
Poster une réponse
Anonyme