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 :

Distribution valeur trié.


Sujet :

Langage PHP

  1. #21
    Membre régulier Avatar de Shandler
    Profil pro
    Inscrit en
    Février 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 514
    Points : 107
    Points
    107
    Par défaut
    Tout d'abord @CosmoKnack, oui ils ont identique car il y a 2 binome en commun.

    Sinon @jreaux62 j'ai regardé et fait plusieurs test avec ton code est ça marche nickel, j'étais vraiment pas parti sur la bonne logique.

    Merci a toi et merci a tous le monde pour votre aide.

  2. #22
    Invité
    Invité(e)
    Par défaut
    Puisque je me suis fait ch.... des ch...eveux pendant 2 jours sur cette problématique, autant aller jusqu'au bout...

    Au cas où ça intéresse quelqu'un, j'ai aussi fait un script en séparant hommes/femmes (dans 2 array séparés) :

    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
    38
    39
    40
    41
    <?php
    // ------------
    $arr_Men = ["Raoul","Pierre","Paul","Jérome"];
    $arr_Women = ["Julie","Magalie","Sophie"]; // 1-(on a MOINS de femmes que d'hommes)
    //$arr_Women = ["Julie","Magalie","Sophie","Anne"]; // 2-(on a AUTANT de femmes que d'hommes)
    //$arr_Women = ["Julie","Magalie","Sophie","Anne","Gaelle","Lise"]; // 3-(on a PLUS de femmes que d'hommes)
    // ------------
    function get_unique_couple_men_women( $arr_Men=[], $arr_Women=[] )
    {
    //	echo '$arr_Men :'; var_dump( $arr_Men );
    //	echo '$arr_Women :'; var_dump( $arr_Women );
    	// --------
    	$count_Men = count( $arr_Men );
    	$count_Women = count( $arr_Women );
    	$count = max( $count_Men, $count_Women );
    //	echo '$count : '.$count.'<br/>';
    	// --------
    	if( $count_Women <= $count_Men ){ // 1-2-(on a AUTANT ou MOINS de femmes que d'hommes)
    		$arr_1 = $arr_Women; 
    		$arr_2 = $arr_Men; 
    	} else { // 3-(on a PLUS de femmes que d'hommes)
    		$arr_1 = $arr_Men; 
    		$arr_2 = $arr_Women; 
    	}
    	// --------
    	$data = [];
    	for( $idx=0; $idx<$count; $idx++ )
    	{
    		foreach( $arr_2 as $idx2 => $name2 )
    		{
    			$data[($idx+$count-1)%$count][$name2] = ( isset($arr_1[($idx+$idx2)%$count]) )? $arr_1[($idx+$idx2)%$count] : '-';
    		}
    	}
    	// --------
    	return $data;
    }
    // ------------
    $unique_couple = get_unique_couple_men_women( $arr_Men, $arr_Women );
    echo '$unique_couple :'; var_dump( $unique_couple );
    // ------------
    ?>
    On obtient :
    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
      3 => 
        array (size=4)
          'Raoul' => string 'Julie' (length=5)
          'Pierre' => string 'Magalie' (length=7)
          'Paul' => string 'Sophie' (length=6)
          'Jérome' => string '-' (length=1)
      0 => 
        array (size=4)
          'Raoul' => string 'Magalie' (length=7)
          'Pierre' => string 'Sophie' (length=6)
          'Paul' => string '-' (length=1)
          'Jérome' => string 'Julie' (length=5)
      1 => 
        array (size=4)
          'Raoul' => string 'Sophie' (length=6)
          'Pierre' => string '-' (length=1)
          'Paul' => string 'Julie' (length=5)
          'Jérome' => string 'Magalie' (length=7)
      2 => 
        array (size=4)
          'Raoul' => string '-' (length=1)
          'Pierre' => string 'Julie' (length=5)
          'Paul' => string 'Magalie' (length=7)
          'Jérome' => string 'Sophie' (length=6)
    On peut facilement imaginer ici les tours d'un "speed-dating" (mixte) ...ou un forum "étudiants-entreprises" () !
    Évidemment, s'il y a plus de participants d'un sexe ou de l'autre, certains se retrouvent "sur le carreau" durant le tour (...ou au bar... )
    Dernière modification par Invité ; 16/10/2019 à 18h45.

  3. #23
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut,

    pour ce qui des combinaisons, il est bien plus aisé de passer par le binaire (quand je vois le mal de tête qu'a dû se faire jreaux62), j'ai mal pour lui.
    Je vais vous mettre sur la piste :
    quand vous devez par exemple combiner 4 éléments parmi 8, il faut se représenter les 8 emplacements disponibles comme des cases pouvant prendre les valeurs 0 ou 1.
    0 1 2 3 4 5 6 7 8
    -----------------
    1 1 1 1 0 0 0 0 0
    1 1 1 0 1 0 0 0 0
    1 1 1 0 0 1 0 0 0
    1 1 1 0 0 0 1 0 0
    1 1 1 0 0 0 0 1 0
    1 1 1 0 0 0 0 0 1
    ça ne vous fait pas furieusement penser au binaire tout ça ?
    C'est autrement plus facile de se le représenter ainsi que d'aller tripatouiller des boucles et des boucles.
    N'oubliez pas une chose : le binaire c'est le sang de l'ordinateur, donc il doit quand même bien pouvoir s'en sortir

  4. #24
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Le plus gros souci c'est pas le binaire, c'est de comprendre ce qui est demandé. Et au final tout ce qu'il y a à faire c'est une permutation circulaire!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $arr = ['Raoul', 'Pierre', 'Julie', 'Paul', 'Magalie'];
     
    $double = array_merge($arr, $arr);
     
    for ($i=1, $length = count($arr); $i < $length; $i++) {
         print_r(array_combine($arr, array_slice($double, $i, $length)));   
    }
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #25
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    ...c'est de comprendre ce qui est demandé...
    Tu m'étonnes.......
    Au départ, j'ai cru que les données étaient effectivement "triées", avec "un ordre de préférence".
    Et que le nombre d'"affinités pouvait varier.
    Ce qui, finalement, n'est pas le cas.

    D'où GROSSE prise de tête...

    ...permutation circulaire ...
    C'est l'expression que je cherchais !!
    Dernière modification par Invité ; 16/10/2019 à 21h12.

  6. #26
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Le principal c'est d'y être arrivé! Venimus, vidimus, vicimus!
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #27
    Invité
    Invité(e)
    Par défaut
    Bon...
    Comme j'ai de la suite dans les idées...

    Imaginons une "réunion littéraire" ou "tournoi d'échecs" (sans élimination), ou CHAQUE participants va rencontrer CHACUN des autres.
    Genre "speed dating", mais sans distinction de genre, et tout le monde rencontre tout le monde.

    • En cas de nombre IMPAIR de participants, à chaque tour, l'un d'eux se retrouvera seul, ou en tête-à-tête avec l'organisateur/trice.
    • En cas de nombre PAIR de participants, TOUS auront un interlocuteur.
    • A la fin, CHACUN aura rencontré TOUS les autres.

    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
    38
    39
    40
    41
    <?php
    // ------------
    $arr_All = ["Raoul","Pierre","Paul","Julie","Magalie","Sophie"];	// nombre PAIR de participants
    //$arr_All = ["Raoul","Pierre","Paul","Julie","Magalie"];		// nombre IMPAIR de participants
    // ------------
    function get_unique_couple_mixte( $arr_All=[] )
    {
    	echo '$arr_All :'; var_dump( $arr_All );
    	// --------
    	$count = count( $arr_All );
    	$half = ceil( $count/2 ); // on prend ici la moitié
    	echo '$count : '.$count.'<br/>';
    	// --------
    	$data = [];
    	$temp = [];
    	for( $idx=0; $idx<$count; $idx++ )
    	{
    		for( $idx2=0; $idx2<$half; $idx2++ )
    		{
    			$i = ($idx)%$count;
    			$name1 = $arr_All[($idx+$idx2)%$count];
    			$name2 = $arr_All[($idx+$idx2+$half)%$count];
    			if( !isset($temp[$i]) ){ $temp[$i] = []; }
    			if( !in_array($name2, $temp[$i]) )
    			{
    				$temp[$i][] = $name1;
    				$data[$i][$name1] = $name2;
    			} else {
    				$data[$i][$name1] = '-';
    			}
    		}
    	}
    	// --------
    	unset( $temp );
    	return $data;
    }
    // ------------
    $unique_couple = get_unique_couple_mixte( $arr_All );
    echo '$unique_couple :'; var_dump( $unique_couple );
    // ------------
    ?>
    On obtient :
    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
    array (size=5)
      0 => 
        array (size=3)
          'Raoul' => string 'Julie' (length=5)
          'Pierre' => string 'Magalie' (length=7)
          'Paul' => string '-' (length=1)
      1 => 
        array (size=3)
          'Pierre' => string 'Magalie' (length=7)
          'Paul' => string 'Raoul' (length=5)
          'Julie' => string '-' (length=1)
      2 => 
        array (size=3)
          'Paul' => string 'Raoul' (length=5)
          'Julie' => string 'Pierre' (length=6)
          'Magalie' => string '-' (length=1)
      3 => 
        array (size=3)
          'Julie' => string 'Pierre' (length=6)
          'Magalie' => string 'Paul' (length=4)
          'Raoul' => string '-' (length=1)
      4 => 
        array (size=3)
          'Magalie' => string 'Paul' (length=4)
          'Raoul' => string 'Julie' (length=5)
          'Pierre' => string '-' (length=1)
    Dernière modification par Invité ; 17/10/2019 à 10h59.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Tri des valeurs dans un DBGrid
    Par soviet dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/06/2015, 14h18
  2. Algorithme spécial pour distribuer valeurs triées
    Par Vulvulune dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 02/03/2008, 23h50
  3. Tri par valeur d un hash de hash
    Par LeLaulau dans le forum Langage
    Réponses: 4
    Dernier message: 28/09/2005, 10h33
  4. Tri par la moyenne des valeurs de champs ?
    Par rozwel dans le forum Requêtes
    Réponses: 8
    Dernier message: 28/01/2005, 18h35
  5. [langage] Tri de valeurs dans un hash
    Par Arioch dans le forum Langage
    Réponses: 2
    Dernier message: 15/11/2004, 11h35

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