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()
 |