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 :

Liste de combinaisons possibles


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Liste de combinaisons possibles
    Bonjour à tous,

    Je fréquente ce forum depuis bien longtemps et y ai appris beaucoup de choses, merci à la communauté.
    Mais je suis aujourd'hui confronté à un problème dont je n'ai pas trouvé encore la réponse (peut-être ai-je fait les mauvaises recherches ?), en tout cas, j'espère que quelqu'un pourra m'aider

    Voila,
    J'aimerai dans le cadre de la création d'un projet personnel, créer une fonction permettant de lister toutes les combinaisons à partir des nombres allant de 1 à 16.
    Jusque là, c'est plutôt simple, mais ça va un peu plus loin :
    - La combinaison doit être au minimum de 3 nombres;
    - La combinaison doit être au maximum de 16 nombres;
    - On ne peut pas avoir deux fois le même nombre.

    Pour corser un peu plus la chose, j'ai un schéma à respecter : celui d'un tableau 4x4 comme celui-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1  2  3  4
    5  6  7  8
    9  10 11 12
    13 14 15 16
    J'ai établi la règle suivante pour les combinaisons possibles :
    1: 2,5,6
    2: 1,3,5,6,7
    3: 2,4,6,7,8
    4: 3,7,8
    5: 1,2,6,9,10
    6: 1,2,3,5,7,9,10,11
    7: 2,3,4,6,8,10,11,12
    8: 3,4,7,11,12
    9: 5,6,10,13,14
    10: 5,6,7,9,11,13,14,15
    11: 6,7,8,10,12,14,15,16
    12: 7,8,11,15,16
    13: 9,10,14
    14: 9,10,11,13,15
    15: 10,11,12,14,16
    16: 11,12,15
    Je m'explique :
    à partir de la case 1, je peut aller à la case 2, 5 ou 6;
    à partir de la case 2, je peut aller à la case 1,3,5,6 ou 7;
    Etc...

    J'ai également calculé qu'il y avait 1344 combinaisons possibles avec les règles établies (j'ai un GROS doute, donc merci de me le confirmer si possible).

    En clair, ce que j'aimerai c'est une fonction qui me sortira au pire la liste des combinaisons possibles, au mieux une fonction qui me sortira les combinaisons possibles à partir de la case que j'aurai choisie.

    J'espère que je ne vous en demande pas trop et que cela est réalisable. Je ne sais pas s'il existe déjà une fonction pour cela, j'ai cherché sans vraiment trouver ce que je cherchai.

    J'aimerai quelques pistes et des explications.

    Je vous ai fourni toutes les données nécessaires, en sachant que je ne sais pas si le PHP est le mieux adapté pour ce que je voudrait faire.

    J'attends avec impatience une réponse
    D'avance, merci !

  2. #2
    Membre Expert
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Par défaut
    Bonsoir,

    Tu peux essayer ceci :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <?php
    /**
     * Génération d'une matrice carrée
     * @param $size Taille de la matrice
     * @return Tableau à 2 dimensions représentant la matrice
     */
    function get_matrix($size) {
    	$matrix = array();
    	$row = array();
     
    	for ($i = 1; $i <= $size * $size; $i++) {
    		$row[] = $i;
     
    		if ( $i % $size == 0 ) {
    			$matrix[] = $row;
    			$row = array();
    		}
    	}
     
    	return $matrix;
    }
     
    /**
     * Tableau des voisins d'un nombre dans une matrice
     * @param $matrix Matrice (tableau à 2 dimensions)
     * @param $size Taille de la matrice carrée
     * @param $i Nombre à prendre en compte
     * @return Tableau de voisin du nombre dans la matrice
     */
    function get_neighbors($matrix, $size, $i) {
    	// Coordonnées du nombre dans la matrice
    	$row = ceil($i / $size) - 1;
    	$column = ( $i - 1 ) % $size;
     
    	// Initialisation du tableau des voisins
    	$neighbors = array();
     
    	// Ajoute les éléments de la ligne du dessus
    	if ( isset($matrix[$row - 1]) ) {
    		$top = $matrix[$row - 1];
     
    		if ( isset($top[$column - 1]) ) $neighbors[] = $top[$column - 1];
    		if ( isset($top[$column]) )     $neighbors[] = $top[$column];
    		if ( isset($top[$column + 1]) ) $neighbors[] = $top[$column + 1];
    	}
     
    	// Ajoute les éléments de la ligne centrale
    	$middle = $matrix[$row];
    	if ( isset($middle[$column - 1]) ) $neighbors[] = $middle[$column - 1];
    	if ( isset($middle[$column + 1]) ) $neighbors[] = $middle[$column + 1];
     
    	// Ajoute les éléments de la ligne du dessous
    	if ( isset($matrix[$row + 1]) ) {
    		$bottom = $matrix[$row + 1];
     
    		if ( isset($bottom[$column - 1]) ) $neighbors[] = $bottom[$column - 1];
    		if ( isset($bottom[$column]) )     $neighbors[] = $bottom[$column];
    		if ( isset($bottom[$column + 1]) ) $neighbors[] = $bottom[$column + 1];
    	}
     
     
    	return $neighbors;
    }
     
    $size = 4; // Taille de la matrice
    $matrix = get_matrix($size);
    for ($i = 1; $i <= $size * $size; $i++) {
    	$neighbors = get_neighbors($matrix, $size, $i);
     
    	echo '<p>';
    	echo $i;
    	echo ' : ';
    	echo implode(', ', $neighbors);
    	echo '</p>';
    }
    ?>
    Il doit être possible d'optimiser

Discussions similaires

  1. Toutes les combinaisons possibles de deux listes
    Par vasilpapa dans le forum Haskell
    Réponses: 2
    Dernier message: 11/04/2014, 06h17
  2. liste de combinaison possible d'un tableau
    Par marco10024 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 07/08/2008, 17h18
  3. [Interface Homme Machine] Liste des interactions possibles
    Par dymezac dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 27/01/2006, 11h45
  4. Imposer la largeur d'une zone de liste ? est ce possible
    Par ahage4x4 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 23/05/2005, 16h21
  5. Obtenir la liste des valeurs possibles d'un type
    Par pascalT dans le forum Langage
    Réponses: 5
    Dernier message: 05/10/2004, 15h46

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