Bonjour,

Voila je rencontre un petit problème avec mon code je suis actuellement entrain de convertir un code php vers le js , ca fait un petit moment que je n'ai pas codé et j'avoue ne pas trop comprendre mes erreurs, en espérant un petit coup de main de votre part et surtout m'expliquer d'ou viens l'erreur et pourquoi , ca serait sympathique =)

le code php

<?php
    //VARIABLE POUR LE TESTE CES VARIABLE VIENDRONT DE LA BASE DE DONNEE PLUS TARD !!
    $participant = array("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
    $nb_participant=count($participant);
    //$nb_participant=41;
    //VARIABLE POUR STOCKER LE NOMBRE DE DOUBLETTES
    $nb_doublette;
    //VARIABLE POUR STOCKER LE NOMBRE DE TRIPLETTES
    $nb_triplette;
    //VARIABLE POUR STOCKER LE NOMBRE DE PARTIE A CREER
    $nb_partie;
    //combinaison possible doublette
    $combiPossibleD=array();
    //combinaison possible triplette
    $combiPossibleT=array();

    $oldtirages = array();

    //FONCTION POUR DETERMINER LE NOMBRE DE DOUBLETTE ET DE TRIPLETTE
    function determination()
    {
        global $nb_participant,$nb_doublette,$nb_triplette, $nb_partie;
        $reste = fmod($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 creationCombinaisonPossibleEquipe($index, $p, $n, $liste)
    {
        global $participant,$combiPossibleD,$combiPossibleT;
        $liste2 = $participant;
        if ($index>=$p)
        {
            $listeSup = array("0","1","2","3","4","5","6","7","8","9");
            $j1 =  str_replace($listeSup,"",$liste[0]);//recupere le sexe du j1
            $j2 =  str_replace($listeSup,"",$liste[1]);//recupere le sexe du j2
            //pour generer les triplettes
            if($p==3)
            {
                $j3 =  str_replace($listeSup,"",$liste[2]);//recupere le sexe du j3
                //on s'assure qu'il n'y a pas 2 femmes dans la meme equipe
                if(($j1!="f"&&$j2!="f")||($j1!="f"&&$j3!="f")||($j2!="f"&&$j3!="f"))
                {
                    array_push($combiPossibleT,$liste);

                }
            }
            //pour generer les doublettes
            else
            {
                //on s'assure qu'il n'y a pas 2 femmes dans la meme equipe
                if($j1!="f"||$j2!="f")
                {
                    array_push($combiPossibleD,$liste);
                    //echo implode(" - ", $liste)."\n";
                }
            }
            // la liste est construite -> FIN
            return;
        }
        // ajoute un nouvel element candidat dans la liste
        // - sans ordre -> candidat: tous les elements
        // - avec ordre -> candidat: seulement les elements supérieurs au précédent
        $start=0;
        if (true && $index>0) 
        {
            $start = array_search($liste[$index-1], $liste2) + 1;
        }
        for($i=$start;$i<$n;$i++) 
        {
            $liste[$index] = $liste2[$i];
            creationCombinaisonPossibleEquipe($index+1, $p, $n, $liste);
        }
    }

    function lanceur()
    {
        global $participant,$combiPossibleT,$combiPossibleD,$nb_participant,$nb_doublette,$nb_triplette, $nb_partie,$oldtirages;
        determination();
        creationCombinaisonPossibleEquipe(0, 2, count($participant), $liste = array());
        creationCombinaisonPossibleEquipe(0, 3, count($participant), $liste = array());

        $tirage1 = nouveauTirage();
        print_r($tirage1);

        $tirage2 = nouveauTirage();
        print_r($tirage2);

        //-- exemple mauvais tirage
        print_r(nouveauTirageInccorect());

        affichage();
    }

    function affichage()
    {
        global $numero,$combiPossibleT,$combiPossibleD,$nb_participant,$nb_doublette,$nb_triplette, $nb_partie,$joueurPris;
        echo "Nombre de participant :".$nb_participant."\n";
        echo "nombre de combinaison de triplette possible (en ayant retiré les équipes avec 2 femmes dedans) :".count($combiPossibleT)."\n";
        echo "nombre de combinaison de doublette possible (en ayant retiré les équipes avec 2 femmes dedans) :".count($combiPossibleD)."\n";
        echo "composition d'équipe (en favorisant les doublettes) :\n";
        echo "nombre d'équipe double :".$nb_doublette."\n";
        echo "nombre d'équipe triple :".$nb_triplette."\n";
        echo "nombre de partie à jouer à chaque tirage : ".$nb_partie."\n";

    }

    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 genererUnTirage()
    {

        global $numero,$combiPossibleT,$combiPossibleD,$nb_participant,$nb_doublette,$nb_triplette, $nb_partie,$joueurPris,$participant;

        $part = $participant;
        shuffle($part);

        $tirage = [];

        for($i = 0;$i<$nb_doublette; $i++)
        {
            $tirage[] = [$part[$i*2],$part[$i*2+1]];
        }

        for($i = 0;$i<$nb_triplette; $i++)
        {
            $tirage[] = [$part[$nb_doublette*2+$i*3],$part[$nb_doublette*2+$i*3+1],$part[$nb_doublette*2+$i*3+2]];
        }

        return $tirage;

    }

    function is_a_good_tirage($tirage)
    {
        global $oldtirages;

        foreach($tirage as $t)
        {
            for($i = 0; $i< count($t);$i++)
            {
                for($j = $i+1; $j< count($t);$j++)
                {
                    //-- vérif si 2 femmes
                    if(substr($t[$i],-1) == 'f' and substr($t[$j],-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)
    {
        global $oldtirages;

        foreach($tirage as $t)
        {
            for($i = 0; $i< count($t);$i++)
            {
                for($j = $i+1; $j< count($t);$j++)
                {
                    $oldtirages[$t[$i]][$t[$j]] = 1;
                    $oldtirages[$t[$j]][$t[$i]] = 1;
                }   
            }
        }

    }

    lanceur();
   ?>

et le js qui ne fonctionne pas


//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'];
var femme=["2","3","4","8","12","16","19"];
//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 typeof 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;
                    console.log(t[i])
                }

                //-- vérif si déjà joué ensemble
                if(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();```

1 réponse


cattleyas10
Auteur
Réponse acceptée

les erreurs arrivent partout ou il y a "oldtirages[t[i]][t[j]]" si quelqu'un pouvait m'aider ca serait sympas ..fait un moment je n'ai pas trop touché au js etc..