3v4l.org

run code in 200+ php & hhvm versions
Bugs & Features
<?php $test = probabilite(array(0.15, 0.1, 0.55, 0.1), array(0,0,3,1,1), 5); echo $test; function combinaison($nombredeupsvoulus, $nombretotal) { return factoriel($nombretotal)/(factoriel($nombredeupsvoulus)*factoriel($nombretotal-$nombredeupsvoulus)); } function factoriel($nombre){ if($nombre==0) { return 1; }else return $nombre*factoriel($nombre-1); } function probabilite($tableaudeProbabilite, $tableauDesUpMinElements, $nombreDeUpsRestants){ $N=$nombreDeUpsRestants;//nombre de up restant $probaFeu=$tableaudeProbabilite[0];//proba d'up en feu $probaBois=$tableaudeProbabilite[1];//proba d'up en bois $probaEau=$tableaudeProbabilite[2];//proba d'up en eau $probaFoudre=$tableaudeProbabilite[3];//proba d'up en foudre. La proba d'up en air se déduit des autres proba. $feu=$tableauDesUpMinElements[0];//nombre de up min désiré en feu $bois=$tableauDesUpMinElements[1];//nombre de up min désiré en bois $eau=$tableauDesUpMinElements[2];//nombre de up min désiré en eau $foudre=$tableauDesUpMinElements[3];//nombre de up min désiré en foudre $air=$tableauDesUpMinElements[4];//nombre de up min désiré en air $x=$feu; $s1=0; while($x<=($N-($bois+$eau+$foudre+$air))) { $y=$bois; $s2=0; while($y<=($N-($x+$eau+$foudre+$air))) { $z=$eau; $s3=0; while($z<=($N-($x+$y+$foudre+$air))) { $t=$foudre; $s4=0; while($t<=($N-($x+$y+$z+$air))) { $s4=$s4+combinaison($t,$N-($x+$y+$z))*pow($probaFoudre,$t)*pow(1-($probaFeu+$probaBois+$probaEau+$probaFoudre),$N-($x+$y+$z+$t)); $t++; } $s3=$s3+combinaison($z,$N-($x+$y))*pow($probaEau,$z)*$s4; $z++; } $s2=$s2+combinaison($y,$N-$x)*pow($probaBois,$y)*$s3; $y++; } $s1=$s1+combinaison($x,$N)*pow($probaFeu,$x)*$s2; $x++; } return $s1; }
based on 6VBKQ
Output for 4.3.0 - 7.1.7
0.033275