| Challenges d'optimisation | |
|
|
Auteur | Message |
---|
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Challenges d'optimisation Dim 21 Oct 2012 - 15:29 | |
| Challenges d'optimisation Challenge 1 ouvert Salut, je vous présente un petit challenge d'optimisation. Je posterais des fonctions, qui seront en général peu voir pas du tout optimisées, et le but seras de corriger les éventuelles erreurs, mais surtout rendre la fonction plus rapide en temps d’exécution, sans pour autant diminuer la qualité du résultat. Vous pourrez poster votre avancée en spoiler, ainsi que discuter des méthodes utilisée, voir corriger les autres membres. Mais si vous avez finis et que vous ne voyez plus ou optimiser le code, envoyez le moi par MP. Chaque participant recevra un nombre de point en fonction de l'optimisation de son code. Un peu optimisé: 1pt Optimisé: 2pts Optimisation maximale: 3pts Niveau Débutant : score * 1 Niveau Intermédiaire : score * 2 Niveau Difficile : score * 3 Niveau DébutantChallenge 1-1draw_grid(x, y, width, height, size) - Code:
-
wx = argument0 wy = argument1 wid = argument2 hei = argument3 size = argument4
for(i=0; i<wid; i+=1) for(j=0; j<hei; j+=1) { draw_line(wx + size*i, wy + size*j, wx + size*i, wy + size*(j+1)) draw_line(wx + size*i, wy + size*j, wx + size*(i+1), wy + size*j) } Niveau IntermédiaireChallenge 2-1draw_spiral(x, y, r, turns) - Code:
-
wx = argument0 wy = argument1 r = argument2 turns = argument3 step = 1
R = 0 for(i=0; i<360 * turns; i+=step) { x1 = cos(degtorad(i)) * R y1 = sin(degtorad(i)) * R x2 = cos(degtorad(i+step)) * (R + r/(turns * 360 / step)) y2 = sin(degtorad(i+step)) * (R + r/(turns * 360 / step)) draw_line(wx + x1, wy + y1, wx + x2, wy + y2) R += r/(turns * 360 / step) } Participants: -M@d_Doc : 4pts --Coco- : 4pts
Dernière édition par onilink_ le Dim 21 Oct 2012 - 18:49, édité 4 fois |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 16:10 | |
| Allez, je participe, j'ai un peu de temps en ce moment :p - Spoiler:
1) Remplacement des cos(dectorad blablabla par un lengthdir_, c'est sensé être plus rapide. 2) R += r/(turns * 360 / step) placé 'au milieu' pour faire le calcul une fois au lieu de 3 - Code:
-
wx = argument0 wy = argument1 r = argument2 turns = argument3 step = 1
R = 0 for(i=0; i<360 * turns; i+=step) { x1 = lengthdir_x(R,i) y1 = lengthdir_y(R,i) R += r/(turns * 360 / step) x2 = lengthdir_x(R,i+step) y2 = lengthdir_y(R,i+step) draw_line(wx + x1, wy + y1, wx + x2, wy + y2) }
_________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 16:19 | |
| Pas mal, y a de l'idée Allé encore un petit effort, on peut encore diviser les calculs par 2 la :b |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 17:08 | |
| raaah oui c'est tout bête en plus : - Spoiler:
3)calcul de r/(turns * 360 / step) une seule fois - Code:
-
wx = argument0 wy = argument1 r = argument2 turns = argument3 step = 1 banana=r/(turns * 360 / step) R = 0 for(i=0; i<360 * turns; i+=step) { x1 = lengthdir_x(R,i) y1 = lengthdir_y(R,i) R += banana x2 = lengthdir_x(R,i+step) y2 = lengthdir_y(R,i+step) draw_line(wx + x1, wy + y1, wx + x2, wy + y2) }
_________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 17:10 | |
| Héhé :b - Spoiler:
Allé maintenant vire la moitié de trigo qui sert a rien
|
|
| |
-Coco- Utilisateur confirmé: Rang ***
Messages : 545 Localisation : Grenoble - Montpellier Projet Actuel : Orion VII - 0%
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 17:52 | |
| - Spoiler:
Hm... Peut être en stockant les dernières coordonnées du point ? (en modifiant le code de M@d) - Code:
-
wx = argument0; // M'en fiche je mets des ; partout moi :D wy = argument1; r = argument2; turns = argument3; step = 1; banana=r/(turns * 360 / step); R = 0;
x1=0; //puisque au premier step R vaut 0 y1=0;
for(i=0; i<360 * turns; i+=step) { R += banana; x2 = lengthdir_x(R,i+step); y2 = lengthdir_y(R,i+step); draw_line(wx + x1, wy + y1, wx + x2, wy + y2);
x1=x2; y1=y2; } Ça a l'air de plutôt marcher correctement et ça fait un peu moins (genre deux fois moins) de calculs trigo. Sinon pour la deobf je crois pas que j'y arriverai
_________________ Oh, snap.
|
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 17:58 | |
| Yep c'est ça coco :b Pense au spoilers par contre x)
Mais bon vous oubliez toujours un outil important pour tout ce qui est dessin. |
|
| |
-Coco- Utilisateur confirmé: Rang ***
Messages : 545 Localisation : Grenoble - Montpellier Projet Actuel : Orion VII - 0%
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 17:59 | |
| Oui, désolé :p
Bon j'ai pas trop perdu la main ^^ Je me suis fait à l'opti en programmant sur TI, la moindre addition prend 5 secondes alors il faut minimiser au maximum le nombre d'opérations par boucle...
Ça me fait 2 ou 3 points ça ? |
|
| |
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 18:19 | |
| raaah ouiiii j'avais pas vu ça c'est tout bête, et... bam! - Spoiler:
- Code:
-
wx = argument0; // M'en fiche je mets des ; partout moi :D wy = argument1; r = argument2; turns = argument3; step = 1; banana=r/(turns * 360 / step); R = 0;
x1=0; //puisque au premier step R vaut 0 y1=0; draw_primitive_begin(pr_linestrip) draw_vertex(wx,wy) for(i=0; i<360 * turns; i+=step) { R += banana; x1 = lengthdir_x(R,i+step); y1 = lengthdir_y(R,i+step); draw_vertex(wx+x2,wy+y2) } draw_primitive_end()
_________________ Tous les icones de gm utilisables sur le cbna ICI |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 18:34 | |
| Héhé on se rapproche du code final :b Mais y a encore quelques optis possible, je vous laisse chercher |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 18:46 | |
| Remplacer banana par une variable plus courte et plus compréhensible ? Sinon pour la déobsfurcation , j'ai du lire ton tuto sur les op' binaires, j'ai enfin capté ! Je vais essayer d'imprimer ton code ce soir, j'ai 2h d'anglais demain |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 18:51 | |
| Ahah, ben c'est cool ça :b Mon tuto sur les op binaires commence a se faire vieux par contre... je pense que je vais revoir quelques trucs. Sinon, j'ajoute des niveaux de difficulté la, histoire de rendre les challenges accessibles a tous |
|
| |
-Coco- Utilisateur confirmé: Rang ***
Messages : 545 Localisation : Grenoble - Montpellier Projet Actuel : Orion VII - 0%
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 19:13 | |
| Ah j'avais pas pensé à ça... Ceci dit, on peut toujours faire des trucs à la c*n qui altèrent à la lisibilité mais qui permettent de gagner quelques lignes... - Spoiler:
- Code:
-
step = 1; banana=argument2/(argument3 * 360 / step); R = 0;
x1=0; //puisque au premier step R vaut 0 y1=0; draw_primitive_begin(pr_linestrip); draw_vertex(argument0,argument1) for(i=0; i<360 * argument3+step; i+=step) { R += banana; x1 = lengthdir_x(R,i+step); y1 = lengthdir_y(R,i+step); draw_vertex(argument0+x1,argument1+y1) } draw_primitive_end(); Bon en gros, j'ai rendu le code illisible (en remplaçant les variables par des arguments, ça fait des opérations en moins mais je sais pas si ça compte)... Je le poste quand même au cas où.
_________________ Oh, snap.
|
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 19:15 | |
| Non c'est pas ça, y a quand même quelques optimisations sur les opérations a faire, mais surtout une plus compliquée a penser qui a un rapport avec la fonction elle même. Pour ceux qui veulent un indice: - Spoiler:
step
|
|
| |
Mass *Excellent utilisateur*
Messages : 3351 Localisation : Dans une canonnière wookie. Projet Actuel : Monter des trucs et des machins
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 22:12 | |
| - Spoiler:
Le fait qu'il me semble que ce soit partiellement compilé et donc plus rapide si on le met dans draw plutôt que dans step ?
|
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Challenges d'optimisation Dim 21 Oct 2012 - 22:13 | |
| - Spoiler:
Non, quand je parlais de step je parlais de la variable :b
|
|
| |
Wargamer *Excellent utilisateur*
Messages : 6938 Projet Actuel : Bataille de cake au fruits
| Sujet: Re: Challenges d'optimisation Lun 22 Oct 2012 - 1:13 | |
| Tu parle du fait que à chaque étape de la boucle il vérifie la même série opération au lieu d'utiliser une constante? _________________ Règle #1 du CBNA, ne pas chercher à faire dans la subtilité; personne comprend |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Challenges d'optimisation Lun 22 Oct 2012 - 7:53 | |
| Pour la spirale on a pas tellement le choix, mais y a un moyen de diminuer le nombre de tours de boucles |
|
| |
Wargamer *Excellent utilisateur*
Messages : 6938 Projet Actuel : Bataille de cake au fruits
| Sujet: Re: Challenges d'optimisation Lun 22 Oct 2012 - 15:38 | |
| Ba de ce que je vois, rien ne change dans la condition. for(i=0; i<360 * argument3+step; i+=step)
pourrait très bien être
a = 360 * argument3+step for(i=0; i<a; i+=step) _________________ Règle #1 du CBNA, ne pas chercher à faire dans la subtilité; personne comprend |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Challenges d'optimisation Lun 22 Oct 2012 - 15:43 | |
| Ouai ça je suis d'accord mais ça n'a pas vraiment d'influence sur les performances. Il y a une optimisation qui permettra de gagner beaucoup d'itérations |
|
| |
-Coco- Utilisateur confirmé: Rang ***
Messages : 545 Localisation : Grenoble - Montpellier Projet Actuel : Orion VII - 0%
| Sujet: Re: Challenges d'optimisation Lun 22 Oct 2012 - 17:11 | |
| Au cas où... - Spoiler:
On peut toujours augmenter la valeur de step à 2 ou à 3, la spirale sera à peine moins précise (ça se verra quasiment pas) et ça diminuera pas mal le nombre d'itérations
_________________ Oh, snap.
|
|
| |
Invité Invité
| Sujet: Re: Challenges d'optimisation Lun 22 Oct 2012 - 17:28 | |
| |
|
| |
onilink_ Modérateur
Messages : 9180 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Challenges d'optimisation Lun 22 Oct 2012 - 18:36 | |
| Ah ben d'ailleurs lui il nécessiterais pas mal d'optis x) Je peut le prendre pour le challenge? |
|
| |
Invité Invité
| Sujet: Re: Challenges d'optimisation Lun 22 Oct 2012 - 19:47 | |
| |
|
| |
Contenu sponsorisé
| Sujet: Re: Challenges d'optimisation | |
| |
|
| |
| Challenges d'optimisation | |
|