DIMENSION aStrings[9], aResult[9], aRandomize[6,3] CLEAR FOR nT = 0 TO 17 aRandomize[nT+1] = VAL(SUBSTR(GETWORDNUM("123 132 231 213 312 321", INT(nT/3)+1),(nT%3)+1,1)) ENDFOR * Generate a random number to use as a base cString = "123456789" FOR nT = 1 TO 9 nPos = INT(RAND() * 9)+1 cString = IIF(nPos>1, SUBSTR(cString, nPos,1)+LEFT(cString, nPos-1)+SUBSTR(cString,nPos+1), cString) cString = SUBSTR(cString,2)+LEFT(cString,1) ENDFOR * Make a basic Soduko map nT = 1 FOR nY = 1 TO 3 FOR nX = 1 TO 3 aStrings[nT] = cString cString = SUBSTR(cString,4)+LEFT(cString,3) nT = nT + 1 ENDFOR cString = SUBSTR(cString,2)+LEFT(cString,1) ENDFOR * Move rows arround, to randomize nT = 1 nRand2 = INT(RAND()*6)+1 FOR nY = 1 TO 3 nRand = INT(RAND()*6)+1 FOR nY2 = 1 TO 3 aResult[nT] = aStrings[(aRandomize[nRand2, nY]-1)*3+aRandomize[nRand, nY2]] nT = nT + 1 ENDFOR ENDFOR * Move columns arround, to randomize nT = 1 nRand2 = INT(RAND()*6)+1 FOR nX = 1 TO 3 nRand = INT(RAND()*6)+1 FOR nX2 = 1 TO 3 FOR nX3 = 1 TO 9 aStrings[nX3] = STUFF(aStrings[nx3], (aRandomize[nRand2, nX]-1)*3+aRandomize[nRand, nX2], 1, ; SUBSTR(aResult[nX3], nT,1)) ENDFOR nT = nT + 1 ENDFOR ENDFOR * Display puzzle FOR nT = 1 TO 9 ? " "+aStrings[nT] ENDFOR