https://github.com/chanioxaris/kenken-solver
Solves KenKen puzzles, by representing it as a Constraint Satisfaction Problem (CSP)
https://github.com/chanioxaris/kenken-solver
aima-book arc-consistency artificial-intelligence backtracking board constraint-satisfaction-problem constraints csp csp-solver forward-checking kenken minimum-remaining-values puzzle solver
Last synced: 4 days ago
JSON representation
Solves KenKen puzzles, by representing it as a Constraint Satisfaction Problem (CSP)
- Host: GitHub
- URL: https://github.com/chanioxaris/kenken-solver
- Owner: chanioxaris
- License: mit
- Created: 2017-07-11T11:07:32.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2019-03-25T14:51:04.000Z (over 6 years ago)
- Last Synced: 2025-04-30T08:58:52.612Z (2 months ago)
- Topics: aima-book, arc-consistency, artificial-intelligence, backtracking, board, constraint-satisfaction-problem, constraints, csp, csp-solver, forward-checking, kenken, minimum-remaining-values, puzzle, solver
- Language: Python
- Homepage:
- Size: 139 KB
- Stars: 20
- Watchers: 1
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
## Overview
A program in Python 3.6 that solves [KenKen puzzles](https://en.wikipedia.org/wiki/KenKen), by representing the game as a Constraint Satisfaction Problem (CSP).
## Puzzle representation
### Board
The KenKen board is represented by a square n-by-n grid of cells. The grid may contain between 1 and n boxes (cages) represented by a heavily outlined perimeter. Each cage will contain in superscript: the target digit value for the cage followed by a mathematical operator.
### Constraints
Each valid solution must follow the below rules:
- The only numbers you may write are 1 to N for a NxN size puzzle.
- A number cannot be reapeated within the same row.
- A number cannot be reapeated within the same solumn.
- In a one-cell cage, just write the target number in that cell.
- Each "cage" (region bounded by a heavy border) contains a "target number" and an arithmetic operation. You must fill that cage with numbers that produce the target number, using only the specified arithmetic operation. Numbers may be repeated within a cage, if necessary, as long as they do not repeat within a single row or column.### Input file
The input format of text file, used to describe a puzzle is:
```
Puzzle_size
[Square_indexes1] Cage_operator1 Cage_target1
[Square_indexes2] Cage_operator2 Cage_target2
[Square_indexes3] Cage_operator3 Cage_target3
...
[Square_indexesM] Cage_operatorM Cage_targetM
```
For example, the text representing the above puzzle is:
```
6
[(0,0),(1,0)] add 11
[(0,1),(0,2)] div 2
[(0,3),(1,3)] mult 20
[(0,4),(0,5),(1,5),(2,5)] mult 6
[(1,1),(1,2)] sub 3
[(1,4),(2,4)] div 3
[(2,0),(2,1),(3,0),(3,1)] mult 240
[(2,2),(2,3)] mult 6
[(3,2),(4,2)] mult 6
[(3,3),(4,3),(4,4)] add 7
[(3,4),(3,5)] mult 30
[(4,0),(4,1)] mult 6
[(4,5),(5,5)] add 9
[(5,0),(5,1),(5,2)] add 8
[(5,3),(5,4)] div 2
```## Algorithms
### Algorithms information
You can select among 5 algorithms to solve a puzzle. These are:
- Backtracking (command line parameter "BT").
- Backtracking with Minimum remaining values (command line parameter "BT+MRV").
- Forward checking (command line parameter "FC").
- Forward checking with Minimum remaining values (command line parameter "FC+MRV").
- Maintaining arc consistency (command line parameter "MAC").### Algorithms comparison
The below table represents the number of assigments used from each algorithm, to solve different size puzzles.
| Size | BT | BT+MRV | FC | FC+MRV | MAC |
| :----: | :----: | :----: | :----: | :----: | :----: |
| 3x3 | 10 | 10 | 9 | 11 | 9 |
| 4x4 | 33 | 24 | 26 | 18 | 19 |
| 5x5 | 89 | 55 | 42 | 33 | 26 |
| 6x6 | 947 | 215 | 48 | 68 | 73 |
| 7x7 | 2600 | 957 | 278 | 320 | 66 |## Usage
For windows based systems
`python kenken.py [input file] [algorithm]`For linux bases systems
`py kenken.py [input file] [algorithm]`## References
[Artificial Intelligence: A Modern Approach](http://aima.cs.berkeley.edu/)
[aima-python](https://github.com/aimacode/aima-python)