From the R library package “sudoku”:
generateSudoku package:sudoku R Documentation
Randomly Generate a Sudoku Puzzle Grid
Description:
Creates a 9x9 Sudoku grid suitable for use by 'playSudoku'.
Usage:
generateSudoku(Nblank=50, print.it=FALSE)
Arguments:
Nblank: Number of cells to blank out
print.it: Logical. If true, print result to screen.
Details:
The basic algorithm is to start with a 'primordial' Sudoku grid,
swap around some rows and columns, then blank out some cells.
Value:
A matrix, representing a 9x9 Sudoku grid.
Author(s):
Curt S. <[email protected]>, Henrik Bengtsson
<[email protected]>, and David Brahm <[email protected]>
References:
<URL: http://sudoku.com/>
Examples:
generateSudoku(print.it=TRUE)
Here’s the function definition for those who understand R. I might make
pseudo-code from this if I have the time:
generateSudoku ← function(Nblank=50, print.it=FALSE) {
z ←
c(1:9,4:9,1:3,7:9,1:6,2:9,1,5:9,1:4,8:9,1:7,3:9,1:2,6:9,1:5,9,1:8)
z ← matrix(sample(9)[z], 9,9)
for (i in 1:5) z ← z[replicate(3, sample(3)) + 3rep(sample(0:2),
each=3),
replicate(3, sample(3)) + 3rep(sample(0:2),
each=3)]
for (bi in seq(0,6,3)) for (bj in seq(0,6,3)) {
idx ← data.matrix(expand.grid(bi + 1:3, bj + 1:3))
z[idx[sample(1:9, Nblank%/%9), ]] ← 0
}
Depopulate (if we had a test for uniqueness, we’d put it here):
while (sum(!z) < Nblank) z[matrix(sample(9,2), 1)] ← 0
if (print.it) printSudoku(z)
z
}
Meino Christian C. wrote:
–
M. Edward (Ed) Borasky