Как бы rand

13.11.2007 09:10
Сделал на блоговаре новый функционал — трафки™.

Травок пять, каждая следующая реже предыдущей в два раза. То есть первая попадается с вероятностью 50%, вторая — 25%, третья — 12.5%, и так далее.

Стал вопрос — как это все считать. Понятно, что rand(), а потом? Родилось вот такое:

$rb = str_pad (decbin (mt_rand (0,64)),6,"0", STR_PAD_LEFT);
$herb = strpos ($rb, "1");

Голые знаменитости одобряют php.

На эту заметку ссылаются:

  • Трафки
    #

    Извращенец…

    $str = « 1111111111111111222222223333445»;
    $herb = substr($str, mt_rand(strlen($str)), 1);

    как-то так. Да, в начале str идут 32 пробела.

    Автор ответил:
    Да я 32 пробела без ошибки не наберу.
    Я может туплю, но ссылка «вы вставляете у себя на сайте простой код» из FAQа ведёт в настойки, а там про траффки ничего.

    Автор ответил:
    Исправил.
    32 нуля сможешь?
    vkv
    пробел, шифт хоме, ктрл-с, енд, ктрл-в
    повторить 4 раза
    vkv
    потом 32 лишних удалить
    daekrist
    .
    Я правильно понял, что траффку у тебя уже собрали????
    Дмитрий Смирнов 2.0 RC
    > $rb = str_pad (decbin (mt_rand (0,64)),6,"0", STR_PAD_LEFT);
    > $herb = strpos ($rb, «1»);
    (радостно) это не код, а пиздец какой-то!

    Автор ответил:
    АГА!
    InfoRmEr
    Обычно юзаю нечто вроде этого:
    function genColoredRandomData()
    {
    $one_prob = 10; //вероятность 10%
    $two_prob = $one_prob + 20; //вероятность 20%
    $three_prob = $two_prob + 70; //вероятность 70%

    $probab = mt_rand(1,100);

    if($probab

    InfoRmEr
    if($probab <= $one_prob)
    $data = 1;
    else if ($probab <= $two_prob)
    $data = 2;
    else
    $data = 3;

    return $data;
    }

    Чтобы комментировать, надо войти или сначала зарегистрироваться.
    А если у вас есть OpenID, это еще проще: