Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

astuce, raccourci, pattern, bref simplification pour 4 coins

21 réponses
Avatar
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.

10 réponses

1 2 3
Avatar
Olivier Miakinen
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; » ?
Avatar
Olivier Masson
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.
Avatar
Dr J R Stockton
En fr.comp.lang.javascript message <491b0577$0$6124$
r>, 12 Nov 2008 17:33:52, Olivier Masson a ecrit:
...



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 <URL:http://www.jibbering.com/faq/index.html>.
<URL:http://www.merlyn.demon.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demon.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.
Avatar
db
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
Avatar
Olivier Masson
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
: '');
Avatar
db
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
Avatar
db
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;
Avatar
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...
<cit.>
NNTP-Posting-Date: Wed, 12 Nov 2008 23:40:35 UTC
Date: Wed, 12 Nov 2008 19:37:39 +0000
</cit.>

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 ?
Avatar
Olivier Masson
db a écrit :


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



:) on atteint l'optimisation parfaite. Encore merci.
Avatar
Dr J R Stockton
In fr.comp.lang.javascript message <491b6ea6$, 13 Nov 2008
01:02:46, Olivier Miakinen <om+ a ecrit :
Le 12/11/2008 20:37, Dr J R Stockton a écrit :
...





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

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
<URL:http://www.merlyn.demon.co.uk/zel-card.png>, but I could not have
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 <URL:http://www.merlyn.demon.co.uk/> - w. FAQish topics, links, acronyms
PAS EXE etc : <URL:http://www.merlyn.demon.co.uk/programs/> - see 00index.htm
Dates - miscdate.htm moredate.htm js-dates.htm pas-time.htm critdate.htm etc.
1 2 3