Combinaison de 3 chiffres sur 20 emplacements ?

fjx Messages postés 22 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 26 mars 2009 - 25 mars 2009 à 02:20
fjx Messages postés 22 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 26 mars 2009 - 26 mars 2009 à 17:37
Bonjour à tous,

Je cherche à produire la liste des combinaisons de trois chiffres sur 20 emplacements différents...
je m'explique :
j'ai les chiffre 1, 2 et 3 que je veux lister sur 20 emplacements possibles,
exemple :
1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

1,2,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

1,2,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

1,2,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0
....

0,0,0,1,0,2,0,0,0,0,0,0,0,0,3,0,0,0,0,0

0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,3

......
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,1


0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,2,1

J'ai beau essayer mais je plante et le pc aussi d'ailleur

Sachant aussi, que çà pourrait servir pour 3, 4 ou 5 chiffres...

Merci pour votre aide,
Pierre.

4 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
25 mars 2009 à 22:47
Salut Fjx,

Peut être avec un truc comme ça :

$nb_chiffre = 3;
$arr = array_fill(1, 20, 0);

for ($i=1; $i <= $nb_chiffre; $i++) {
  $arr[rand(1,20)] = $i;
}

en principe le PC devrait ne pas planter ... et toi non plus (?)

Cordialement,

Kohntark -
0
fjx Messages postés 22 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 26 mars 2009
26 mars 2009 à 01:28
Bonjour Kohntark,

ce n'est pas tout à fait ce que je souhaiterai.

En fait, je souhaiterai obtenir dans un tableau ou autre,
la liste complète de toutes les combinaisons possibles de 1, 2 et 3 sur les 20 places.

Merci pour ton aide,
Cordialement,
Pierre
0
cs_olive73 Messages postés 61 Date d'inscription vendredi 1 octobre 2004 Statut Membre Dernière intervention 1 octobre 2009
26 mars 2009 à 13:24
Salut,

moi je vois le truc comme ça :
Exemple sur 2 emplacements

C1   C0
0       0
0       1
0       2
0       3
1       0
1       1
1       2
1       3
2       0
2       1
2       2
2       3
3       0
3       1
3       2
3       3

Ca te fais 4^2 possibilités.
Donc sur 20 emplacements ça te donne 4^20 soit 1099511627776 possibilités.

Ensuite tu fais 20 tableaux, un par colonne + un tableau élément.

$tab_elemt = array(0, 1, 2, 3);

// Tableau col 0
for ($i=0;$i<=1099511627776;){
    $tab_c0[$i] = $tab_elemt[0];
    $tab_c0[$i+1] = $tab_elemt[1];
    $tab_c0[$i+2] = $tab_elemt[2];
    $tab_c0[$i+3] = $tab_elemt[3];
    $i = $i+4;
}

// Tableau col 1
for ($i=0;$i<=1099511627776;){
    for ($j=0;$j<=4;$j++){
        $tab_c1[$i+$j] = $tab_elemt[0];
    }
    for ($j=4;$j<=8;$j++){
        $tab_c1[$i+$j] = $tab_elemt[1];
    }
    for ($j=8;$j<=12;$j++){
        $tab_c1[$i+$j] = $tab_elemt[2];
    }
    for ($j=12;$j<=16;$j++){
        $tab_c1[$i+$j] = $tab_elemt[3];
    }
    
    $i = $i+bcpow(4, 2);    // Avec 4: nb element et 2: n° de colonne+1
}

// Tableau col 2
for ($i=0;$i<=1099511627776;){
    for ($j=0;$j<=16;$j++){
        $tab_c2[$i+$j] = $tab_elemt[0];
    }
    for ($j=16;$j<=32;$j++){
        $tab_c2[$i+$j] = $tab_elemt[1];
    }
    for ($j=32;$j<=48;$j++){
        $tab_c2[$i+$j] = $tab_elemt[2];
    }
    for ($j=48;$j<=64;$j++){
        $tab_c2[$i+$j] = $tab_elemt[3];
    }
    
    $i = $i+bcpow(4, 3);    
}

Etc... pour les tableaux suivants.
0
fjx Messages postés 22 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 26 mars 2009
26 mars 2009 à 17:37
Bonjour Olive73,
l'idée y est, mais incroyablement lourd.

sinon j'ai peut-être quelques choses dans le genre :

