Need help building Sudoku generater
Posted: Wed Jan 13, 2010 3:22 pm
Here is the code: (I have post mysql.php and the database as replies.)
It takes WAY to long to run. If you do not try and update each column in the database it works just fine. Any suggestions. (my arrays skills are not up to par)
<?php
ini_set(max_execution_time, 400);
include ('mysql.php');
global $row, $col, $reg,$mysql_sud;
function randomsq($min,$max) {
$randomsq = rand($min,$max);
}
function checkrow($rowwanted) {
global $row;
include ('mysql.php');
$result = mysql_query("SELECT num FROM $mysql_sud WHERE row='$rowwanted' LIMIT 9");
while($basic = mysql_fetch_array($result)){
$basic2[] = $basic['num'];
}
$row = $basic2;
}
function findreg($row,$col) {
global $foundreg;
if($row <=3 AND $col <=3) {
$foundreg = 1;
}elseif($row <=3 AND $col <=6) {
$foundreg = 2;
}elseif($row <=3 AND $col <=9) {
$foundreg = 3;
}elseif($row <=6 AND $col <=3) {
$foundreg = 4;
}elseif($row <=6 AND $col <=6) {
$foundreg = 5;
}elseif($row <=6 AND $col <=9) {
$foundreg = 6;
}elseif($row <=9 AND $col <=3) {
$foundreg = 7;
}elseif($row <=9 AND $col <=8) {
$foundreg = 8;
}elseif($row <=9 AND $col <=9) {
$foundreg = 9;
}
return $foundreg;
}
function updatecol ($row1a, $col1a, $num1a){
global $mysql_sud;
$query = "UPDATE $mysql_sud SET `num` = $num1a WHERE `col` = $col1a AND `row` = $row1a LIMIT 1 ";
$result = @mysql_query($query);
if($result) {
echo 'Box updated.';
} else {
echo 'Error: ' . mysql_error() . '';
}
mysql_free_result($result);
}
function checkcol($col1){
global $col;
include ('mysql.php');
$colwanted = $col1;
$result = mysql_query("SELECT num FROM $mysql_sud WHERE col='$colwanted' LIMIT 9");
while($basic = mysql_fetch_array($result)){
$basic2[] = $basic['num'];
}
$col = $basic2;
}
function checkreg($reg1) {
global $reg;
include ('mysql.php');
$regwanted = $reg1;
$result = mysql_query("SELECT num FROM $mysql_sud WHERE reg='$regwanted' LIMIT 9");
while($basic = mysql_fetch_array($result)){
$basic2[] = $basic['num'];
}
$reg = $basic2;
}
function checkeverything($regnum, $rownum, $colnum) {
checkreg($regnum);
checkcol($colnum);
checkrow($rownum);
}
function findusable($ro,$re,$c) {
$start = microtime();
global $used, $reg, $col, $row, $num3,$ttime;
checkeverything($re,$ro,$c);
$all = array(1,2,3,4,5,6,7,8,9);
$used = array_merge($reg, $col, $row);
$usable = array_diff($all, $used);
//echo @implode('',$usable);echo '<br>';
while(count($num3)<1){
// Generate rand number from 1 to 9
$randVar = rand(1,9);
// If the rand number does not
// exist in the array add it
if (in_array($randVar,$usable)) {
$num3 = $randVar;
}
}
unset($randVar); unset($usable);unset($row); unset($col); unset($used); unset($reg);
$end = microtime();
$ms_start = explode(" ",$start);
$ms_end = explode(" ",$end);
$ttime = round(($ms_end[1] - $ms_start[1] + $ms_end[0] - $ms_start[0]),2);
}
//Create each row
$onrownum = 1;
for ($n=1; $n<=9; $n++) {
//run for each column in row
$oncolnum = 1;
for ($n2=1; $n2<=9; $n2++) {
$onregnum = findreg($onrownum,$oncolnum);
findusable($onrownum,$oncolnum,$onregnum);
echo $num3;
updatecol($onrownum, $oncolnum, $num3);
echo '<br>';
$blah[] = $num3;
$oncolnum++;
unset($num3);
}
$onrownum++;
}
echo '<br>';
//echo @implode('',$blah);
?>
It takes WAY to long to run. If you do not try and update each column in the database it works just fine. Any suggestions. (my arrays skills are not up to par)
<?php
ini_set(max_execution_time, 400);
include ('mysql.php');
global $row, $col, $reg,$mysql_sud;
function randomsq($min,$max) {
$randomsq = rand($min,$max);
}
function checkrow($rowwanted) {
global $row;
include ('mysql.php');
$result = mysql_query("SELECT num FROM $mysql_sud WHERE row='$rowwanted' LIMIT 9");
while($basic = mysql_fetch_array($result)){
$basic2[] = $basic['num'];
}
$row = $basic2;
}
function findreg($row,$col) {
global $foundreg;
if($row <=3 AND $col <=3) {
$foundreg = 1;
}elseif($row <=3 AND $col <=6) {
$foundreg = 2;
}elseif($row <=3 AND $col <=9) {
$foundreg = 3;
}elseif($row <=6 AND $col <=3) {
$foundreg = 4;
}elseif($row <=6 AND $col <=6) {
$foundreg = 5;
}elseif($row <=6 AND $col <=9) {
$foundreg = 6;
}elseif($row <=9 AND $col <=3) {
$foundreg = 7;
}elseif($row <=9 AND $col <=8) {
$foundreg = 8;
}elseif($row <=9 AND $col <=9) {
$foundreg = 9;
}
return $foundreg;
}
function updatecol ($row1a, $col1a, $num1a){
global $mysql_sud;
$query = "UPDATE $mysql_sud SET `num` = $num1a WHERE `col` = $col1a AND `row` = $row1a LIMIT 1 ";
$result = @mysql_query($query);
if($result) {
echo 'Box updated.';
} else {
echo 'Error: ' . mysql_error() . '';
}
mysql_free_result($result);
}
function checkcol($col1){
global $col;
include ('mysql.php');
$colwanted = $col1;
$result = mysql_query("SELECT num FROM $mysql_sud WHERE col='$colwanted' LIMIT 9");
while($basic = mysql_fetch_array($result)){
$basic2[] = $basic['num'];
}
$col = $basic2;
}
function checkreg($reg1) {
global $reg;
include ('mysql.php');
$regwanted = $reg1;
$result = mysql_query("SELECT num FROM $mysql_sud WHERE reg='$regwanted' LIMIT 9");
while($basic = mysql_fetch_array($result)){
$basic2[] = $basic['num'];
}
$reg = $basic2;
}
function checkeverything($regnum, $rownum, $colnum) {
checkreg($regnum);
checkcol($colnum);
checkrow($rownum);
}
function findusable($ro,$re,$c) {
$start = microtime();
global $used, $reg, $col, $row, $num3,$ttime;
checkeverything($re,$ro,$c);
$all = array(1,2,3,4,5,6,7,8,9);
$used = array_merge($reg, $col, $row);
$usable = array_diff($all, $used);
//echo @implode('',$usable);echo '<br>';
while(count($num3)<1){
// Generate rand number from 1 to 9
$randVar = rand(1,9);
// If the rand number does not
// exist in the array add it
if (in_array($randVar,$usable)) {
$num3 = $randVar;
}
}
unset($randVar); unset($usable);unset($row); unset($col); unset($used); unset($reg);
$end = microtime();
$ms_start = explode(" ",$start);
$ms_end = explode(" ",$end);
$ttime = round(($ms_end[1] - $ms_start[1] + $ms_end[0] - $ms_start[0]),2);
}
//Create each row
$onrownum = 1;
for ($n=1; $n<=9; $n++) {
//run for each column in row
$oncolnum = 1;
for ($n2=1; $n2<=9; $n2++) {
$onregnum = findreg($onrownum,$oncolnum);
findusable($onrownum,$oncolnum,$onregnum);
echo $num3;
updatecol($onrownum, $oncolnum, $num3);
echo '<br>';
$blah[] = $num3;
$oncolnum++;
unset($num3);
}
$onrownum++;
}
echo '<br>';
//echo @implode('',$blah);
?>