Reputation: 2063
I am attempting to create a program that simulates the lottery. I create my first array with 6 random numbers and then attempt to keep populating my second array with random numbers until they aare the same. It works when the numbers are between 1 and 9 but when I extend it to between 1 - 49 like the real lottery i just get a time out.
<?php
$number1 = $_POST['number1'];
$number2 = $_POST['number2'];
$number3 = $_POST['number3'];
$number4 = $_POST['number4'];
$number5 = $_POST['number5'];
$number6 = $_POST['number6'];
$userArray = array($number1, $number2, $number3, $number4, $number5, $number6);
// mix and max numbers that can be used with th lottery
$min = 1;
$max = 49;
// random number between 0 and 1 simulating lottery
$lotNumber1 = rand ($min, $max);
$lotNumber2 = rand ($min, $max);
$lotNumber3 = rand ($min, $max);
$lotNumber4 = rand ($min, $max);
$lotNumber5 = rand ($min, $max);
$lotNumber6 = rand ($min, $max);
$lotArray = array($lotNumber1, $lotNumber2, $lotNumber3, $lotNumber4, $lotNumber5, $lotNumber6);
asort($userArray);
asort($lotArray);
$userString = implode($userArray, "_");
$lotString = implode($lotArray, "_");
$i = 0;
set_time_limit(10000);
while($lotString != $userString) {
$i ++;
$lotNumber1 = rand ($min, $max);
$lotNumber2 = rand ($min, $max);
$lotNumber3 = rand ($min, $max);
$lotNumber4 = rand ($min, $max);
$lotNumber5 = rand ($min, $max);
$lotNumber6 = rand ($min, $max);
$lotArray = array($lotNumber1, $lotNumber2, $lotNumber3, $lotNumber4, $lotNumber5, $lotNumber6);
asort($lotArray);
$lotString = implode($lotArray, "_");
}
echo '<pre>';
print_r ($lotString);
echo '</pre>';
echo '<pre>';
print_r ($userString);
echo '</pre>';
echo "YOU WON it took ".$i." times";
?>
Upvotes: 0
Views: 56
Reputation: 18550
$lotNumber1 = rand ($min, $max);
$lotNumber2 = rand ($min, $max);
$lotNumber3 = rand ($min, $max);
$lotNumber4 = rand ($min, $max);
$lotNumber5 = rand ($min, $max);
$lotNumber6 = rand ($min, $max);
is a problem, you should use shuffle(range(1,49)) and take the first 6 to ensure no duplicates.
As the other answer suggests, its a big calculation, one in around 13 million. Thats a lot of loops making random numbers and sorting them, you will likely need a larger timeout that 30s
My code is
<?php
$number1 = 1;
$number2 = 2;
$number3 = 3;
$number4 = 4;
$number5 = 5;
$number6 = 6;
$userArray = array($number1, $number2, $number3, $number4, $number5, $number6);
// mix and max numbers that can be used with th lottery
$min = 1;
$max = 49;
// random number between 0 and 1 simulating lottery
$lotArray = (range($min,$max));
asort($userArray);
$userString = implode($userArray, "_");
$lotString = "";
$i = 0;
set_time_limit(10000);
while($lotString != $userString) {
$i ++;
shuffle($lotArray);
$lotA = array_slice($lotArray,0,6);
asort($lotA);
$lotString = implode($lotA, "_");
}
echo '<pre>';
print_r ($lotString);
echo '</pre>';
echo '<pre>';
print_r ($userString);
echo '</pre>';
echo "YOU WON it took ".$i." times";
?>
<pre>1_2_3_4_5_6</pre><pre>1_2_3_4_5_6</pre>YOU WON it took 12004536 times
real 0m41.926s
Upvotes: 1