Wenn man von rein Quadratischen Sudokus ausgeht, so ist Size bei dir ja die Größe des Hauptquarates. Die Wurzel aus Size gibt dir dann die größe der kleinen Quadrate und die Info wieviele davon in einer Reihe/Spalte stehen.
Deine X und Y Werte liefern dir wieder mit mod und div die Infos die du brauchst. Wenn Smallsize = Wurzel(Size) ist könnte es so gehen:
x div Smallsize = "X Nummer des kleinen Quadrats"
x mod Smallzise = "X Position deiner Zahl im kleinen Quadrat"
Beispiel oberste Reihe eines 9ers: 0,1,2 / 3,4,5 / 6,7,8. Nehmen wir Position 7:
7 div 3 = 2, d.h. Quadrat Nummer 2 (X richtung) (Zählung der Quadrate beginnt auch bei 0)
7 mod 3 = 1, d.h. Im kl. Quadrat steht die Zahl auf X-Position 1 (wieder beginnt Zählung bei null).
Y Funktioniert genauso. Im Beispiel, oberste Reihe, Y also 0:
0 div 3 = 0, d.h. Quadrat Nr. 0 (Y richtung)
0 mod 3 = 0, d.h. Steht im kl. Quadr. auf Y-Pos 0.
Die mit mod gewonnene Info ist aber unwichtig.
Somit muss jetzt ein Test das betroffene Quadrat durchlaufen:
Delphi-Quellcode:
for i = Smallsize*QuadratNummerX To Smallsize*QuadratNummerX+Smallzise
for j = Smallsize*QuadratNummerY To Smallsize*QuadratNummerY+Smallzise
if Grid(i,j)=digit and ((i<>X)and(j<>Y)) then
return false,....
So könnte es in etwa anfangen