
| Current Path : /var/www/web-klick.de/dsh/50_dev2017/1310__algorithms/Julia/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : /var/www/web-klick.de/dsh/50_dev2017/1310__algorithms/Julia/sudoku.jl |
using JuMP
function LoadData(filepath)
fp = open(filepath, "r")
initgrid = zeros(Int,9,9)
for row in 1:9
line = readline(fp)
initgrid[row,:] = int(split(line,","))
end
return initgrid
end
# Solve model
function SolveModel(initgrid)
m = Model()
@defVar(m, 0 <= x[1:9, 1:9, 1:9] <= 1, Int)
# Constraint 1 - Each row...
@addConstraint(m, row[i=1:9,val=1:9], sum(x[i,:,val]) == 1)
# Constraint 2 - Each column...
@addConstraint(m, col[j=1:9,val=1:9], sum(x[:,j,val]) == 1)
# Constraint 3 - Each sub-grid...
@addConstraint(m, subgrid[i=1:3:7,j=1:3:7,val=1:9], sum(x[i:i+2,j:j+2,val]) == 1)
# Constraint 4 - Cells...
@addConstraint(m, cells[i=1:9,j=1:9], sum(x[i,j,:]) == 1)
# Initial solution
for row in 1:9
for col in 1:9
if initgrid[row,col] != 0
@addConstraint(m, x[row, col, initgrid[row, col]] == 1)
end
end
end
# Solve it
status = solve(m)
# Check solution
if status == :Infeasible
error("No solution found!")
else
mipSol = getValue(x)
sol = zeros(Int,9,9)
for row in 1:9, col in 1:9, val in 1:9
if mipSol[row, col, val] >= 0.9
sol[row, col] = val
end
end
return sol
end
end
# Initialization
if length(ARGS) != 1
error("Expected one argument: the initial solution, e.g. julia sudoku.jl sudoku.csv")
end
# Solve
sol = SolveModel(LoadData(ARGS[1]))
# Display solution
println("Solution:")
println("[-----------------------]")
for row in 1:9
print("[ ")
for col in 1:9
print("$(sol[row,col]) ")
if col % 3 == 0 && col < 9
print("| ")
end
end
println("]")
if row % 3 == 0
println("[-----------------------]")
end
end