From 5fdb7f12118cb6171415915a783739932de128d3 Mon Sep 17 00:00:00 2001 From: Hamed Gorjiara Date: Wed, 25 Jul 2018 23:53:14 -0700 Subject: [PATCH] Adding validation function for Sudoku solutions --- .gitignore | 7 +++++++ sudoku-csolver/Sudoku.py | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f7c623c7..b2461ad8 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,13 @@ BlackBox/ decamouflage/ hexiom/ +flow_solver/ +numberlink/ +scratch/ +slither-link-sat/ # Format DUMP* +*/.project +*/.pydevproject +*/log_file diff --git a/sudoku-csolver/Sudoku.py b/sudoku-csolver/Sudoku.py index 48ec18b0..c0cd372f 100644 --- a/sudoku-csolver/Sudoku.py +++ b/sudoku-csolver/Sudoku.py @@ -80,9 +80,35 @@ def extractProblemSpecs(args): print N return N, K +def printValidationStatus(problem): + if validateSolution(problem): + print "***CORRECT***" + else: + print "***WRONG*****" + +def validateSolution(problem): + global N + for row in problem: + for i in range(1, N): + if row.count(i) >1: + return False + for col in range(1,N): + for i in range(1, N): + if [problem[k][col] for k in range(N) ].count(i) >1: + return False + root = int(N**(0.5)) + for i in range( root): + for j in range(root): + cube = [ problem[i*root + k % root][ j*root + k // root] for k in range(N)] + for num in range( N): + if cube.count(num) >1: + return False + return True + def generate_problem_csolver(N,K): problem = cs.generateProblem(N) pprint(problem) + printValidationStatus(problem) np.savetxt('solved/'+str(N) + 'x' + str(N) + '.sol',problem) removeKDigits(problem, N, K) # np.savetxt('problems/'+str(N) + 'x' + str(N) + '-' + str(K) + '.problem',problem) @@ -90,7 +116,8 @@ def generate_problem_csolver(N,K): def generate_problem(N, K): problem = [[0 for i in range(N)] for i in range(N)] solve(problem) - np.savetxt('solved/'+str(N) + 'x' + str(N) + '.sol',problem) + np.savetxt('solved/'+str(N) + 'x' + str(N) + '.sol',problem) + printValidationStatus(problem) removeKDigits(problem, N, K) pprint(problem) np.savetxt('problems/'+str(N) + 'x' + str(N) + '-' + str(K) + '.problem',problem) @@ -111,7 +138,8 @@ def solve_problem(problemset, useCsolver): else: solve(problemset) print('Answer:') - pprint(problemset) + pprint(problemset) + printValidationStatus(problemset) def v(i, j, d): return N**2 * (i - 1) + N * (j - 1) + d -- 2.34.1