syl20dies
Messages postés13Date d'inscriptionmardi 21 octobre 2008StatutMembreDernière intervention29 janvier 2009 21 oct. 2008 à 08:27
Bonjour, conscient que ce source ainsi que la polémique associée commencent à être assez anciens, je ne sais pas si mon désir de soutenir CyrVB rencontrera du répondant, toutefois je tenais à signaler que ce code s'avère pour moi très utile. J'ai récemment été confronté à la problématique de la génération de l'ensemble des solutions d'une combinaison de k éléments parmis n. je tiens à préciser que j'appartiens plus à la catégorie des bidouilleurs du dimanche, et je ne suis donc à ce titre pas très familier de la récursivité. J'ai alors buté sur la problématique de réaliser k boucles imbriquées dans mon appel de fonction.
j'ai ensuite vainement parcouru le net à la recherche de la manière de résoudre ce problème. La seule information que j'ai pu obtenir fut d'aller voir du coté de la récursivité et là encore le meilleur tuto trouvé ne s'employait qu'à mettre sous forme récursive l'utilisation de 2 boucles imbriquées et non k. je suis finalement parvenu en m'arrachant les cheveux à une solution 100% itérative du problème, mais au vu de la dite solution je pense que la simplicité du code de CyrVB(ne justifiant pas pour certains de s'enthousiasmer devant l'emploi de la récursivité dans une boucle) devrait au contraire en faire ressortir les bienfaits.
lors de ma tentative d'apprentissage sur la notion de récursivité, j'ai pu noter que celle-ci avait l'inconvénient de consommer une quantité de mémoire à l'exécution correspondant aux paramètres multipliés par le nombre de récursions. dans le cas présent j'imagine que ce puisse rapidement devenir un problème au vu du nombre faramineux de solutions que l'on peut obtenir dès que k se rapproche de n/2 avec un n élevé.
je me demandais donc si finalement ma solution itérative certes beaucoup plus obscure en terme de lisibilité pouvait tout de même représenter un intérêt.
celle-ci étant codée en action script je ne sais pas si elle trouverait place à cet endroit mais je serais vivement intéressé par la critique de membres éclairés tels qu'il semble que l'on puisse en rencontrer sur phpcs(même s'ils lancent parfois des benchs pour comparer deux programmes ne faisant pas du tout la même chose ;-))de plus ce sont là deux langages orientés web et souvent complémentaires, je tomberais donc peut être sur quelqu'un sachant le traduire en php et/ou l'optimiser en conservant sa nature itérative.
je profite de la confusion sur la destination du programme pour soumettre une suggestion dans le cas du calcul strict du nombre de combinaisons
C(k,n) est mathématiquement = n!/(k!(n-k)! mais si l'on réfléchit un peu, et au vu du soit-disant gain de ressource qu'était censé amener la fonction.j'émettrai une vive critique sur le fait d'appeler trois fois une fonction factorielle sans chercher un peu à simplifier ce quotient en effet il suffit de multiplier uniquement les entiers allant de k à n et de diviser ce résultat par (n-k)! en l'occurence 43! est calculé deux fois pour rien puisqu'ils se simplifient.
ceci donnerait la fonction suivante tellement simple que je vais même la traduire en php:
function loto($k,$n){
//ici le loto mais s'applique en fait à tout calcul de combinaisons de $k elements parmis $n
$tot=1;
for($r=$n;$r>$k;$r--){$tot*=$r;}
for($r=($n-$k);$r>1;$r--){$tot/=$r;}
return($tot);
}
echo 'Nombre de Solution: '.loto(6,49);
ceci étant dit revenons en à notre problématique de génération des solutions:
je l'ai codé ici dans le but de retourner un tableau bidimensionnel contenant toutes les combinaisons possibles de n elements parmis un tableau passé en paramètre ex: combi(["chat","chien","pomme","poire"],2) retourne[["chat","pomme"],["chat","poire"],["chien","pomme"],["chien","poire"],["pomme","poire"]]
clement1138
Messages postés52Date d'inscriptionmardi 8 février 2011StatutMembreDernière intervention28 juillet 2011 29 mai 2008 à 17:47
mdr je deterre le code jme fait chier en stage..ben o moin ce code pas tres utile pr ma part m'a bien amusé avec votre discussion pseudo filosofik.....cyrvb tma tué...c un code fache toi pas
CyrVB
Messages postés26Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention21 mars 2006 18 janv. 2006 à 01:54
Non parceque moi je me fache sinon ;)
je suis tres tres sensible comme garcon.
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 18 janv. 2006 à 00:25
ok
CyrVB
Messages postés26Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention21 mars 2006 18 janv. 2006 à 00:04
//echo $s.'
'; // On affiche la solution enelever les commentaires
Cependant ma fonction retourne aussi le nombre de solution
J4'ai fais un copier/coller de la description, lit le Post Scriptum
Description
Voila,
Ceci est mon premier et certainement dernier code poste ici.
J'en avais un peu marre de faire 6 boucles imbriquees pour calculer toutes les possibites du loto, donc j ai reflechie un peu au probleme avec un copain, et on a pondu ce code, qui s adapte facilement a n importe quelle parametres.
Si vous avez des combinaison a calculer, c'est relativement pratique.
Ca fait appel a un appel recursif dans un boucle, c est plutot joli je trouve ;)
PS: Vu qu il y a pres de 14 Millions au loto, j'ai mis en commentaire le 'echo' car sinon ca prends vraiment du temps a afficher
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 18 janv. 2006 à 00:00
echo 'Nombre de Solution: '.loto('',1,49,6); // ca doit retourne 13983816
ça va t'afficher quoi ça ? le nombre de solutions non ? je vois rien d'autre dans ta fonction qui affiche autre chose...
CyrVB
Messages postés26Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention21 mars 2006 17 janv. 2006 à 22:56
JE REPETE, JE REPETE ///
Mon code est fait pour afficher les solutions possibles, et non de calculer le nombre de solution possible
J'espere que c'est clair pour tout le monde ;)
CyrVB
Messages postés26Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention21 mars 2006 17 janv. 2006 à 22:48
J ai l impression que vous n avez pas compris le probleme !
Mon code, affiche les combinaisons possible du loto, ou de toute autre combinasion de de X1 a Xx avec Y nombre affichable possible.
Le code de monoceros01, ne fais que calculer le nombre de solution. Essayer d afficher les combinaison possible avec le code de monoceros01, vous verez que ce n est pas possible.
Vous avez tous fait la meme confusion, entre le calcul du nombre de solution possible, facielemt realisable par un simple factule factioriel, et le fais d afficher les solutions possibles.
hackshell
Messages postés12Date d'inscriptionjeudi 25 septembre 2003StatutMembreDernière intervention 4 janvier 2009 16 janv. 2006 à 20:38
Et les chiffres du LOTTO ou d'EURO MILLIONS...c'est quand que vous les donnez ?... (humour)
FhX
Messages postés2350Date d'inscriptionmercredi 13 octobre 2004StatutMembreDernière intervention18 avril 20153 16 janv. 2006 à 18:53
Oh... enfin un intérêt utile à ma classe de bench :D
cs_Isengard
Messages postés83Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention10 février 2006 16 janv. 2006 à 16:33
Euh j'ai eu du mal à comprendre le principe de la fonction (heureusement que je fais des statistiques en maths lol). Tout ça pour dire que pour mettre des commentaires comme ça vaut mieux pas en mettre du tout ! Dire que c'est recursif et que c'est beau c'est bien mais ce serait bien d'expliquer en quoi ça consiste vraiment (pas la recursivité mais comment fonctionne la fonction)
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 16 janv. 2006 à 13:33
Au passage, je n'avais pas noté.
Je mets 5, la moyenne.
- pas moins, parce que ce genre de code pourra être utile, je pense, à certains. Ca part d'une bonne idée.
- pas plus, parce que ce n'est pas génialement codé, puisque l'on peut largement optimiser (la preuve :-) ).
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 16 janv. 2006 à 13:30
C'est vrai tien...lol.
Bon plus honnête (j'ai viré tout ce qui a trait à la génération des combinaisons sur le code de CyrVB ) :
On remarquera que décidément, faut toujours faire les benches sur beaucoup d'exécution, parce que le temps du code de Monoceros a très légèrement changé ;-) Enfin en l'occurence, vu la différence entre les 2 codes, ce n'est pas très grave ici ;-)
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 16 janv. 2006 à 13:19
c'est pas honnête comme benchmark, monoceros ne génère pas les combis :)
monoceros01
Messages postés420Date d'inscriptionvendredi 28 novembre 2003StatutMembreDernière intervention20 mars 2006 16 janv. 2006 à 12:09
^0^ J'sais pas pourquoi, mais là, pour la peine, j'aime bien les benchs tiens! :D
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 16 janv. 2006 à 10:03
J'ai décidé de faire un bench ;-) (avec la classe de bench de FhX, ceci dit en passant) :
Mooceros : 7.70092010498E-005
CyrVB : 115.388473988
je ne l'ai fait que sur 1 exécution, vu le temps que ça prend déjà...
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 15 janv. 2006 à 13:00
merci de m'appuyer, je vais peut-être imprimer cette page pour la faire lire à ma prof de philo, je passerais peut-être moins de temps à faire des sudokus en philo :)
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 15 janv. 2006 à 11:21
Qu'elle est la profondeur philosophique associée au fait qu'une récursion soit invoquée dans une boucle? Cela lui confère-t-il une essence supérieur? Quelle est d'ailleurs l'essence d'une récursion? Redéfinissons à nouveaux frais le pourquoi et l'origine de la récursion, chère à nous tous. Quelle propriété supérieure s'attache à une boucle? Comment la boucle peut-elle influer sur le cours de la vie d'une récursion, ainsi que sur son bien-être, son essence en somme.
Accueillez positivement et avec un regard bienveillant (respiciet disait le grand sage!) cette nouvelle question philosophique: la récursion dans une boucle, est-ce, finalement, tellement différent et plus profond? Relève-t-elle du savoir bien gardé des grands Chamanes du Nord, ou est-elle à la portée de tous, même les non initiés?
En tout cas je suis 100% coucou sur ce coup-là.
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 14 janv. 2006 à 19:13
Pourquoi ne pas faire une constante :
define('NB_POSSIBILITES_LOTO',13........);
et hop ça c'est torché tu pourras l'avoir dans ton script (bon ok je sors)
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 14 janv. 2006 à 18:43
je conclue : un truc récursif pour ça, c'est passer son temps à programmer et non é réfléchir... on peut faire les deux comme le fais monoceros...
monoceros01
Messages postés420Date d'inscriptionvendredi 28 novembre 2003StatutMembreDernière intervention20 mars 2006 14 janv. 2006 à 18:39
<?php
function factoriel($entier)
{
$res = $entier;
for($i=$entier-1;$i>1;$i--)
{
$res *=$i;
}
return $res;
}
function loto($i, $n, $p)
{
// $i= Valeur Minimum (Loto 1)
// $n= Valeur Maximum (Loto 49)
// $p= Nombre de chiffre que la solution doit contenir (Loto 6)
Maintenant explique moi ce que fait ta fonction que ne fait pas la mienne =) (mise a par bouffer de la ressource)
monoceros01
Messages postés420Date d'inscriptionvendredi 28 novembre 2003StatutMembreDernière intervention20 mars 2006 14 janv. 2006 à 18:33
ué c fini
<?php
function factoriel($entier)
{
$res = $entier;
for($i=$entier-1;$i>1;$i--)
{
$res *=$i;
}
return $res;
}
echo factoriel(6);
?>
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 14 janv. 2006 à 18:31
une boucle pour faire une factorielle c'est pas long non, surtout qu'on nous a fait coder ça en java dans les TD je te raconte pas comment on dormait m'enfin bon, faut bien commencer un jour lol
CyrVB
Messages postés26Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention21 mars 2006 14 janv. 2006 à 18:28
@monoceros01: le but de mon truc n est pas de calculer le nombre de resultat possible, du as du te meprendre, mon but est de les affiches, et donc de pouvoir utiliser ces resultats dans d autre fonction!
de plus c est facilemenet adaptable, pour afficher les combinaison avec des chaines, des tableaux, etc ...
Pour cacluler le nombre de resultat un calcule factoriel est bien necessaire c est sur, j ai aussi le code en PHP si tu veux
monoceros01
Messages postés420Date d'inscriptionvendredi 28 novembre 2003StatutMembreDernière intervention20 mars 2006 14 janv. 2006 à 18:25
Argh par contre php calcul po les factoriels v__v (ce qui rend le code ci-dessus faux évidemment :/)
[troll]Faire une fonction qui calcule les factoriels serait déjà plus intéressant et aura plus d'utilité que de calculer les combinaisons du loto :D/troll
Tiens j'vais voir si y en a pas déjà sur CS et pitète en coder un si le coeur m'en dit (c po bien long a faire ¬¬)
monoceros01
Messages postés420Date d'inscriptionvendredi 28 novembre 2003StatutMembreDernière intervention20 mars 2006 14 janv. 2006 à 18:16
Autant pour moi, mon erreur est que les numéros peuvent être dans n'importe quel ordre donc il faut virer toutes les combinaisons identiques dans mon calcul... Je corrige donc avec :
($n-$i+1)! / (($n-$i+1-$p)! × $p!)
Donc dans ton exemple :
(49-1+1)! / (49-1+1-6)! × 6! = 49! / (43! × 6!)
Soit :
(49×48×47×46×45×44) / 720 10 068 347 520 / 720 13 983 816 combinaisons possibles
Ce qui donnerais une fonction du style :
function loto($s, $i, $n, $p)
{
// $s= String_Resulat
// $i= Valeur Minimum (Loto 1)
// $n= Valeur Maximum (Loto 49)
// $p= Nombre de chiffre que la solution doit contenir (Loto 6)
return ($n-$i+1)! / (($n-$i+1-$p)! × $p!);
}
echo 'Nombre de Solution: '.loto('',1,49,6); // ca doit retourne 13983816
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 14 janv. 2006 à 18:01
je vois pas ce qu'il y a de profond là dedans... je connais, utilise et ai codé nombre de fonctions qui utilisent la récursivité... le fait de mettre un code en initié tient au fait que le code soit complexe, gère une tache complexe et soit propre... et non pas juste parce qu'il est récursif... 11 lignes de code récursif ou non y a pas de quoi fouetter un chat... mais bon c'est pas grave... .. . ;o)
@ tchaOo°
CyrVB
Messages postés26Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention21 mars 2006 14 janv. 2006 à 17:59
au fait j ai une question, je n y connais rien de rien en C3 ou C++, ca doit pas etre bien sur a adpater, mais quelqu un pouurait il me poster le code source exacte pour passer ca en C# ou C++, voir meme en VB.NET
CyrVB
Messages postés26Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention21 mars 2006 14 janv. 2006 à 17:56
Kanlrelune, je suis d accord avec toi
Je l ai mis en initie juste a cause de ca, car cest un appel recursive dans une boucle, perso c est as tous les jours que je vois ca. A chaque fois que tu appel la fonction, une boucle rappel cette meme fonction, ca commence a devenir un peu profond
Pour en connaitre un peu plus, et pour vous montrez que la taupe est a pres de 14M et non 10M comme le pretant Monoceros01
CyrVB
Messages postés26Date d'inscriptionmercredi 8 janvier 2003StatutMembreDernière intervention21 mars 2006 14 janv. 2006 à 17:43
@MONOCEROS01: non tu te trompes le nbr de solution est 13M est des bananes tu peux le verifier sans aucun probleme sur d autres site
@COUCOU747: c est pas un char pour tuer une taupe, mais cest une solution bien plus elegante que
6 boucles imbriquees, imagine que tu veuilles faire des combinaison d un loto de 1 a 49 avec 15 numero. Tu devras donc faire 15 boucle imbriquees, ca n a aucun style !
monoceros01
Messages postés420Date d'inscriptionvendredi 28 novembre 2003StatutMembreDernière intervention20 mars 2006 14 janv. 2006 à 17:38
si je ne m'abuse, la solution c'est :
($n-$i+1)! / ($n-$i+1-$p)!
Donc dans ton exemple :
(49-1+1)! / (49-1+1-6)! = 49!/43!
Soit :
49×48×47×46×45×44 = 10 068 347 520 combinaisons possibles
Voilà la taupe :D
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 14 janv. 2006 à 15:58
Salut,
"tu prends souvent un char pour tuer une taupe ?"
t'es sûr de pas la louper au moins (mdr)
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 14 janv. 2006 à 10:38
21 oct. 2008 à 08:27
j'ai ensuite vainement parcouru le net à la recherche de la manière de résoudre ce problème. La seule information que j'ai pu obtenir fut d'aller voir du coté de la récursivité et là encore le meilleur tuto trouvé ne s'employait qu'à mettre sous forme récursive l'utilisation de 2 boucles imbriquées et non k. je suis finalement parvenu en m'arrachant les cheveux à une solution 100% itérative du problème, mais au vu de la dite solution je pense que la simplicité du code de CyrVB(ne justifiant pas pour certains de s'enthousiasmer devant l'emploi de la récursivité dans une boucle) devrait au contraire en faire ressortir les bienfaits.
lors de ma tentative d'apprentissage sur la notion de récursivité, j'ai pu noter que celle-ci avait l'inconvénient de consommer une quantité de mémoire à l'exécution correspondant aux paramètres multipliés par le nombre de récursions. dans le cas présent j'imagine que ce puisse rapidement devenir un problème au vu du nombre faramineux de solutions que l'on peut obtenir dès que k se rapproche de n/2 avec un n élevé.
je me demandais donc si finalement ma solution itérative certes beaucoup plus obscure en terme de lisibilité pouvait tout de même représenter un intérêt.
celle-ci étant codée en action script je ne sais pas si elle trouverait place à cet endroit mais je serais vivement intéressé par la critique de membres éclairés tels qu'il semble que l'on puisse en rencontrer sur phpcs(même s'ils lancent parfois des benchs pour comparer deux programmes ne faisant pas du tout la même chose ;-))de plus ce sont là deux langages orientés web et souvent complémentaires, je tomberais donc peut être sur quelqu'un sachant le traduire en php et/ou l'optimiser en conservant sa nature itérative.
je profite de la confusion sur la destination du programme pour soumettre une suggestion dans le cas du calcul strict du nombre de combinaisons
C(k,n) est mathématiquement = n!/(k!(n-k)! mais si l'on réfléchit un peu, et au vu du soit-disant gain de ressource qu'était censé amener la fonction.j'émettrai une vive critique sur le fait d'appeler trois fois une fonction factorielle sans chercher un peu à simplifier ce quotient en effet il suffit de multiplier uniquement les entiers allant de k à n et de diviser ce résultat par (n-k)! en l'occurence 43! est calculé deux fois pour rien puisqu'ils se simplifient.
ceci donnerait la fonction suivante tellement simple que je vais même la traduire en php:
function loto($k,$n){
//ici le loto mais s'applique en fait à tout calcul de combinaisons de $k elements parmis $n
$tot=1;
for($r=$n;$r>$k;$r--){$tot*=$r;}
for($r=($n-$k);$r>1;$r--){$tot/=$r;}
return($tot);
}
echo 'Nombre de Solution: '.loto(6,49);
ceci étant dit revenons en à notre problématique de génération des solutions:
je l'ai codé ici dans le but de retourner un tableau bidimensionnel contenant toutes les combinaisons possibles de n elements parmis un tableau passé en paramètre ex: combi(["chat","chien","pomme","poire"],2) retourne[["chat","pomme"],["chat","poire"],["chien","pomme"],["chien","poire"],["pomme","poire"]]
function combi(arr_in,n){
comb=[];
fini=false;
id=Array(n);
for(cptid=0;cptid<n;cptid++){id[cptid]=cptid;}
id[n-1]=id[n-1]-1;
while(!fini){
exit=false;
for(i=n-1;i>=0 && !exit;i--){
if(id[i]0;cpt--){
id[n-cpt]=id[(n-1)-cpt]+((first)?2:1);
first=false;
}
}
}
if(!fini){
solution=Array(n);
for(cptid=0;cptid<n;cptid++){solution[cptid]=arr_in[id[cptid]];}
comb.push(solution);
}
}
return comb;
}
29 mai 2008 à 17:47
18 janv. 2006 à 01:54
je suis tres tres sensible comme garcon.
18 janv. 2006 à 00:25
18 janv. 2006 à 00:04
'; // On affiche la solution enelever les commentaires
Cependant ma fonction retourne aussi le nombre de solution
J4'ai fais un copier/coller de la description, lit le Post Scriptum
Description
Voila,
Ceci est mon premier et certainement dernier code poste ici.
J'en avais un peu marre de faire 6 boucles imbriquees pour calculer toutes les possibites du loto, donc j ai reflechie un peu au probleme avec un copain, et on a pondu ce code, qui s adapte facilement a n importe quelle parametres.
Si vous avez des combinaison a calculer, c'est relativement pratique.
Ca fait appel a un appel recursif dans un boucle, c est plutot joli je trouve ;)
PS: Vu qu il y a pres de 14 Millions au loto, j'ai mis en commentaire le 'echo' car sinon ca prends vraiment du temps a afficher
18 janv. 2006 à 00:00
ça va t'afficher quoi ça ? le nombre de solutions non ? je vois rien d'autre dans ta fonction qui affiche autre chose...
17 janv. 2006 à 22:56
Mon code est fait pour afficher les solutions possibles, et non de calculer le nombre de solution possible
J'espere que c'est clair pour tout le monde ;)
17 janv. 2006 à 22:48
Mon code, affiche les combinaisons possible du loto, ou de toute autre combinasion de de X1 a Xx avec Y nombre affichable possible.
Le code de monoceros01, ne fais que calculer le nombre de solution. Essayer d afficher les combinaison possible avec le code de monoceros01, vous verez que ce n est pas possible.
Vous avez tous fait la meme confusion, entre le calcul du nombre de solution possible, facielemt realisable par un simple factule factioriel, et le fais d afficher les solutions possibles.
16 janv. 2006 à 20:38
16 janv. 2006 à 18:53
16 janv. 2006 à 16:33
16 janv. 2006 à 13:33
Je mets 5, la moyenne.
- pas moins, parce que ce genre de code pourra être utile, je pense, à certains. Ca part d'une bonne idée.
- pas plus, parce que ce n'est pas génialement codé, puisque l'on peut largement optimiser (la preuve :-) ).
16 janv. 2006 à 13:30
Bon plus honnête (j'ai viré tout ce qui a trait à la génération des combinaisons sur le code de CyrVB ) :
Monoceros : 6.89029693604E-005
CyrVB : 39.918913126
On remarquera que décidément, faut toujours faire les benches sur beaucoup d'exécution, parce que le temps du code de Monoceros a très légèrement changé ;-) Enfin en l'occurence, vu la différence entre les 2 codes, ce n'est pas très grave ici ;-)
16 janv. 2006 à 13:19
16 janv. 2006 à 12:09
16 janv. 2006 à 10:03
Mooceros : 7.70092010498E-005
CyrVB : 115.388473988
je ne l'ai fait que sur 1 exécution, vu le temps que ça prend déjà...
15 janv. 2006 à 13:00
15 janv. 2006 à 11:21
Accueillez positivement et avec un regard bienveillant (respiciet disait le grand sage!) cette nouvelle question philosophique: la récursion dans une boucle, est-ce, finalement, tellement différent et plus profond? Relève-t-elle du savoir bien gardé des grands Chamanes du Nord, ou est-elle à la portée de tous, même les non initiés?
En tout cas je suis 100% coucou sur ce coup-là.
14 janv. 2006 à 19:13
define('NB_POSSIBILITES_LOTO',13........);
et hop ça c'est torché tu pourras l'avoir dans ton script (bon ok je sors)
14 janv. 2006 à 18:43
14 janv. 2006 à 18:39
function factoriel($entier)
{
$res = $entier;
for($i=$entier-1;$i>1;$i--)
{
$res *=$i;
}
return $res;
}
function loto($i, $n, $p)
{
// $i= Valeur Minimum (Loto 1)
// $n= Valeur Maximum (Loto 49)
// $p= Nombre de chiffre que la solution doit contenir (Loto 6)
return factoriel($n-$i+1) / (factoriel($n-$i+1-$p) × factoriel($p));
}
echo 'Nombre de Solution: '.loto(1,49,6);
?>
Maintenant explique moi ce que fait ta fonction que ne fait pas la mienne =) (mise a par bouffer de la ressource)
14 janv. 2006 à 18:33
<?php
function factoriel($entier)
{
$res = $entier;
for($i=$entier-1;$i>1;$i--)
{
$res *=$i;
}
return $res;
}
echo factoriel(6);
?>
14 janv. 2006 à 18:31
14 janv. 2006 à 18:28
de plus c est facilemenet adaptable, pour afficher les combinaison avec des chaines, des tableaux, etc ...
Pour cacluler le nombre de resultat un calcule factoriel est bien necessaire c est sur, j ai aussi le code en PHP si tu veux
14 janv. 2006 à 18:25
[troll]Faire une fonction qui calcule les factoriels serait déjà plus intéressant et aura plus d'utilité que de calculer les combinaisons du loto :D/troll
Tiens j'vais voir si y en a pas déjà sur CS et pitète en coder un si le coeur m'en dit (c po bien long a faire ¬¬)
14 janv. 2006 à 18:16
($n-$i+1)! / (($n-$i+1-$p)! × $p!)
Donc dans ton exemple :
(49-1+1)! / (49-1+1-6)! × 6! = 49! / (43! × 6!)
Soit :
(49×48×47×46×45×44) / 720 10 068 347 520 / 720 13 983 816 combinaisons possibles
Ce qui donnerais une fonction du style :
function loto($s, $i, $n, $p)
{
// $s= String_Resulat
// $i= Valeur Minimum (Loto 1)
// $n= Valeur Maximum (Loto 49)
// $p= Nombre de chiffre que la solution doit contenir (Loto 6)
return ($n-$i+1)! / (($n-$i+1-$p)! × $p!);
}
echo 'Nombre de Solution: '.loto('',1,49,6); // ca doit retourne 13983816
14 janv. 2006 à 18:01
@ tchaOo°
14 janv. 2006 à 17:59
14 janv. 2006 à 17:56
Je l ai mis en initie juste a cause de ca, car cest un appel recursive dans une boucle, perso c est as tous les jours que je vois ca. A chaque fois que tu appel la fonction, une boucle rappel cette meme fonction, ca commence a devenir un peu profond
for (;$i <= $n; ++$i) { loto($s." ".$i, $i + 1, $n, $p); }
14 janv. 2006 à 17:53
@ tchaOo°
14 janv. 2006 à 17:47
Pour en connaitre un peu plus, et pour vous montrez que la taupe est a pres de 14M et non 10M comme le pretant Monoceros01
14 janv. 2006 à 17:43
@COUCOU747: c est pas un char pour tuer une taupe, mais cest une solution bien plus elegante que
6 boucles imbriquees, imagine que tu veuilles faire des combinaison d un loto de 1 a 49 avec 15 numero. Tu devras donc faire 15 boucle imbriquees, ca n a aucun style !
14 janv. 2006 à 17:38
($n-$i+1)! / ($n-$i+1-$p)!
Donc dans ton exemple :
(49-1+1)! / (49-1+1-6)! = 49!/43!
Soit :
49×48×47×46×45×44 = 10 068 347 520 combinaisons possibles
Voilà la taupe :D
14 janv. 2006 à 15:58
"tu prends souvent un char pour tuer une taupe ?"
t'es sûr de pas la louper au moins (mdr)
14 janv. 2006 à 10:38
tu prends souvent un char pour tuer une taupe ?