En generator är inte så svårt jämfört med en "lösare".
Här kommer en "dum" generator (går på det som ploppar upp just nu, så jar har INTE tänkt igenom detta):
*Passar på att göra reklam för php*
Först har vi en loop som loopar igenom alla siffror (1-9) (variabeln får vara heta $siffraJustNu). <-- Loopen ger oss information om vilken siffra du ligger på
Du har ju 9 kolumner. Skapa då en vektor där elementen symboliserar varje rad i en sådan (en ny sådan vektor skapas för varje loopning). Vektor ser från början ut såhär:
$vektor = arra(array(1, 2, 3),array( 4, 5, 6), array(7, 8, 9));
Du behöver en till vektor (denna ska stoppa oss från att posta flera identiska nummer i samma ruta).
$vektor2 = array(1,2,3)
Nu kör du en shuffle (http://se.php.net/manual/en/function.shuffle.php) på vektorerna.
Sedan har du en till loop som även den loopar från 1-9 (variabeln får heta $kolumnJustNu). <-- Symboliserar varje kolumn.
Nu skriver du ut siffran $siffraJustNu på rad
$vektor[$kolumnJustNu%3][$kolumnJustNu]
i kolumn $kolumnJustNu.
När den loopat klart (81 iterationer) så har du en sudoko. Rensa sedan bort några rutor mha slumpen och voila, du är klar.
En fråga: Går sudoku's att lösa utan att gissa? Kräver vissa att man gissar?
Om man ibland måste gissa (om inget alternativ finns) så är denna generator inte mycket dummare än någon annan.
pseudokod
loopa från 1 - 9 : siffra {
vektor = 2 dim. vektor [[1,2,3][4,5,6][7,8,9]]
vektor2 = [1,2,3]
blanda om vektorerna
loopa från 1 - 9 : kol {
skriv ut $siffra på rad $vektor[vektor2[$kol%3]][$kol] i kolumn $kol
end loop
end loop
Eller möjligtvis
//Hälften av siffrorna skall visas
loopa från 1 - 9 : siffra {
visa = vektor [1,1, ... 1,0,...,1] // 81 element, 81/2 1or, resten 0or
int raknare = 0;
vektor = 2 dim. vektor [[1,2,3][4,5,6][7,8,9]]
vektor2 = [1,2,3]
blanda om vektorerna (även vektorn visa)
loopa från 1 - 9 : kol {
if (visa[$raknare] == 1)
skriv ut $siffra på rad $vektor[vektor2[$kol%3]][$kol] i kolumn $kol
end if
raknare++;
end loop
end loop