IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Retourner le contenu randomisé d'une liste de nombres


Sujet :

Langage Perl

  1. #1
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut Retourner le contenu randomisé d'une liste de nombres
    Hello,

    je cherche parmi les pros du Perl (y en a ici ) qqun qui saurait me dire, par le biais d'un code, comment faire en sorte qu'une liste contenant des nombres soit mélangée aléatoirement.

    Exemple : qu'en partant de (1,2,3,4,5,6,7,8,9,10), j'obtienne (10,7,3,4,5,8,1,9,2,6)

    : : :

    Détail qui a son importance éventuellement : les nombres peuvent se répéter plusieurs fois dans la liste

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    J'ai travaillé sur un bout de code que voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    use strict;
    srand();
     
    my @liste = (1,2,3,4,5,6,7,8,9,10);
     
    @liste = RandomListe(@liste);
    print join(" ",  @liste);
     
     
    sub RandomListe
    {
        my @retour;
     
        while(@_)
        {
            $_ = rand(scalar(@_));
            push(@retour, $_[$_]);
            $_[$_] = 0;
            my @tmp;
            foreach(@_)
            {
                push(@tmp, $_) if ($_);
            }
            @_ = @tmp;
        }
     
        return @retour;
    }
    Y trouvez-vous quelque chose à optimiser ?

  3. #3
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Et ce petit snippet ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #!/usr/bin/perl -w
     
    use strict;
     
    srand();
     
    my @liste;
     
    @liste = BuildList();
    print join(" ",  @liste);
     
    sub BuildList{
            my @array;
            for(0..10){
                    $array[$_] = random();
            }
            return @array;
    }
     
    sub random{
            my @values = (0,1,2,3,4,5,6,7,8,9,10);
            my $val = int(rand(scalar(@values)));
            if($val < 0 || $val>10){
                    random();
            }
            else{
                    return $val;
            }
            return;
    }
    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Arf, j'aurais dû le préciser dans mon post

    Je n'ai pas de 0 dans ma liste, quelle qu'elle soit et la liste ne constitue pas une suite de nombres avec pas de progression de 1

    Je peux avoir fréquemment ce genre d'exemple : (64,64,64,128,128,256,512,512)

    Le but de la manip est que la liste soit mélangée

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Voilà LE post où tu auras les meilleures solutions, et ultra performantes aussi :
    http://www.developpez.net/forums/viewtopic.php?t=433657
    (Tu as dû l'oublier d'ailleurs, parce que tu étais intervenu à l'époque).
    Au final je recommande quand même d'utiliser List::Util::shuffle(), c'est la solution la plus simple (List::Util est dans le Core) avec des performances très correctes.

    --
    Jedaï

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,

    voir aussi http://perl.enstimac.fr/DocFr/perlfaq4.html

    Comment mélanger le contenu d'un tableau ?....le mélangeur de Fisher-Yates

    lami20j
    --
    lami20j

  7. #7
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    C'est exactement l'algorithme utilisé dans mon post... mais de toute façon, le shuffle de List::Util est à privilégier s'il est disponible (puisque codé en C).

    --
    Jedaï

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,
    Citation Envoyé par Jedai
    C'est exactement l'algorithme utilisé dans mon post...
    Je n'ai pas dit le contraire. Seulement un rappel de passer par les Faqs

    Bonne soirée,

    lami20j
    --
    lami20j

  9. #9
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Ce n'était pas un reproche, juste une remarque et bien sûr tu as tout à fait raison à propos des faq, surtout qu'on peut facilement faire des recherches dedans (perldoc -q shuffle, par exemple).

    --
    Jedaï

Discussions similaires

  1. extraction contenu txt dans une liste
    Par nikaulas dans le forum Général Python
    Réponses: 11
    Dernier message: 28/10/2013, 14h42
  2. copier contenu requete dans une liste
    Par bellamouna dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/09/2008, 13h26
  3. Ne pas retourner le 1er enregistrement d'une liste
    Par Yadutaf dans le forum Requêtes
    Réponses: 5
    Dernier message: 12/04/2007, 08h34
  4. Retourner le 1er élément d'une liste box
    Par soso78 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 16/03/2007, 20h46
  5. [c#] Trier une liste de nombres liés.
    Par Joad dans le forum ASP.NET
    Réponses: 13
    Dernier message: 11/05/2005, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo