Partage
  • Partager sur Facebook
  • Partager sur Twitter

[AS]Comment classer des nombres puis garder les 5 premiers

ex {23;54;12;8;100;84;1;37} ==> {1;8;12;23;37}

Sujet résolu
    17 juin 2007 à 15:09:17

    Bonjour,

    Je suis confronté a un petit probleme en AS, j'aurais besoin de quelque chose qui dans un array de la forme (joueur[i].lastChild.firstChild) classe tous les nombres dans l'ordre croissant puis je voudrais garder que les 5 premiers.

    Merci de votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      18 juin 2007 à 16:32:59

      :euh: Personne n'a de solution ?

      Pour l'instant j'ai fait un petit code permettant de récupérer la plus grande mais les 5 premieres ca serait mieux. ^^

      Merci :D
      • Partager sur Facebook
      • Partager sur Twitter
        18 juin 2007 à 16:37:39

        AS ? C'est pas ASP ? Je dis ça mais j'en sais rien j'ai jamais attendu parlé d'AS. Si Association Sportive ! :D

        Je sais le faire en C# je crois bien.
        • Partager sur Facebook
        • Partager sur Twitter
          18 juin 2007 à 17:22:41

          Non c'est action script ;)

          Merci quand meme :p
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            18 juin 2007 à 18:43:52

            Heu, c'est quoi exactement ton problème?
            Pourquoi ne pas tout simplement classer la liste par taille puis prendre les éléments d'indice 0, 1, 2, 3, et 4?
            • Partager sur Facebook
            • Partager sur Twitter
              18 juin 2007 à 19:40:25

              Si c'est ce que je voudrais en fait il me faudrait garder les plus 5 plus grand donc j'aimerais savoir comment tu fais ?
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                18 juin 2007 à 21:10:09

                Citation : daxou31

                Si c'est ce que je voudrais en fait il me faudrait garder les plus 5 plus grand donc j'aimerais savoir comment tu fais ?


                Si AS possède déjà une fonction style sort, t'as rien à faire.
                Sinon, t'implémente un truc, genre quicksort.
                Si y'a des mots qui t'échappent dans ce post, en.wikipedia.org
                • Partager sur Facebook
                • Partager sur Twitter
                  18 juin 2007 à 22:00:00

                  Je comprend bien ce que tu dis mais est ce que ce sont des fonctions ?

                  Dans la doc (donnée par m@téo), je ne les trouve pas :'( , ni quicksort, ni style sort

                  Comment elles marche ????

                  Merci
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    18 juin 2007 à 23:42:36

                    Bon. Va dans le lien dont tu parles. Choisis actionscript. Tape sort dans la case à gauche. Presse enter.

                    C'est clair, là?

                    -_-'

                    J'veux pas paraître méchant, mais faudrait voir pour être un peu débrouille!

                    Aide-toi et le ciel t'aidera ;)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 juin 2007 à 7:06:03

                      Action script possède une fonction sort:

                      monTableau.sort(fonctionDeComparaison);

                      ou monTableau.sortOn(nomDeChamp);

                      Ceci est valable pour flash mx après je sais pas si dans les autres versions il ont consrvé le même nom. :)

                      Cherche de ce côté, je ne les ai jamais utilisées.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        19 juin 2007 à 15:13:23

                        Je vien de regarder mais les exemples qu'ils donnent la sortOn() ne fonctionnent pas pour classer dans un ordre ou dans l'autre.
                        Je cherche encore mais je vais encore tester quelques truc la dessus.

                        Merci ;)

                        PS : Quand j'ai la liste dans l'ordre c'est bon je pense qu'avec liste[0], liste[1] ou liste[joueur.length-1], liste[joueur.length-2]..., j'ai les premiers ou les derniers
                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 juin 2007 à 19:26:32

                          Personne n'a d'idee ???
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            22 juin 2007 à 20:55:34

                            T'as essayé sort?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 juin 2007 à 23:18:32

                              hey !

                              fais des test !!!

                              méthode :
                              -mettre dans un tableau(1) les score
                              -faire un tri du tableau(1)
                              -mettre les résultats du tri du tableau(1) dans un autre tableau(2)
                              -afficher le tableau des résultats tu tri(2).

                              Google + flash + actionscript + array + méthode + classe = bingo !

                              Bon courage
                              • Partager sur Facebook
                              • Partager sur Twitter
                                22 juin 2007 à 23:59:28

                                Citation : Pure

                                -mettre dans un tableau(1) les score
                                -faire un tri du tableau(1)
                                -mettre les résultats du tri du tableau(1) dans un autre tableau(2)
                                -afficher le tableau des résultats tu tri(2)



                                Le probleme la dedans c'est que moi je voudrais :

                                -mettre dans un tableau(1) les score
                                -faire un tri (avec quoi ??) du tableau(1)
                                -mettre les résultats du tri du tableau(1) dans un autre tableau(2)
                                -afficher le tableau des résultats tu tri(2)

                                Car le reste, ca va j'y arrive :-°

                                Merci
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  23 juin 2007 à 0:36:42

                                  la doc daxou, la doc, toutes les méthodes sont dans la doc !!!
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    23 juin 2007 à 0:59:11

                                    La doc de la fonction Sort u sortOn ?

                                    Si c'est ca je l'ai deja fait 20 fois chaque exemple et cela ne fonctionne pas !!!
                                    ca les classe comme ca :
                                    1
                                    16
                                    23
                                    285
                                    29
                                    5
                                    59
                                    6787868654435
                                    68
                                    88
                                    9
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      23 juin 2007 à 1:32:51

                                      tes entrées sont de type string au lieu d'être de type number... il les compare alphabétiquement.

                                      NB : pour le multi-post, je parlais pas du site du zéro uniquement. tu as posté au sujet du xml sur le SdZ et Mediabox... je suis sur les deux, mais lorsque je pose une question c'est sur un des deux, en fonction de ma demande.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        25 juin 2007 à 17:12:09

                                        Que ce soit :

                                        my_array.sortOn("age", Array.NUMERIC);
                                        // my_array[0].age = 3
                                        // my_array[1].age = 4
                                        // my_array[2].age = 29
                                        // my_array[3].age = 35


                                        ou

                                        my_array.sortOn("age", Array.DESCENDING | Array.NUMERIC);
                                        // my_array[0].age = 35
                                        // my_array[1].age = 29
                                        // my_array[2].age = 4
                                        // my_array[3].age = 3


                                        Aucun des deux ne donne le resultat attendu !!
                                        Pourquoi cela ne fonctionne pas avec mon "score.sortOn(Array.DESCENDING | Array.NUMERIC);" ?

                                        Merci

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          25 juin 2007 à 18:22:00

                                          Parce que ton tableau contient toujours des strings au lieu de contenir des int.

                                          Essais de passer par toInt() d'abord. Ensuite, tu tries. Au besoin, tu utiliseras toString() pour repasser ton tableau en string...
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            26 juin 2007 à 1:03:47

                                            ok j'essaie ca demain

                                            merci
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              26 juin 2007 à 1:52:29

                                              Y'a pas des algorithmes de tri?
                                              Le truc par dichotomie par exemple.
                                              Dans l'idée tu compares les cases des tableaux deux à deux et en fonction du résultat tu déplaces les cases ou pas

                                              En gros
                                              case 1 = 15
                                              case 2 = 3

                                              Comparaison par exemple (case 1 < case 2) on obtient = true

                                              Alors case 1 prend la valeur case 2 et case 2 prend la valeur case 1
                                              et ainsi de suite...
                                              Inconvénients : le nombre de passage sur le tableau n'est pas optimal, puisqu'il y a au moins une fois ou on parcours le tableau pour rien (à la fin)

                                              J'ai regardé sur gotAPI j'ai rien trouvé en ce qui concerne la fonction toint()
                                              En meme temps je ne suis pas spécialisé en Action Script ^^
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)

                                                26 juin 2007 à 10:20:27

                                                Si tu veux uniquement les 5 plus grands scores, c'est peut-être un peu bourrin de trier le tableau (avec une complexité qui va croître comme n×ln n)...
                                                Dans la mesure où je ne connais pas du tout ce langage, voici la façon dont je m'y prendrais, en pseudo-code. Je suppose que tu disposes d'une structure de liste ; on accède au premier élément par tête(liste) et à la fin de la liste par queue(liste) ; on ajoute un élément au début de la liste par concat(élément, liste).

                                                fonction insère (élément, liste)
                                                /* liste est une liste triée, avec le plus grand élément à la fin ; le résultat renvoyé est une liste, triée, avec élément inséré à sa place */
                                                fin <- liste
                                                début <- Nil /* la liste vide */
                                                Tant que fin <> Nil et tête(fin) < élément Faire
                                                fin <- queue(fin)
                                                début <- concat(tête(fin), début)
                                                Fin Tant que
                                                fin <- concat(élément, fin)
                                                Tant que début <> Nil Faire
                                                fin <- concat(tête(début), fin)
                                                début <- queue(début)
                                                Fin Tant que
                                                RENVOYER(fin)

                                                /* Version récursive, bien plus simple, mais qui fait peur aux gens paraît-il */
                                                fonction insère (élément, liste)
                                                Si liste = Nil
                                                Alors RENVOYER(concat(élément, Nil))
                                                Sinon
                                                a <- tête(liste)
                                                s <- queue(liste)
                                                Si a < élément Alors RENVOYER(concat(a, insère(élément, s)))
                                                Sinon RENVOYER(concat(élément, liste))

                                                Puis la fonction de sélection des cinq plus grands éléments. Je suppose les tableaux indicés de 1 à Taille(tableau).
                                                fonction sélectionne(tableau)
                                                résultat <- Nil
                                                Pour i = 1 à min(5, Taille(tableau)) Faire
                                                résultat <- insère(tableau.(i), résultat)
                                                Fin Pour
                                                Pour i = 6 à Taille(tableau) Faire
                                                résultat <- insère(tableau.(i), résultat)
                                                résultat <- queue(résultat)
                                                Fin Pour
                                                RENVOYER(résultat)

                                                En voilà, avec une complexité de O(Taille(tableau)). (Si tu veux récupérer les k premiers éléments, tu auras une complexité de O(k×Taille(tableau)).)

                                                Sinon, comme dis plus haut, ça ne règle pas le problème des entiers représentés par des chaînes de caractères (???).
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  26 juin 2007 à 10:37:45

                                                  Sauf qu'en vrai, on se fait beaucoup moins chier à trier et prendre les 5 premiers, et en plus dans un langage de script douteux comme ici, ta fonction insertion sera sans doute ultra lente par rapport à la fonction sort, qui est probablement une routine C (ou tout autre langage un peu sérieux).

                                                  Par ailleurs, il est laid ton pseudo code. Tu fais du Pascal ? :-°
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    26 juin 2007 à 10:54:38

                                                    Pour un tableau suffisamment grand, le tri sera forcément plus lent (asymptotiquement, en O(n ln n)) que ce que j'ai fait (en O(n)). Après, si la fonction de tri intégrée est effectivement optimisée au point que la différence n'est visible que pour des tableaux de plus 10 000 cases, je reconnais que l'intérêt est plutôt limité.
                                                    J'avoue avoir une formation théorique, et que voir une technique en O(n ln n) au lieu de O(n) me fait hérisser le poil.

                                                    Et qu'est-ce qu'il a, mon pseudo-code ? C'est celui auquel je suis habitué (bon, d'accord, il y a l'indentation qui a sauté, mais à part ça, je ne vois pas).
                                                    Je ne fais pas de Pascal, mais du Caml.
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      26 juin 2007 à 11:42:51

                                                      Bah euh, la complexité asymptotique c'est bien gentil, mais si ça veut dire ajouter 20 lignes dans un programme pour un truc qui se fait en 3, avec les bugs potentiels que ça comporte, tout ça pour trouver les 5 plus grands éléments d'un tableau de taille 200 ou 300...
                                                      Sachant que comme je l'ai dit ta fonction sera toujours plus lente que la routine Sort si elle est correctement codée (c'est à dire pas dans le langage de script lui-même), ton changement est pas intéressant en pratique (bien que satisfaisant sur le plan théorique).

                                                      Ton pseudocode semble hériter d'un langage impératif : il n'y a pas de distinction entre la déclaration et l'affectation/modification des valeurs, tu utilises une instruction RENVOYER, etc...
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        26 juin 2007 à 14:10:33

                                                        Je vous remercie mais je vais d'aborsd essayer avec le sort() :p !!

                                                        Je ne crois pas avoir tout compris de l'autre methode en plus.


                                                        Edit : moi non plus j'ai pas trouvé le toInt, meme si le toString existe, De plus le NUMERIC rajouté dans la fonction devrait donner le resultat en numerique ce qui n'est pas le cas. J'ai trouvé ca mais je ne vois pas comment ca marche : "NUMERIC (Array.NUMERIC property)".

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          26 juin 2007 à 14:57:54

                                                          Citation : bluestorm

                                                          Sachant que comme je l'ai dit ta fonction sera toujours plus lente que la routine Sort si elle est correctement codée (c'est à dire pas dans le langage de script lui-même), ton changement est pas intéressant en pratique (bien que satisfaisant sur le plan théorique).


                                                          Oui, c'est vrai, j'ai peut-être tendance à être assez théorique. J'admets que trier le tableau puis extraire les plus grands éléments est plus efficace en pratique.

                                                          Citation : bluestorm

                                                          Ton pseudocode semble hériter d'un langage impératif : il n'y a pas de distinction entre la déclaration et l'affectation/modification des valeurs, tu utilises une instruction RENVOYER, etc...


                                                          J'utilise le pseudo-code qu'on m'a appris à utiliser. J'aurais pu le coder en Caml ou un pseudo-code fonctionnel (surtout la fonction d'insertion, qui aurait été plus naturelle à écrire), mais pour quelqu'un ne connaissant pas Caml, cela aurait été plus difficile à comprendre. C'est le pseudo-code qu'on utilise en maths spé (voir un sujet de 2006, page 4 pour un exemple (PDF, 1.4 Mo)).

                                                          daxou31 :
                                                          Pourtant c'est très simple : tu parcours ton tableau, en gardant dans une liste les cinq plus grands éléments déjà rencontrés. À moi, cela me paraît plus naturel que de trier le tableau puis de lire les cinq derniers éléments. Encore une fois, j'admets que ce qui me paraît naturel ne paraît pas forcément évident aux autres.
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            26 juin 2007 à 17:41:44

                                                            C'est surtout la fonction avec les valeur que je ne comprend pas !
                                                            Le (concat(élément, Nil)) je ne vois pas ce que c'est le Nil ?
                                                            En plus il faut le traduire en AS !! :-°
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              26 juin 2007 à 19:19:18

                                                              Tu as des listes chainées en AS ?
                                                              Nil représente la liste vide, et "concat" (on dit "cons" en général mais osef) représente l'ajout d'un élément à une liste.
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              [AS]Comment classer des nombres puis garder les 5 premiers

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown