Hi
I got from that site, PHPbuilder this function for generating sudokus:
/**
* Method to add puzzle
* puzzle generated using the "Peraita method - Author unknown"
* @param string $difficulty The difficulty raing of the puzzle (used to remove numbers)
* $size the base size of the grid eg. 3 = 9x9 board, 5 = 25*25 board
**/
function generate($difficulty)
{
// set up board size
if($difficulty != 4){
$size = 3;
}else{
$size = 5;
}
// randomize numbers
$numbers = range(1, pow($size, 2));
shuffle($numbers);
// row index sets
$x = 1;
for($i = 1; $i <= pow($size, 2); $i++){
$a = "rowIndex_" . $i; //set up variable names eg $rowIndex_1
for($ii = 1; $ii <= pow($size, 2); $ii++){
${$a}[$ii] = $x; //set up variable eg $rowIndex[0] = 1
$x = $x + 1;
}
$allRows[$i] = $$a; //set up array eg $temp[0] = $rowIndex_1
}
$temp = array_chunk($allRows, $size, true);
foreach($temp as $key => $arrRow){
$a = "arrRow_" . $key; // set up variable names
$$a = $arrRow; // set up variable
$arrAllRows[$key] = $$a; // set up array
}
// column index sets
for($i = 1; $i <= pow($size, 2); $i++){
$a = "colIndex_" . $i; // set up variable names
$x = $i;
for($ii = 1; $ii <= pow($size, 2); $ii++){
${$a}[$ii] = $x; // set up variable
$x = $x + pow($size, 2);
}
$allCols[$i] = $$a; // set up array
}
$temp = array_chunk($allCols, $size, true);
foreach($temp as $key => $arrCol){
$a = "arrCol_" . $key; // set up variable names
$$a = $arrCol; // set up variable
$arrAllCols[$key] = $$a; // set up array
}
// block index sets
$x = 1;
$y = 1;
for($i = 1; $i <= $size; $i++){
for($ii = 1; $ii <= $size; $ii++){
$a = "blockIndex_" . $x; // set up variable names
$z = 1;
for($iii = 1; $iii <= $size; $iii++){
for($iv = 1; $iv <= $size; $iv++){
${$a}[$z++] = $y; // set up variable
$y = $y + 1;
}
$y = $y + ((pow($size, 2)) - ($size));
}
$arrAllBlocks[$x] = $$a; // set up array
$x = $x + 1;
}
$y = ($i * $size) + 1;
}
// set up basic board
for($i = 1; $i <= pow($size, 2); $i++){
foreach($arrAllBlocks as $block){
$temp = $numbers;
foreach($block as $index){
$data[$index] = array_shift($temp);
}
$firstNumber = array_shift($numbers);
$numbers = array_pad($numbers, pow($size, 2), $firstNumber);
}
}
ksort($data);
// shuffle rows
for($i = 0; $i <= $size - 2; $i++){
foreach($arrAllRows as $arrRows){
shuffle($arrRows);
$arrRows = array_slice($arrRows, 0, 2); // takes first 2 rows
foreach($arrRows as $key => $row){
foreach($row as $rowKey => $index){
if($key == 0){
$row_1[$rowKey] = $data[$index];
}else{
$row_2[$rowKey] = $data[$index];
}
}
}
foreach($arrRows as $key => $row){ // swops them
foreach($row as $rowKey => $index){
if($key == 0){
$data[$index] = $row_2[$rowKey];
}else{
$data[$index] = $row_1[$rowKey];
}
}
}
}
}
// shuffle columns
for($i = 0; $i <= $size - 2; $i++){
foreach($arrAllCols as $arrCols){
shuffle($arrCols);
$arrCols = array_slice($arrCols, 0, 2); // takes first 2 columns
foreach($arrCols as $key => $col){
foreach($col as $colKey => $index){
if($key == 0){
$col_1[$colKey] = $data[$index];
}else{
$col_2[$colKey] = $data[$index];
}
}
}
foreach($arrCols as $key => $col){ // swops them
foreach($col as $colKey => $index){
if($key == 0){
$data[$index] = $col_2[$colKey];
}else{
$data[$index] = $col_1[$colKey];
}
}
}
}
}
$solution = implode(",", $data);
//remove pairs of numbers symetrically
if($difficulty == 1){
$pairs = 16;
}elseif($difficulty == 2){
$pairs = 22;
}elseif($difficulty == 3){
$pairs = 30;
}else{
$pairs = 170;
}
for($i = 1; $i <= $pairs; $i++){
do{
$number_1 = rand(1, pow($size, 4));
}while($number_1 == (((pow($size, 4) - 1) / 2) + 1));
$data[$number_1] = '';
$number_2 = (pow($size, 4) + 1) - $number_1;
$data[$number_2] = '';
}
// $puzzle = implode(",", $data);
}
The strange thing is that it is not working or I can not understand how to apply it properly.
I made a board with 9 squares 9x9 fields and starting with the first row, I entered in each filed value="<?php echo $data['the sequence number of the filed'] ?>";
eg:
123456789
10 11 12 13 14 15 16 17 18
19 20 21 22 23 24 25 26 27
28 29 30 31 32 33 34 35 36
...and so on but there were fields in one and same row/column/square with the same value.
Then I tried:
1 10 19
2 11 20
3 12 21
4 13 22
5 14 23
6 15 24
7 16 25
8 17 26
9 18 27
...and so on but there were AGAIN fields in one and same row/column/square with the same value.
Then I tried:
1 2 3 28 29 30
4 5 6 31 32 33
7 8 9 34 35 36
10 11 12
13 14 15
16 17 18
19 20 21
22 23 24
25 26 27
...and so on but there were AGAIN fields in one and same row/column/square with the same value.
Can sbd think out how is the proper echo of the $data elements to work the function properly? Or is it totally unable to work? I apply this thread especcialy of the autor of the function, of it is reading that, because he had published it in that web site.
Please, help