Bonjour,
J'ai le problème suivant.
a) J'ai 4 valeurs numériques (de 1 à 13), que je vais appeler "couleurs", saisies par l'utilisateur dans un formulaire :
Il y a toujours 1 couleur + forte d'au moins 1 que toutes les autres, et 1 plus faible d'au moins 1 que toutes les autres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $carreau; $pique; $coeur; $trefle;
b) J'ai une autre série de valeurs, que je vais appeler "mots" (entre 4 et 20 mots, choix de l'utilisateur), générée aléatoirement, et que j'aimerais associer aux 4 couleurs de telle façon qu'il y ait un ordre de priorité : on associe d'abord les mots aux couleurs les plus fortes, chaque mot associé retire un à la valeur de la couleur, jusqu'à ce que l'on atteigne la valeur suivante.
Le plus simple c'est de donner un exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $carreau=5 $pique=7 $coeur=9 $trefle=4 // et 9 mots à répartir.
- - On commence par attribuer 1 mot à la couleur la plus forte, donc $coeur. On opère alors $coeur-- ($coeur=8)
- - $coeur reste la plus forte, donc on continue en attribuant 1 autre mot à $coeur. $coeur-- ($coeur=7)
- - $coeur reste la plus forte (à égalité, mais on reprend dans l'ordre), donc on attribue un 3e mot à $coeur. $coeur-- ($coeur=6)
- - Cette fois c'est $pique le plus fort, donc on lui attribuer 1 mot. $pique-- ($pique=6)
- - Puisqu'on reprend dans l'ordre, c'est à nouveau $coeur, donc $coeur-- ($coeur=5)
- - Puis même logique pour $pique : $pique-- ($pique=5)
- - De retour à $coeur : $coeur-- ($coeur=4)
- - Puis $pique-- ($pique=4)
- - A ce moment-là c'est $carreau qui devient la plus forte, on lui attribue donc 1 mot ($carreau--, $carreau=4).
Et ainsi de suite, jusqu'à épuisement des mots à répartir (en l'occurrence dans cet exemple ça s'arrêterait ici, $trefle n'aurait donc rien)
Il faut donc qu'à chaque étape on vérifie s'il reste des mots à répartir, sinon on arrête.
A la fin, on doit obtenir la répartition détaillée par couleur, par exemple : carreau : mot1, mot2, mot3 / pique : mot4 mot5 / pique : mot6.
J'espère que je suis clair
Et j'avoue que je suis complètement perdu sur la logique même avec laquelle procéder...
Merci par avance pour votre aide !
PS : voilà l'état de ma réflexion :
- Commencer par trier les couleurs :
- Créer une boucle qui va récupérer les valeurs des $mots dans la BDD ($req vient chercher le nombre de mots choisis par l'utilisateur) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $couleur=array($carreau,$pique,$coeur,$trefle); arsort($couleur);
Mais pour la suite...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 while ($data = mysqli_fetch_array($req)) { echo $data['mot']; }
Partager