Adding validation function for Sudoku solutions
authorHamed Gorjiara <hgorjiar@uci.edu>
Thu, 26 Jul 2018 06:53:14 +0000 (23:53 -0700)
committerHamed Gorjiara <hgorjiar@uci.edu>
Thu, 26 Jul 2018 06:53:14 +0000 (23:53 -0700)
.gitignore
sudoku-csolver/Sudoku.py

index f7c623c7eb44ef7be42c91d75abecfff0f01f07c..b2461ad8d994330ea7205216b7d2c5571c2dec82 100644 (file)
@@ -5,6 +5,13 @@
 BlackBox/
 decamouflage/
 hexiom/
+flow_solver/
+numberlink/
+scratch/
+slither-link-sat/
 
 # Format
 DUMP*
+*/.project
+*/.pydevproject
+*/log_file
index 48ec18b0bf639670f843060cf56232ebf3ea962e..c0cd372f88e8ba9d81802dec0b13311598f36878 100644 (file)
@@ -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