What's New in v0.3.2
See the full list of changes at v0.3.2 Release Notes.
Python to Prolog Value Transfer Using String Interpolation
See the documentation on String Interpolation from Python to Prolog.
Introducing the Examples Package
The new pyswip.examples
package enables using some of the PySwip examples in code and the command line.
pyswip.examples.sudoku
The pyswip.examples.sudoku
module provides the Matrix
class which holds a 9x9 Sudoku puzzle. You can create a Matrix
instance from a list-of-lists. Items in that list should be integers in the range [0-9]
where 0
represents a blank column:
from pyswip.examples.sudoku import Matrix
data = [
[0, 6, 0, 1, 0, 4, 0, 5, 0],
[0, 0, 8, 3, 0, 5, 6, 0, 0],
[2, 0, 0, 0, 0, 0, 0, 0, 1],
[8, 0, 0, 4, 0, 7, 0, 0, 6],
[0, 0, 6, 0, 0, 0, 3, 0, 0],
[7, 0, 0, 9, 0, 1, 0, 0, 4],
[5, 0, 0, 0, 0, 0, 0, 0, 2],
[0, 0, 7, 2, 0, 6, 9, 0, 0],
[0, 4, 0, 5, 0, 8, 0, 7, 0],
]
puzzle = Matrix(data)
Alternatively, a Matrix
instance can be created from a string. In this case, dot (.
) character represents a blank spot:
from pyswip.examples.sudoku import Matrix
text = """
. 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 .
"""
puzzle = Matrix.from_text(text)
Once a Matrix
instance is created, you can solve it using the solve
function (surprise!). It will return a solution Matrix
if there's a solution, otherwise False
:
from pyswip.examples.sudoku import solve
solution = solve(puzzle)
if solution:
print(solution)
else:
print("There's no solution")
You can retrieve the Prolog source that solves the puzzle using the prolog_source
function:
from pyswip.examples.sudoku import prolog_source
source = prolog_source()
print(source)
A sample puzzle is returned using sample_puzzle
function:
from pyswip.examples.sudoku import sample_puzzle
puzzle = sample_puzzle()
print(puzzle)