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 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Number of one minute periods having that number of arrivals | 4 | 15 | 12 | 9 | 6 | 5 | 3 | 1 | 2 | 1 | 1 |
Design a function to return a random number based on this distribution.
Generalise the function to use a similar distribution as a parameter.
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:
3
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