self.parser.add_argument('--problem', '-p', metavar='problem.killer', type=str, nargs=1,help='Files generated by KillerSudokuGenerator.py')
self.parser.add_argument('--csolver', '-cs', action='store_true',help='Encode with the constraint solver (default: uses the original hand crafted encoding)')
self.parser.add_argument('--dump', '-dp', action='store_true',help='Dumps the problem into a file')
+ self.parser.add_argument('--alloy', '-al', action='store_true',help='Solve problem via Alloy')
self.args = self.parser.parse_args()
def getProblemName(self):
return self.args.problem
-
- def useCSolverEncoding(self):
- return self.args.csolver
- def shouldSerialize(self):
- return self.args.dump
+ def getCSolverOption(self):
+ if self.args.alloy:
+ return 3
+ if self.args.dump:
+ return 2
+ if self.args.csolver:
+ return 1
+ else:
+ return 0
+
# def main():
# print sys.argv
# argParser = KSudokuArgParser()
import sys
from itertools import combinations, ifilter, chain
-def solveProblem(N, killerRules, serialize = False):
+class Solver:
+ CSOLVER=1
+ SERIALISE=2
+ ALLOY=3
+
+def solveProblem(N, killerRules, solverOption):
- return generateKillerSudokuConstraints(N, killerRules, serialize)
+ return generateKillerSudokuConstraints(N, killerRules, solverOption)
def getDomain(allPossible):
assert len(allPossible) > 0
b = csolverlb.applyPredicate(solver,equals, inputs, c_uint(2))
return b
-def generateKillerSudokuConstraints(N, killerRules, serialize):
+def generateKillerSudokuConstraints(N, killerRules, solverOption):
csolverlb = ps.loadCSolver()
solver = csolverlb.createCCSolver()
s1 = [ i for i in range(1, N+1)]
valid([problem[i + k % root, j + k // root] for k in range(N)])
#Serializing the problem before solving it ....
- if serialize:
+ if solverOption == Solver.SERIALISE:
csolverlb.serialize(solver)
+ if solverOption == Solver.ALLOY:
+ csolverlb.setAlloyEncoder(solver)
if csolverlb.solve(solver) != 1:
return None
result = [[0 for i in range(N)] for i in range(N)]
global argparser
result_matrix = None
- if argparser.useCSolverEncoding() or argparser.shouldSerialize():
- result_matrix = cs.solveProblem(N, killerRules, argparser.shouldSerialize())
+ if argparser.getCSolverOption() > 0:
+ result_matrix = cs.solveProblem(N, killerRules, argparser.getCSolverOption())
else:
result_matrix = solveOriginalEncoding(killerRules)