Sudoku script.
Mijn moeder kwam pas met een sudoku boekje aanzetten, en nu dacht ik, laat ik eens een php script proberen te maken die zo'n puzzel genereerd.
Maar nu heb ik een tijdje lopen proberen, en ik krijg hem niet snel genoeg te krijgen dat ie binnen de 30sec (of als ik hem zelfs naar 60 sec verhoog) timeout past.
Nu vroeg ik me af of er hier iemand is die nog dingen ziet die het script drastisch sneller maken.
Ik ben benieuwd :)
Maar nu heb ik een tijdje lopen proberen, en ik krijg hem niet snel genoeg te krijgen dat ie binnen de 30sec (of als ik hem zelfs naar 60 sec verhoog) timeout past.
Nu vroeg ik me af of er hier iemand is die nog dingen ziet die het script drastisch sneller maken.
Code (php)
1
2
3
4
5
6
7
8
9
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
2
3
4
5
6
7
8
9
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
error_reporting(E_ALL);
$getallen = Array(1,2,3,4,5,6,7,8,9);
$cols = Array();
$blokken = Array();
$rows = Array();
$blokn = true;
$blokgedoe = Array();
$blokgedoe[0] = Array(0 => 1, 1 => 1, 2 => 1, 3 => 2, 4 => 2, 5 => 2, 6 => 3, 7 => 3, 8 => 3);
$blokgedoe[1] = Array(0 => 1, 1 => 1, 2 => 1, 3 => 2, 4 => 2, 5 => 2, 6 => 3, 7 => 3, 8 => 3);
$blokgedoe[2] = Array(0 => 1, 1 => 1, 2 => 1, 3 => 2, 4 => 2, 5 => 2, 6 => 3, 7 => 3, 8 => 3);
$blokgedoe[3] = Array(0 => 4, 1 => 4, 2 => 4, 3 => 5, 4 => 5, 5 => 5, 6 => 6, 7 => 6, 8 => 6);
$blokgedoe[4] = Array(0 => 4, 1 => 4, 2 => 4, 3 => 5, 4 => 5, 5 => 5, 6 => 6, 7 => 6, 8 => 6);
$blokgedoe[5] = Array(0 => 4, 1 => 4, 2 => 4, 3 => 5, 4 => 5, 5 => 5, 6 => 6, 7 => 6, 8 => 6);
$blokgedoe[6] = Array(0 => 7, 1 => 7, 2 => 7, 3 => 8, 4 => 8, 5 => 8, 6 => 9, 7 => 9, 8 => 9);
$blokgedoe[7] = Array(0 => 7, 1 => 7, 2 => 7, 3 => 8, 4 => 8, 5 => 8, 6 => 9, 7 => 9, 8 => 9);
$blokgedoe[8] = Array(0 => 7, 1 => 7, 2 => 7, 3 => 8, 4 => 8, 5 => 8, 6 => 9, 7 => 9, 8 => 9);
$data = "<table width=\"300\">";
for ($i = 0; $i < 9; $i++) {
$data .= "<tr style=\"border : 2px solid #000;\">";
$copy = $getallen;
shuffle($copy);
$rows[$i] = Array();
for ($ii = 0; $ii < 9; $ii++) {
if ($blokn) {
if (empty($cols[$ii])) {
$cols[$ii] = Array();
}
$blok = $blokgedoe[$i][$ii];
if (empty($blokken[$blok])) {
$blokken[$blok] = Array();
}
}
if (!in_array($copy[$ii], $cols[$ii]) && !in_array($copy[$ii], $rows[$i]) && !in_array($copy[$ii], $blokken[$blok])) {
$data .= "<td style=\"border : 2px solid #000;\">" . $copy[$ii] . "</td>";
$cols[$ii][] = $copy[$ii];
$blokken[$blok][] = $copy[$ii];
$rows[$i][] = $copy[$ii];
$blokn = true;
} else {
$ii--;
shuffle($copy);
$blokn = false;
}
}
$data .= "</tr>";
}
echo $data;
?>
error_reporting(E_ALL);
$getallen = Array(1,2,3,4,5,6,7,8,9);
$cols = Array();
$blokken = Array();
$rows = Array();
$blokn = true;
$blokgedoe = Array();
$blokgedoe[0] = Array(0 => 1, 1 => 1, 2 => 1, 3 => 2, 4 => 2, 5 => 2, 6 => 3, 7 => 3, 8 => 3);
$blokgedoe[1] = Array(0 => 1, 1 => 1, 2 => 1, 3 => 2, 4 => 2, 5 => 2, 6 => 3, 7 => 3, 8 => 3);
$blokgedoe[2] = Array(0 => 1, 1 => 1, 2 => 1, 3 => 2, 4 => 2, 5 => 2, 6 => 3, 7 => 3, 8 => 3);
$blokgedoe[3] = Array(0 => 4, 1 => 4, 2 => 4, 3 => 5, 4 => 5, 5 => 5, 6 => 6, 7 => 6, 8 => 6);
$blokgedoe[4] = Array(0 => 4, 1 => 4, 2 => 4, 3 => 5, 4 => 5, 5 => 5, 6 => 6, 7 => 6, 8 => 6);
$blokgedoe[5] = Array(0 => 4, 1 => 4, 2 => 4, 3 => 5, 4 => 5, 5 => 5, 6 => 6, 7 => 6, 8 => 6);
$blokgedoe[6] = Array(0 => 7, 1 => 7, 2 => 7, 3 => 8, 4 => 8, 5 => 8, 6 => 9, 7 => 9, 8 => 9);
$blokgedoe[7] = Array(0 => 7, 1 => 7, 2 => 7, 3 => 8, 4 => 8, 5 => 8, 6 => 9, 7 => 9, 8 => 9);
$blokgedoe[8] = Array(0 => 7, 1 => 7, 2 => 7, 3 => 8, 4 => 8, 5 => 8, 6 => 9, 7 => 9, 8 => 9);
$data = "<table width=\"300\">";
for ($i = 0; $i < 9; $i++) {
$data .= "<tr style=\"border : 2px solid #000;\">";
$copy = $getallen;
shuffle($copy);
$rows[$i] = Array();
for ($ii = 0; $ii < 9; $ii++) {
if ($blokn) {
if (empty($cols[$ii])) {
$cols[$ii] = Array();
}
$blok = $blokgedoe[$i][$ii];
if (empty($blokken[$blok])) {
$blokken[$blok] = Array();
}
}
if (!in_array($copy[$ii], $cols[$ii]) && !in_array($copy[$ii], $rows[$i]) && !in_array($copy[$ii], $blokken[$blok])) {
$data .= "<td style=\"border : 2px solid #000;\">" . $copy[$ii] . "</td>";
$cols[$ii][] = $copy[$ii];
$blokken[$blok][] = $copy[$ii];
$rows[$i][] = $copy[$ii];
$blokn = true;
} else {
$ii--;
shuffle($copy);
$blokn = false;
}
}
$data .= "</tr>";
}
echo $data;
?>
Ik ben benieuwd :)
Hmm. Ik ga nu wat mensen irriteren, maar so be it. Op PHPfreakz is een sudoku-script, ik zou het eens vergelijken.
Tot mijn spijt vindt ik alleen een oplosser van sudoku's, en de bedoeling van dit script is het genereren ervan.
Het probleem is dat hij in een bijna eeuwige loop blijft hangen, omdat hij met shuffle() steeds op een eerste waarde in de array uitkomt die al in de rij, kolom of het vak staat.
Het probleem is dat hij in een bijna eeuwige loop blijft hangen, omdat hij met shuffle() steeds op een eerste waarde in de array uitkomt die al in de rij, kolom of het vak staat.
set_time_limit() Als je hem zo bovenaan je script zet heb je zeg maar alle tijd.
Werkt geloof ik alleen als php niet in safe-mode draait
Werkt geloof ik alleen als php niet in safe-mode draait
Mjah Klaasjan, maar het gaat erom dat je er niets aan hebt als het 2 minuten duurt, en daarom was de vraag ook of het script sneller kon ;)




