From 268cb285fa77136ef64d004171f47e5ee6021260 Mon Sep 17 00:00:00 2001 From: Hamed Gorjiara Date: Thu, 19 Jul 2018 15:13:26 -0700 Subject: [PATCH] Adding constraints for making the cells different in each cage --- kilerSudoku/csolversudoku.py | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/kilerSudoku/csolversudoku.py b/kilerSudoku/csolversudoku.py index b3eb63c8..d6a169c6 100644 --- a/kilerSudoku/csolversudoku.py +++ b/kilerSudoku/csolversudoku.py @@ -35,18 +35,9 @@ def generateKillerSudokuConstraints(N, killerRules): csolverlb.addConstraint(solver,b); def getElement(cage): - cageSum = cage[0] - cageSize = len(cage[1]) - cageCells = cage[1] - cb = combinations([ii for ii in range(1, N+1)], cageSize) - f = lambda x : sum(x) == cageSum - comb = ifilter(f, cb) # all valid combinations - allPossible = list(chain(comb)) - #s1 = [ allPossible[ i for i in range(1, N+1)]] - set1 = (c_long* len(s1))(*s1) - s1 = csolverlb.createSet(solver, c_uint(1), set1, c_uint(N)) - problem = np.array([[csolverlb.getElementVar(solver,s1) for i in range(N)] for i in range(N)]) - elements = [ problem[cage[1][i][0]][cage[1][i][1]] for i in range(len(cage[1])) ] + elems = [ problem[cage[1][i][0]][cage[1][i][1]] for i in range(len(cage[1])) ] + valid(elems) + return elems def generateSumConstraint(sumCage, elements): d = [] @@ -103,15 +94,15 @@ def generateKillerSudokuConstraints(N, killerRules): # ensure rows and columns have distinct values for i in range( N): - valid(problem[:,i]) - valid(problem[i,:]) + valid(problem[:,i]) + valid(problem[i,:]) # ensure each block has distinct values root = int(N**(0.5)) - collections = [ root*i for i in range(root)] - for i in collections: - for j in collections: - valid([problem[i + k % root, j + k // root] for k in range(N)]) + collections = [ root*i for i in range(root)] + for i in collections: + for j in collections: + valid([problem[i + k % root, j + k // root] for k in range(N)]) #Serializing the problem before solving it .... csolverlb.serialize(solver) -- 2.34.1