Bonjour,
Voila je rencontre un petit problème avec mon code, du moins j'ai du mal à savoir comment m'y prendre je vous explique le principe de ce que je souhaiterais obtenir :
j'ai un tableau nommé
$combiPossibleD=array();
qui contient toute les combinaisons de binôme possible généré depuis une liste de chiffre il stock sous la forme :
$combiPossibleD[0]=
Array
(
[0] => numero joueur1
[1] => numero joueur2
)
etc...
maintenant j'aimerais générer un nombre x d'équipe que je stockerais dans un autre tableau nommé :
$equipeDoublePrise=array();
qui stockera de la même façon que celui d'avant , mais j'aimerais qu'il n'y ai pas deux fois le même joueur dans l'ensemble des équipes,
j'ai testé ceci :
while(count($equipeDoublePrise)!=x)
{
foreach($equipeDoublePrise as $equipe)
{
if($equipe!=$combiPossibleD[$alea]&&$equipe!=array_reverse($combiPossibleD[$alea]))
{
array_push($equipeDoublePrise,$combiPossibleD[$alea]);
break;
}
}
}
je ne sais pas si ma condition est bonne mais il m'insère quand même une autre équipe avec le même joueur, en espérant un peu d'aide, je vous remercie par avance.
je test aussi avec array_inverse() dans le if, car l'equipe [1,2] et l'équipe [3,1] possède un joueur en commun qui est le 1 et ca je ne veux pas,l'ensemble des joueurs de toute les équipes doient tous être différents , je ne sais pas si je suis assez claire ...
j'avais pensé à tester les 4 joueurs entre eux du genre (en pseudo code ) avec les deux equipe :[j1,j2] et [j3,j4]
SI j1!=j3 et j1!=j4 et j2!=j3 et j2!=j4
ALORS j'insère
mais malgré ca il insère quand même deux groupes avec un joueur en commun
bonjour, c'est juste que ce n'est pas très clair...
de tous tes joueurs tu veux faire des équipes aléatoires, tu veux creer un championnat pour tes équipes?
coucou, le principe c'est ca voila j'ai x participants que je reparti en equipe de 2 joueurs et si le nombre d'équipe est impair je créer des équipes de 3 joueurs pour que tout les joueurs puisse jouer, pour faire ca j'ai fait un algo qui génère toute les combinaisons de deux joueurs et deux trois joueurs possible en evitant les doublons du genre [1,2] et [2,1] maintenant je voudrais générer les rencontres une équipe contre une autre en prenant en compte que tout les joueurs jouent 1 partie donc l'emsemble de toute les équipes on tous un joueurs différent , je sais pas si je suis claire ...
oui car chaque joueur fait 4 parties et ne doit pas être deux fois avec le même joueur, j'ai généré les combi possible pour me facilité la création dérière mais je vois pas comment
tiens voici un liens ou tu peux modifier etc en directe etc...http://syframework.alwaysdata.net/5u4 ca te permettra de voir je suis bloqué dans la fonction "genererUnTirage"
Pourquoi tu génères toutes les combinaisons possibles ?
tu ne peux pas directement générer des équipes en aléatoire?
Après tu vérifies que ton tirage est valide (personne n'a joué avec qqn déjà joué)
Sinon a chaque fois que tu as choisis une équipe, il faut boucler dans toutes les possibilités pour retirer celles qui ne sont plus bonnes.
ce n'est pas bête, je ne sais pas je pensais qu'en générant tout ca m'aiderais derrière ....
et j'avais fait ca car il y a une condition qu'il faut pas que deux femmes soient dans la même équipe dans le liens que je t'ai passé il y a un tableau de participant au début, chaque participant est sous la forme numéro du joueur + une lettre pour le sexe
Ca peut faire partie des vérifications d'équipes correctes
http://syframework.alwaysdata.net/5u5
car comme je te l'ai dit il y a une condition qui est : il ne faut pas que deux femmes soient dans la même équipe si je génère aléatoirement les équipes et que j'ai des equipes de deux et de 3 dans un tirages je peux me retrouver avec deux femmes dans un groupe de trois du coup en générant les combinaisons j'évitais justement ca ,
dsl je me suis mal exprimé ce que je veux dire c'est que j'ai compris ta manière de procédé mais comment répété cela x fois en prenant en compte le fait que chaque équipe doit être différente ?
Pour moi le système de combinaison ne sert à rien.
http://syframework.alwaysdata.net/5u7
Plus tu le lances plus ca implémente la variable $oldtirages et moins tu as de possibilités après.
d'accord je dois simplement le faire 4 fois , si ca ne fonctionne pas jusqu'à 4 je vais devoir réfléchir à un autre système
Ca devrait fonctionner, apres il sera peut-etre necessaire d'augmenter le 10 en ligne 123 pour diminuer le droit à l'erreur.
Mais ca evite que ca tourne à l'infini si il n'y a plus de réponses possibles.
Content d'avoir aidé,
d'accord je te remercie beaucoup je commencais à me casser la tête et ca faisais un bon moment je n'avais pas fait des lignes de code et de l'algorythmie , et c'est toujours aussi sympathique !
désolé d'abuser de ta gentillesse mais je suis bloqué au niveau de la conversion en js
voici l'état ou j'en suis actuellement :
//VARIABLE POUR LE TESTE CES VARIABLE VIENDRONT DE LA BASE DE DONNEE PLUS TARD !!
var participant = ["1h","2f","3f","4f","5h","6h","7h","8f","9h","10h","11h","12f","13h","14h",'15h','16f','17h','18h','19f'];
//VARIABLE POUR COMPTER LE NOMBRE DE PARTICIPANT
var nb_participant=participant.length;
//VARIABLE POUR STOCKER LE NOMBRE DE DOUBLETTES
var nb_doublette;
//VARIABLE POUR STOCKER LE NOMBRE DE TRIPLETTES
var nb_triplette;
//VARIABLE POUR STOCKER LE NOMBRE DE PARTIE A CREER
var nb_partie;
var oldtirages = [];
//FONCTION POUR DETERMINER LE NOMBRE DE DOUBLETTE ET DE TRIPLETTE
function determination()
{
reste = nb_participant%2;
nb_doublette=((nb_participant-reste)/2)-reste;
nb_triplette = reste;
if((nb_triplette+nb_doublette)%2!=0)
{
nb_triplette+=2;
nb_doublette-=3;
}
nb_partie=(nb_doublette+nb_triplette)/2;
}
function lanceur()
{
determination();
tirage1 = nouveauTirage();
console.log($tirage1);
tirage2 = nouveauTirage();
console.log($tirage2);
//-- exemple mauvais tirage
//print_r(nouveauTirageInccorect());
affichage();
}
function affichage()
{
console.log("Nombre de participant :"+nb_participant);
console.log("composition d'équipe (en favorisant les doublettes) :");
console.log("nombre d'équipe double : "+nb_doublette);
console.log("nombre d'équipe triple :"+nb_triplette);
console.log("nombre de partie à jouer à chaque tirage : "+nb_partie);
}
function nouveauTirage()
{
bon_tirage = false;
nbmax_mauvais = 0;
while(bon_tirage === false || nbmax_mauvais < 10)
{
tirage = genererUnTirage();
bon_tirage = is_a_good_tirage(tirage);
nbmax_mauvais++;
}
save_tirage(tirage);
return tirage;
}
function nouveauTirageInccorect()
{
bon_tirage = true;
nbmax_mauvais = 0;
while(bon_tirage === true || nbmax_mauvais < 10)
{
tirage = genererUnTirage();
bon_tirage = is_a_good_tirage(tirage);
nbmax_mauvais++;
}
return tirage;
}
function shuffle(a)
{
var j = 0;
var valI = '';
var valJ = valI;
var l = a.length - 1;
while(l > -1)
{
j = Math.floor(Math.random() * l);
valI = a[l];
valJ = a[j];
a[l] = valJ;
a[j] = valI;
l = l - 1;
}
return a;
}
function genererUnTirage()
{
part = participant;
part = shuffle(part);
tirage = [];
for(var i = 0;i<nb_doublette; i++)
{
tirage.push(new Array(part[i*2],part[i*2+1]));
}
for(var i = 0;i<nb_triplette; i++)
{
tirage.push(new Array(part[nb_doublette*2+i*3],part[nb_doublette*2+i*3+1],part[nb_doublette*2+i*3+2]));
}
return tirage;
}
String.prototype.replaceAll = function(search, replacement) {
var target = this;
return target.split(search).join(replacement);
};
function isset(str) {
return window[str] !== undefined;
}
function is_a_good_tirage(tirage)
{
tirage.forEach(function(t)
{
for(i = 0; i< t.length;i++)
{
for(j = i+1; j<t.length;j++)
{
//-- vérif si 2 femmes
if(t[i].substr(-1) == 'f' & t[j].substr(-1) == 'f')
{
return false;
}
//-- vérif si déjà joué ensemble
if(isset(oldtirages[t[i]][t[j]]))
{
return false;
}
//-- vérif l'age du curé
if(false)
{
return false;
}
}
}
});
return true;
}
function save_tirage(tirage)
{
tirage.forEach(function(t)
{
for(var i = 0; i< t.length;i++)
{
for(var j = i+1; j< t.length;j++)
{
oldtirages[t[i]][t[j]] = 1;
oldtirages[t[j]][t[i]] = 1;
}
}
});
}
lanceur();
j'ai une erreur à la ligne 139 me disant "Uncaught TypeError: Cannot read property '5h' of undefined" , pourtant le isset php correspond simplement au if avec ce que l'on veut tester non ?
Oula du js... Euh joker?
Comme il y a un tableau a deux dimension, il faut pas tester dabbord la premiere puis la deuxieme?
If (oldtirages[t[i]] and oldtirages[t[i]][t[j]])
coucou, tout d'abord merci de m'accorder du temps pour ca , la ligne 139 correspond au test dans le if :"if(isset(oldtirages[t[i]][t[j]]))"
A la place de
if(isset(oldtirages[t[i]][t[j]]))
tu met
try{
var xx = oldtirages[t[i]][t[j]];
}catch(e){
// ici ton tableau est not isset
console.log('error -> '+e)
}
@plus
Pierre
j'ai beaucoup de message de ce genre qui apparait dans la console "error -> TypeError: Cannot read property '5h' of undefined"
bien à toi Julien.
Je pense avoir une idée du pourquoi je vais regarder ça en rentrant je vous tiens au jus !
bon et bien je ne sais pas les erreurs viennent à chaque fois que "oldtirages[t[i]][t[j]];" est employé...
il devrait exister pourtant parceque il ce trouve dans deux for imbriqué avec la même condition de bouclage...
Tu as fais ce que je t'ai dit ?
If (oldtirages[t[i]] and oldtirages[t[i]][t[j]])
ou plutot
If (oldtirages[t[i]] && oldtirages[t[i]][t[j]])
tu verras que l'erreur change de ligne,
après il faut remplacer dans save_tirage :
oldtirages[t[i]][t[j]] = 1;
oldtirages[t[j]][t[i]] = 1;
par
if(oldtirages[t[i]] == undefined)
{
oldtirages[t[i]] = [];
}
if(oldtirages[t[j]] == undefined)
{
oldtirages[t[j]] = [];
}
oldtirages[t[i]][t[j]] = 1;
oldtirages[t[j]][t[i]] = 1;
coucou j'ai bien modifié mais il y a un souci je me retrouve quand même avec deux femmes dans une équipe certaine fois malgré le teste :
if(t[i].substr(-1) == 'f' & t[j].substr(-1) == 'f')
{
return false;
}
change
while(bon_tirage === false || nbmax_mauvais < 10)
en
while(bon_tirage === false && nbmax_mauvais < 1000)
ou plus de 1000 si tu ne veux vraiment pas d'équipe incorrect mais apres ca risque d'etre long
et
function is_a_good_tirage(tirage)
{
tirage.forEach(function(t)
{
for(i = 0; i< t.length;i++)
{
for(j = i+1; j<t.length;j++)
{
//-- vérif si 2 femmes
if(t[i].substr(-1) == 'f' & t[j].substr(-1) == 'f')
{
return false;
}
//-- vérif si déjà joué ensemble
if(isset(oldtirages[t[i]][t[j]]))
{
return false;
}
//-- vérif l'age du curé
if(false)
{
return false;
}
}
}
});
return true;
}
en
function is_a_good_tirage(tirage)
{
retour = true;
tirage.forEach(function(t)
{
for(i = 0; i< t.length;i++)
{
for(j = i+1; j<t.length;j++)
{
//-- vérif si 2 femmes
if(t[i].substr(-1) == 'f' && t[j].substr(-1) == 'f')
{
retour = false;
}
//-- vérif si déjà joué ensemble
if(oldtirages[t[i]] && oldtirages[t[i]][t[j]])
{
retour = false;
}
//-- vérif l'age du curé
if(false)
{
retour = false;
}
}
}
});
return retour;
}
Tout fonctionne à merveille,Je vous remercie beaucoup, j'ai apporté quelque modif mais niquel,Merci!