$tab_elemt = '0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0-0';
$combinaison = '';
$io = 20; $yo= 19; $a=1;    $i=0; $o=0;
while($i <= $io){
    $tab_elemt1 = explode ('-', $tab_elemt);
    $tab_elemt1[$i] = 1;
    $tab_elemt1[$o] = 2;
    $tab_elemt1[$a] = 3;
    $tab_elemt2 = implode ('-', $tab_elemt1);
    $test = explode ('-', $tab_elemt2);
    $tot = array_sum($test);
    if ($tot==6){
    $combinaison[] = $tab_elemt2;
    }
$i++;   
    if($i == $yo){$a++; $i=0;}
    if ($a == $yo){$o++; $a=0;}
    if ($o > $yo){$i=23;}
}

$a=1;    $i=0; $o=0;
while($i <= $io){
    $tab_elemt1 = explode ('-', $tab_elemt);
    $tab_elemt1[$i] = 1;
    $tab_elemt1[$o] = 3;
    $tab_elemt1[$a] = 2;
    $tab_elemt2 = implode ('-', $tab_elemt1);
    $test = explode ('-', $tab_elemt2);
    $tot = array_sum($test);
    if ($tot==6){
    $combinaison[] = $tab_elemt2;
    }
$i++;   
    if($i == $yo){$a++; $i=0;}
    if ($a == $yo){$o++; $a=0;}
    if ($o > $yo){$i=23;}
}

$a=1;    $i=0; $o=0;
while($i <= $io){
    $tab_elemt1 = explode ('-', $tab_elemt);
    $tab_elemt1[$i] = 2;
    $tab_elemt1[$o] = 1;
    $tab_elemt1[$a] = 3;
    $tab_elemt2 = implode ('-', $tab_elemt1);
    $test = explode ('-', $tab_elemt2);
    $tot = array_sum($test);
    if ($tot==6){
    $combinaison[] = $tab_elemt2;
    }
$i++;   
    if($i == $yo){$a++; $i=0;}
    if ($a == $yo){$o++; $a=0;}
    if ($o > $yo){$i=23;}
}

$a=1;    $i=0; $o=0;
while($i <= $io){
    $tab_elemt1 = explode ('-', $tab_elemt);
    $tab_elemt1[$i] = 2;
    $tab_elemt1[$o] = 3;
    $tab_elemt1[$a] = 1;
    $tab_elemt2 = implode ('-', $tab_elemt1);
    $test = explode ('-', $tab_elemt2);
    $tot = array_sum($test);
    if ($tot==6){
    $combinaison[] = $tab_elemt2;
    }
$i++;   
    if($i == $yo){$a++; $i=0;}
    if ($a == $yo){$o++; $a=0;}
    if ($o > $yo){$i=23;}
}

$a=1;    $i=0; $o=0;
while($i <= $io){
    $tab_elemt1 = explode ('-', $tab_elemt);
    $tab_elemt1[$i] = 3;
    $tab_elemt1[$o] = 1;
    $tab_elemt1[$a] = 2;
    $tab_elemt2 = implode ('-', $tab_elemt1);
    $test = explode ('-', $tab_elemt2);
    $tot = array_sum($test);
    if ($tot==6){
    $combinaison[] = $tab_elemt2;
    }
$i++;   
    if($i == $yo){$a++; $i=0;}
    if ($a == $yo){$o++; $a=0;}
    if ($o > $yo){$i=23;}
}

$a=1;    $i=0; $o=0;
while($i <= $io){
    $tab_elemt1 = explode ('-', $tab_elemt);
    $tab_elemt1[$i] = 3;
    $tab_elemt1[$o] = 2;
    $tab_elemt1[$a] = 1;
    $tab_elemt2 = implode ('-', $tab_elemt1);
    $test = explode ('-', $tab_elemt2);
    $tot = array_sum($test);
    if ($tot==6){
    $combinaison[] = $tab_elemt2;
    }
$i++;   
    if($i == $yo){$a++; $i=0;}
    if ($a == $yo){$o++; $a=0;}
    if ($o > $yo){$i=23;}
}

$combinaison = array_unique($combinaison);
$nbb = count($combinaison);

echo $nbb;
    echo '';
        print_r($combinaison);
    echo '

';

Celà me donne 6840 combinaisons ...
Quelqu'un peut-il me confirmer ou infirmer?

Merci pour votre aide,
Pierre.
0
Rejoignez-nous