08-04-2007, 17:33
|
|
|
|
חבר מתאריך: 05.08.06
הודעות: 2,860
|
|
LOL! great minds think alike :)
כתבתי עוד בהודעה הראשונה שזה מקרה פרטי וניתן להכליל:
ציטוט:
במקור נכתב על ידי maxim k
זאת דוגמא שמטפלת במקרה מאוד פרטי, אבל ניתן להכליל אותה למקרים מורכבים יותר.
|
גם אני כתבתי אתמול פונקציה שמטפלת במקרה הכללי. אלוהים אפילו השמות משתנים דומים!
אני חייב לשים פה רק כדי שתוכל להשוות ולראות
קוד PHP:
function biasRand($arr)
{
$percent = mt_rand(0,100);
foreach($arr as $chance)
if($chance['percent']>=$percent)
return mt_rand($chance['min'],$chance['max']);
else
$percent-=$chance['percent'];
return false;
}
$a[] = array("min"=>1,"max"=>1,"percent"=>15);
$a[] = array("min"=>2,"max"=>2,"percent"=>35);
$a[] = array("min"=>3,"max"=>3,"percent"=>50);
$c[1]=0;
$c[2]=0;
$c[3]=0;
for($i=0;$i<10000;++$i)
{
$b =biasRand($a);
++$c[$b];
}
var_dump($c);
דרך אגב, פגם קטן בפונקציה שלך היא שלא יכולים להיות שני דברים בעלי אותו סיכוי לצאת
|