63 lines
1.5 KiB
Python
63 lines
1.5 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
from pyswip.prolog import Prolog
|
||
|
from pyswip.easy import *
|
||
|
|
||
|
_ = 0
|
||
|
puzzle1 = [
|
||
|
[_,6,_,1,_,4,_,5,_],
|
||
|
[_,_,8,3,_,5,6,_,_],
|
||
|
[2,_,_,_,_,_,_,_,1],
|
||
|
[8,_,_,4,_,7,_,_,6],
|
||
|
[_,_,6,_,_,_,3,_,_],
|
||
|
[7,_,_,9,_,1,_,_,4],
|
||
|
[5,_,_,_,_,_,_,_,2],
|
||
|
[_,_,7,2,_,6,9,_,_],
|
||
|
[_,4,_,5,_,8,_,7,_]
|
||
|
]
|
||
|
|
||
|
|
||
|
puzzle2 = [
|
||
|
[_,_,1,_,8,_,6,_,4],
|
||
|
[_,3,7,6,_,_,_,_,_],
|
||
|
[5,_,_,_,_,_,_,_,_],
|
||
|
[_,_,_,_,_,5,_,_,_],
|
||
|
[_,_,6,_,1,_,8,_,_],
|
||
|
[_,_,_,4,_,_,_,_,_],
|
||
|
[_,_,_,_,_,_,_,_,3],
|
||
|
[_,_,_,_,_,7,5,2,_],
|
||
|
[8,_,2,_,9,_,7,_,_]
|
||
|
]
|
||
|
|
||
|
def pretty_print(table):
|
||
|
print "".join(["/---", "----"*8, "\\"])
|
||
|
for row in table:
|
||
|
print "".join(["|", "|".join(" %s " % (i or " ") for i in row), "|"])
|
||
|
print "".join(["\\---", "----"*8, "/"])
|
||
|
|
||
|
def solve(problem):
|
||
|
prolog.consult("sudoku.pl")
|
||
|
p = str(problem).replace("0", "_")
|
||
|
result = list(prolog.query("L=%s,sudoku(L)" % p, maxresult=1))
|
||
|
if result:
|
||
|
result = result[0]
|
||
|
return result["L"]
|
||
|
else:
|
||
|
return False
|
||
|
|
||
|
def main():
|
||
|
puzzle = puzzle1
|
||
|
print "-- PUZZLE --"
|
||
|
pretty_print(puzzle)
|
||
|
print
|
||
|
print " -- SOLUTION --"
|
||
|
solution = solve(puzzle)
|
||
|
if solution:
|
||
|
pretty_print(solution)
|
||
|
else:
|
||
|
print "This puzzle has no solutions [is it valid?]"
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
prolog = Prolog()
|
||
|
main()
|