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 PHP Discussion :

[Tableaux] Combinaisons possibles 0 1


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Par défaut [Tableaux] Combinaisons possibles 0 1
    Bonsoir,
    Je créer une fonction qui afficherait toute les solution possibles d'une chaine qui se remplirait de 0 et de 1.

    Exemple avec une chaine de 2 caractères de longueur

    00
    01
    10
    11
    Autre Exemple avec une chaine de 5 caractères de longueur
    00000
    00001
    00011
    00111
    01111
    11111
    10000
    11000
    11100
    11110
    10001
    11001
    11101
    10011
    10111
    10101
    11011

    j'ai fait pas mal de recherche sur le net ( et sur ce forum ) j'ai pu trouver quelques trucs qui marchent partiellement ou qui s'approche de la solution :

    http://www.developpez.net/forums/sho...d.php?t=210962

    Mais je n'ai jamais vraiment pu l'adapter, à chaque fois il manque des possibilités.

    Merci d'avance pour vos conseil.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 348
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 348
    Billets dans le blog
    17
    Par défaut
    <blague>
    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
    32
    33
    <?php
        function array_rand_pick($array, $x)
        {
            $n = count($array) ;
            $set = array( ) ;
            for ( $i = 0 ; $i < $x ; $i++ ) {
                $set[ ] = $array[mt_rand(0, $n - 1)] ;
            }
            return $set ;
        }
     
        set_time_limit(5) ;
        header('Content-Type: text/plain') ;
     
        $tokens = array('0', '1') ;
        $length = 5 ;
        $possibilities = pow(count($tokens), $length) ;
     
        $result = array( ) ;
        $found = 0 ;
     
        while ( $found < $possibilities ) {
            $s = implode('', array_rand_pick($tokens, $length)) ;
            if ( ! in_array($s, $result) ) {
                $result[ ] = $s ;
                $found++ ;
            }
        }
     
        echo $possibilities, " résultats\r\n\r\n" ;
        sort($result) ;
        print_r($result) ;
    ?>
    Donne :

    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
    32
    33
    34
    35
    36
    37
    32 résultats
     
    Array
    (
        [0] => 00000
        [1] => 00001
        [2] => 00010
        [3] => 00011
        [4] => 00100
        [5] => 00101
        [6] => 00110
        [7] => 00111
        [8] => 01000
        [9] => 01001
        [10] => 01010
        [11] => 01011
        [12] => 01100
        [13] => 01101
        [14] => 01110
        [15] => 01111
        [16] => 10000
        [17] => 10001
        [18] => 10010
        [19] => 10011
        [20] => 10100
        [21] => 10101
        [22] => 10110
        [23] => 10111
        [24] => 11000
        [25] => 11001
        [26] => 11010
        [27] => 11011
        [28] => 11100
        [29] => 11101
        [30] => 11110
        [31] => 11111
    )
    </blague>

    Joue avec $tokens et $length (pas trop hein), je pense qu'au vu du résultat trié tu pourras facilement déduire un algo

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 14
    Par défaut
    Merci beaucoup, c'est simple et ça fonctionne bien.

    Par contre en effet faut pas trop monter par ce que ça fait vite beaucoup de résultats.

    Ça vient du principe qui est un peut bourrin, comme on tire un chiffre aléatoire et ensuite on vas voir si on l'a déjà jusqu'à ce qu'on ai toutes les solution ça oblige à stocker l'array en cache ce qui demande pas mal de ressources quand le nombre monte.

    Je voudrais tenter d'atteindre 16 et avec ca c'est pas évident.
    Peut être le faire petit à petit avec une base de donnée qui enregistrerait et permettrait de reprendre le calcul.

    Si vous avez mieux je suis preneur.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 36
    Par défaut
    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
     
    <?php
     
    function combinaisons($longueur){
    	$limite = pow( 2, $longueur );
    	$valeurs = array();
    	for( $i=0; $i<$limite; $i++ ){
    		$valeurs[] = str_pad( base_convert( $i, 10, 2 ), $longueur, '0', STR_PAD_LEFT );
    	}
    	return $valeurs;
    }
     
    $valeurs = combinaisons(5);
    foreach( $valeurs as $v ){
    	print $v.'<br />';
    }
     
    ?>

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 348
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 348
    Billets dans le blog
    17
    Par défaut
    Pas mal l'idée du base_convert( )
    Je me permets de la généraliser :

    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
    <?php
        set_time_limit(5) ;
        header('Content-Type: text/plain') ;
     
        $tokens = array('[pomme]', '[fraise]', '[banane]') ;
        $length = 2 ;
     
        $base = count($tokens) ;
        $possibilities = pow($base, $length) ;
     
        $result = array( ) ;
     
        for ( $i = 0 ; $i < $possibilities ; $i++ ) {
            $mask = str_pad(base_convert($i, 10, $base), $length, '0', STR_PAD_LEFT) ;
            $buffer = '' ;
            for ( $j = 0 ; $j < $length ; $j++ ) {
                $buffer .= $tokens[(int)$mask[$j]] ;
            }
            $result[ ] = $buffer ;
        }
     
        echo $possibilities, " résultats\r\n\r\n" ;
        print_r($result) ;
    ?>
    Donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    9 résultats
     
    Array
    (
        [0] => [pomme][pomme]
        [1] => [pomme][fraise]
        [2] => [pomme][banane]
        [3] => [fraise][pomme]
        [4] => [fraise][fraise]
        [5] => [fraise][banane]
        [6] => [banane][pomme]
        [7] => [banane][fraise]
        [8] => [banane][banane]
    )

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 36
    Par défaut
    Sympa

Discussions similaires

  1. Stocker dans un tableau toutes les combinaisons possibles entre plusieurs tableaux.
    Par gui-yem dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 19/03/2014, 15h22
  2. Trouver toutes les combinaisons possibles de plusieurs tableaux
    Par divayht dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 23/08/2010, 20h56
  3. Parcourir des tableaux, toutes combinaisons possibles ?
    Par seb92500 dans le forum Langage
    Réponses: 9
    Dernier message: 20/11/2008, 17h11
  4. toutes les combinaisons possibles
    Par marocleverness dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 29/05/2006, 00h11
  5. Sortir d'un tableau les combinaisons possibles
    Par juelo dans le forum Algorithmes et structures de données
    Réponses: 33
    Dernier message: 26/03/2006, 17h11

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