Génaration de partition de Musique
Bonjour,
je vous expliquer mon problème.
Mozart a créé 12 mesures de musique qui peuvent être mise dans n'importe quelle sens et malgrès cela, ça donnera un beau morceau.
Je voudrai faire un site internet qui génère une partition de 12 mesures aléatoire.
Lorsque l'on clique sur un bouton cela créera une simulation de 12 doubles lancés de dés puis les additionnera les paires de lancé. On aura une suite de 12 chiffres donc.
exemple [2, 6, 10, 10, 4, 4, 4, 6, 4, 8, 4, 2]
Et je voudrai que dans la nouvelle page internet on ait :
Une page avec les images 2 /6/10/10/4/4/4/6/4/8/4/2 mise bout à bout (des images de mesure que j'aurai mis au préalable dans un dossier) de manière à avoir une partion de musique.
Merci de votre aide
Petite disgression sur le tri
@riete:
Il existe quelques algorithmes de tri efficaces (quicksort, merge) mais jusqu'à présent, ils ont une caractéristique commune: ils sont récursifs et font des groupes. Imaginons devoir trier des élèves en fonction de leur taille pour la photo de classe . Une méthode performante (id est rapide) est de faire deux groupes, les grands d'un côté, les petits de l'autre. Ensuite on prend le groupe des petits et on le scinde en deux groupes: les très petits et les autres. Idem avec les grands. En répétant ce processus récursif on arrive rapidement à l'ordonnancement final (des groupes... de 1 élève).
Dans cet algorithme on n'a pas cherché à ordonner juste dès le début, mais seulement à trier en créant des groupes, au départ celui des petits et celui des grands. La chose dont on est sûr, c'est que les élèves du groupe des petits seront TOUJOURS plus petits que n'importe élève du groupe des grands. Logique. Donc il ne sert plus à rien de comparer à un moment ou à un autre un élève du groupe des petits avec un élève du groupe des grands.
Maintenant ajoutons un grain de folie: le professeur qui crée les groupes a eu un repas arrosé ;) . Il crée les groupes des petits et des grands, mais sous l'emprise des effets du repas, il ne discerne plus vraiment qui est petit et qui est grand, et donc se trompe en mélangeant dans chaque groupe des petits et des grands. Ensuite il va prendre le groupe des "soit-disant petits" (il se rappelle qu'il doit les retrier !) et refaire deux groupes... en continuant à mélanger les élèves sans le vouloir . Et ainsi de suite. Puis il refait la même choses avec les "soit-disant grands". Et comme par définition les "soit-disant grands" sont plus grands que les "soit-disant petits", il ne les comparera plus jamais entre eux, et il ne pourra donc pas s'apercevoir de son erreur (sauf sur la photo...).
Maintenant, informatiquement, le choix de répartir dans tel ou tel groupe est dirigé par la fonction de comparaison, qui compare deux éléments entre eux, en renvoyant >0 si le premier élément est supérieur au second, <0 pour l'inverse et = 0 si égalité. Si maintenant cette fonction déraille (le repas bien arrosé...) et qu'elle renvoie aléatoirement <0, >0, ou =0 (même si ce dernier cas n'a que peu d'intérêt) alors on crée des groupes mélangés (les grands qui peuvent se retrouver dans le "groupe des petits" et réciproquement). Et comme les groupes sont supposés avoir été triés correctement, le désordre s'installe sans posibilité d'y remédier. On s'en apercevra uniquement lors de l'affichage du tableau trié (la fameuse photo !).
Un exemple: dans le cas où la fonction de comparaison est juste:
Code:
1 2 3 4 5 6 7 8 9
|
A TRIER:
(3 7 5 2 8 6 1 4)
1er découpage:
(2 1 3 4)(7 6 5 8)
2eme découpage
(2 1)(3 4)(5 6)(8 7)
dernier découpage
1 2 3 4 5 6 7 8 |
Et si la fonction de comparaison déraille:
Code:
1 2 3 4 5 6 7 8 9
|
A TRIER:
(3 7 5 2 8 6 1 4)
1er découpage, ça déraille:
(7 2 4 8)(5 1 3 6)
2eme découpage, ça déraille:
(4 8)(2 7)(1 3)(6 5)
dernier découpage
4 8 7 2 3 1 5 6 |
Maintenant il y a une faille dans tout cela: une fois le tri des élèves fini, si le professeur s'aperçoit qu'il y a un souci - moment de lucidité visuel ;) - il sera tenté de tout recommencer... Et on est reparti pour un tour !
Informatiquement cela n'est pas (?) envisageable car un des objectifs d'une fonction de tri est d'être rapide. Donc une fois terminée son traitement la fonction se presse de rendre la main...
Quant à la fonction de comparaison, elle essaie d'être juste dans le désordre qu'elle génère, d'où le 0.5, Math.random() renvoyant une valeur entre 0 et 1.
Code:
1 2
|
function() {return 0.5 - Math.random()}) |
J'espère avoir répondu à tes interrogations :roll: .
ERE