Robson » Little Red Book » Random Numbers #4

Chapter 7 - Question 5

The traffic arriving at a junction is observed for an hour. Each minute the number of arrivals at the junction is recorder and the data tabulated:

Number of arrivals in each one minute period 012345678910
Number of one minute periods having that number of arrivals 4151296531211

Design a function to return a random number based on this distribution.

Generalise the function to use a similar distribution as a parameter.

Solution 1

PHP:

<?
   $traffic = array(
                    0 =>  4,
                    1 => 15,
                    2 => 12,
                    3 =>  9,
                    4 =>  6,
                    5 =>  5,
                    6 =>  3,
                    7 =>  1,
                    8 =>  2,
                    9 =>  1,
                   10 =>  1
                   );
   $pos = mt_rand(1, 60);
   foreach($traffic as $key => $minute)
   {
       $total += $minute;
       if ($total >= $pos)
       {
           echo $key;
           break;
       }
   }
?>

Which produces:

6

That seemed a bit easy, so I thought I'd have a go at trying to make the smallest possible solution:

<?$t=array(4,15,12,9,6,5,3,1,2,1,1);$p=rand(1,60);for($n=0;$a<$p;)$a+=$t[$n++];echo --$n?>

Which produces:

2
© 2004-17 robson | cc unless stated