Download or view constraintSudoku.frink in plain text format
/** This uses Frink's constraint solver to solve a Sudoku problem.
See constraintSudokuTest.frink for examples of calling it.
*/
class Sudoku
{
// Any character other than [1-9] can be used for the "placeholder"
// character.
class solveFromArray[array] :=
{
solver = newJava["frink.constraint.ConstraintSolver"]
// Make a 2-D array of variables with values 1 to 9.
q = new array[[9,9], {|row,col,solver| solver.makeIntRangeVariable[1,9]}, solver]
for row = 0 to 8 // Rows all different
solver.allDifferent[toVector[q@row]]
for col = 0 to 8 // Cols all different
solver.allDifferent[toVector[q.getColumn[col]]]
for rBlock = 0 to 2 // 3x3 blocks all different
for cBlock = 0 to 2
{
v = newJava["java.util.Vector"]
for r = 0 to 2
for c = 0 to 2
v.addElement[q@(rBlock*3+r)@(cBlock*3+c)]
solver.allDifferent[v]
}
// Parse input
for row=0 to 8
for col=0 to 8
{
c = substrLen[array@row, col, 1]
if c >= "1" and c <= "9"
q@row@col.fix[parseInt[c]]
}
listener = newJava["frink.constraint.GridPrintingSolutionListener", [9,9]]
//listener.setFirstOnly[true] // Comment this in to find only one solution.
solver.solve[listener]
}
}
Download or view constraintSudoku.frink in plain text format
This is a program written in the programming language Frink.
For more information, view the Frink
Documentation or see More Sample Frink Programs.
Alan Eliasen was born 20145 days, 6 hours, 25 minutes ago.