This has been a project I've been working on and off for a while. It's a pretty interesting problem as there is a pretty big batch of inference rules. I've only coded three (one of which I discovered was unnecessary in the presence of another), but it solves a pretty good number of puzzles you find in newspapers.
I'll post all of the code when I'm a bit further along, but here's an example of the output:
+--------------------------+--------------------------+--------------------------+
| - - - 1 2 - | - 2 3 - 2 3 | 1 - - 1 2 3 |
| 4 - - - - - 5 | - - - 4 - - 7 | 6 - - - - - - |
| - 8 9 - 8 9 | - 8 9 - 8 9 | - 8 9 - 8 9 |
| | | |
| - - - - 2 - - 2 - | - 2 3 - 2 3 | - - - - 2 3 |
| 4 - 6 - - - 4 - - | - 5 - 4 - - 1 | 7 - - - - - - |
| - 8 9 - 8 9 - - - | - 8 9 - 8 9 | - 8 9 - 8 9 |
| | | |
| - - - 1 2 - | - 2 - - 2 - | - 2 - |
| - - - - - - 3 | - - - 6 - - - | - - - 5 4 |
| 7 8 9 7 8 9 | - 8 9 - 8 9 | - 8 - |
+--------------------------+--------------------------+--------------------------+
| 1 - - | - - - 1 - - - - - | - - - - - - - - - |
| 2 3 4 - - | - 5 - - - - - 5 6 | 4 - - 4 - - - 5 - |
| 7 - - | 7 8 9 7 8 9 - 8 9 | - 8 - 7 8 9 7 8 9 |
| | | |
| - - - | - - - | - - - |
| - 5 - 6 8 | 4 - - - 3 | 1 2 - 5 - |
| 7 - 9 | 7 - 9 | 7 - 9 |
| | | |
| - - - 1 - - 1 - - | - 2 - 1 2 - - 2 - | - - - |
| 4 5 - - 5 - 4 - - | - 5 - - - - - 5 - | 4 - - 3 6 |
| 7 - 9 7 - 9 7 - - | 7 8 9 7 8 9 - 8 9 | - 8 - |
+--------------------------+--------------------------+--------------------------+
| - 2 - | - 2 3 - 2 - | - - - - 2 3 |
| 1 4 - - - | - - - 5 - - - | 9 - - 6 - - - |
| 7 - - | 7 8 - - 8 - | 7 8 - 7 8 - |
| | | |
| - - 3 - 2 - | - 2 3 - 2 - | - 2 3 - - - - 2 3 |
| - 5 - - 5 - 6 | 1 4 - - 4 - - | 4 - - 4 - - - - - |
| 7 8 - 7 8 - | 7 8 9 - 8 9 | - 8 - 7 8 - 7 8 - |
| | | |
| - - 3 - 2 - | - 2 3 - 2 - | 1 - - 1 2 3 |
| - - - - - - 9 | 6 4 - - 4 - - | 5 4 - - - - - |
| 7 8 - 7 8 - | 7 8 - - 8 - | 7 8 - 7 8 - |
+--------------------------+--------------------------+--------------------------+
Enter an option
0. Exit
1. Try to solve the puzzle
2. Print current contents
3. Print the state of a cell
4. Load a new sudoku file
Which one? 1
findSubsets(columns) has simplified the puzzle. Removing {8} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {9} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {2} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {8} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {9} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {5} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {8} at (2,6).
findSubsets(columns) has simplified the puzzle. Removing {4} at (7,6).
findSubsets(columns) has simplified the puzzle. Removing {8} at (7,6).
findSubsets(columns) has simplified the puzzle. Removing {2} at (7,6).
findSubsets(columns) has simplified the puzzle. Removing {7} at (6,7).
findSubsets(columns) has simplified the puzzle. Removing {8} at (6,7).
findSubsets(rows) has simplified the puzzle. Removing {4} at (1,0).
findSubsets(rows) has simplified the puzzle. Removing {8} at (1,0).
findSubsets(rows) has simplified the puzzle. Removing {9} at (1,0).
findSubsets(rows) has simplified the puzzle. Removing {2} at (1,3).
findSubsets(rows) has simplified the puzzle. Removing {3} at (1,3).
findSubsets(rows) has simplified the puzzle. Removing {8} at (1,3).
findSubsets(rows) has simplified the puzzle. Removing {9} at (1,3).
findSubsets(rows) has simplified the puzzle. Removing {8} at (2,0).
findSubsets(rows) has simplified the puzzle. Removing {9} at (2,0).
findSubsets(rows) has simplified the puzzle. Removing {2} at (2,1).
findSubsets(rows) has simplified the puzzle. Removing {8} at (2,1).
findSubsets(rows) has simplified the puzzle. Removing {9} at (2,1).
findSubsets(rows) has simplified the puzzle. Removing {7} at (2,1).
findSubsets(boxes) has simplified the puzzle . Eliminating {1} from (0,1).
findSubsets(boxes) has simplified the puzzle . Eliminating {5} from (3,3).
findSubsets(boxes) has simplified the puzzle . Eliminating {5} from (5,3).
findSubsets(boxes) has simplified the puzzle . Eliminating {4} from (3,7).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (3,7).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (3,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {3} from (6,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {3} from (7,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {3} from (8,8).
findSubsets(columns) has simplified the puzzle. Removing {7} at (4,0).
findSubsets(columns) has simplified the puzzle. Removing {7} at (5,0).
findSubsets(columns) has simplified the puzzle. Removing {7} at (7,0).
findSubsets(columns) has simplified the puzzle. Removing {7} at (8,0).
findSubsets(rows) has simplified the puzzle. Removing {2} at (2,3).
findSubsets(rows) has simplified the puzzle. Removing {2} at (2,5).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {2} at (6,3).
findSubsets(rows) has simplified the puzzle. Removing {7} at (6,3).
findSubsets(rows) has simplified the puzzle. Removing {8} at (6,3).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (0,3).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (0,3).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (0,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (0,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (1,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (1,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {5} from (4,8).
findSubsets(columns) has simplified the puzzle. Removing {2} at (5,3).
findSubsets(columns) has simplified the puzzle. Removing {3} at (0,3).
findSubsets(rows) has simplified the puzzle. Removing {9} at (4,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {2} from (0,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {2} from (1,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {7} from (3,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (3,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (3,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {7} from (5,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (5,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (5,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {1} from (5,4).
findSubsets(columns) has simplified the puzzle. Removing {5} at (5,0).
findSubsets(columns) has simplified the puzzle. Removing {5} at (7,0).
findSubsets(columns) has simplified the puzzle. Removing {8} at (0,0).
findSubsets(columns) has simplified the puzzle. Removing {3} at (7,4).
findSubsets(columns) has simplified the puzzle. Removing {4} at (7,4).
findSubsets(columns) has simplified the puzzle. Removing {3} at (8,4).
findSubsets(columns) has simplified the puzzle. Removing {4} at (8,4).
findSubsets(columns) has simplified the puzzle. Removing {2} at (7,4).
findSubsets(columns) has simplified the puzzle. Removing {2} at (8,4).
findSubsets(rows) has simplified the puzzle. Removing {1} at (3,2).
findSubsets(rows) has simplified the puzzle. Removing {5} at (5,1).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,1).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,7).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,8).
findSubsets(rows) has simplified the puzzle. Removing {2} at (7,1).
findSubsets(rows) has simplified the puzzle. Removing {7} at (7,1).
findSubsets(rows) has simplified the puzzle. Removing {3} at (7,0).
findSubsets(rows) has simplified the puzzle. Removing {8} at (8,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (8,1).
findSubsets(columns) has simplified the puzzle. Removing {1} at (5,1).
findSubsets(columns) has simplified the puzzle. Removing {4} at (5,2).
findSubsets(columns) has simplified the puzzle. Removing {7} at (5,2).
findSubsets(columns) has simplified the puzzle. Removing {7} at (8,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (8,5).
findSubsets(rows) has simplified the puzzle. Removing {8} at (8,7).
findSubsets(rows) has simplified the puzzle. Removing {8} at (8,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (6,5).
findSubsets(boxes) has simplified the puzzle . Eliminating {2} from (7,5).
findSubsets(boxes) has simplified the puzzle . Eliminating {2} from (8,5).
findSubsets(boxes) has simplified the puzzle . Eliminating {4} from (7,5).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (7,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {2} from (6,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {7} from (6,8).
findSubsets(columns) has simplified the puzzle. Removing {7} at (4,4).
findSubsets(columns) has simplified the puzzle. Removing {9} at (2,5).
findSubsets(columns) has simplified the puzzle. Removing {8} at (0,8).
findSubsets(columns) has simplified the puzzle. Removing {8} at (1,8).
findSubsets(rows) has simplified the puzzle. Removing {8} at (2,3).
findSubsets(rows) has simplified the puzzle. Removing {9} at (4,8).
findSubsets(rows) has simplified the puzzle. Removing {2} at (6,2).
findSubsets(rows) has simplified the puzzle. Removing {7} at (7,7).
findSubsets(rows) has simplified the puzzle. Removing {7} at (7,8).
findSubsets(rows) has simplified the puzzle. Removing {4} at (8,7).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (3,3).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (5,3).
findSubsets(boxes) has simplified the puzzle . Eliminating {7} from (3,7).
findSubsets(boxes) has simplified the puzzle . Eliminating {7} from (8,1).
findSubsets(boxes) has simplified the puzzle . Eliminating {2} from (8,8).
findSubsets(columns) has simplified the puzzle. Removing {2} at (0,1).
findSubsets(columns) has simplified the puzzle. Removing {2} at (1,1).
findSubsets(columns) has simplified the puzzle. Removing {9} at (5,1).
findSubsets(columns) has simplified the puzzle. Removing {4} at (1,2).
findSubsets(columns) has simplified the puzzle. Removing {7} at (3,2).
findSubsets(columns) has simplified the puzzle. Removing {8} at (0,7).
findSubsets(columns) has simplified the puzzle. Removing {9} at (0,7).
findSubsets(columns) has simplified the puzzle. Removing {9} at (1,7).
findSubsets(columns) has simplified the puzzle. Removing {1} at (8,7).
findSubsets(columns) has simplified the puzzle. Removing {7} at (8,8).
findSubsets(columns) has simplified the puzzle. Removing {2} at (0,8).
findSubsets(columns) has simplified the puzzle. Removing {2} at (1,8).
findSubsets(columns) has simplified the puzzle. Removing {1} at (0,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (0,1).
findSubsets(rows) has simplified the puzzle. Removing {8} at (1,1).
findSubsets(rows) has simplified the puzzle. Removing {9} at (1,8).
findSubsets(rows) has simplified the puzzle. Removing {3} at (1,4).
findSubsets(rows) has simplified the puzzle. Removing {4} at (3,6).
findSubsets(rows) has simplified the puzzle. Removing {8} at (3,3).
findSubsets(rows) has simplified the puzzle. Removing {7} at (5,3).
findSubsets(rows) has simplified the puzzle. Removing {8} at (5,6).
findSubsets(rows) has simplified the puzzle. Removing {4} at (5,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (0,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {4} from (0,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {3} from (0,8).
forceMove placing {4} at (0,0).
forceMove placing {2} at (1,2).
forceMove placing {7} at (6,2).
findSubsets(columns) has simplified the puzzle. Removing {8} at (1,0).
findSubsets(columns) has simplified the puzzle. Removing {9} at (1,0).
findSubsets(columns) has simplified the puzzle. Removing {8} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {9} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {2} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {8} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {9} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {5} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {8} at (2,6).
findSubsets(columns) has simplified the puzzle. Removing {4} at (7,6).
findSubsets(columns) has simplified the puzzle. Removing {8} at (7,6).
findSubsets(columns) has simplified the puzzle. Removing {2} at (7,6).
findSubsets(columns) has simplified the puzzle. Removing {8} at (6,7).
findSubsets(rows) has simplified the puzzle. Removing {8} at (1,3).
findSubsets(rows) has simplified the puzzle. Removing {9} at (1,3).
findSubsets(rows) has simplified the puzzle. Removing {8} at (1,4).
findSubsets(rows) has simplified the puzzle. Removing {9} at (1,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (1,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (1,8).
findSubsets(rows) has simplified the puzzle. Removing {3} at (1,4).
findSubsets(rows) has simplified the puzzle. Removing {3} at (1,3).
findSubsets(rows) has simplified the puzzle. Removing {8} at (2,0).
findSubsets(rows) has simplified the puzzle. Removing {9} at (2,0).
findSubsets(rows) has simplified the puzzle. Removing {8} at (2,1).
findSubsets(rows) has simplified the puzzle. Removing {9} at (2,1).
findSubsets(rows) has simplified the puzzle. Removing {7} at (2,1).
findSubsets(boxes) has simplified the puzzle . Eliminating {1} from (0,1).
findSubsets(boxes) has simplified the puzzle . Eliminating {2} from (0,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {3} from (0,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {1} from (5,1).
findSubsets(boxes) has simplified the puzzle . Eliminating {5} from (3,3).
findSubsets(boxes) has simplified the puzzle . Eliminating {5} from (5,3).
findSubsets(boxes) has simplified the puzzle . Eliminating {4} from (3,7).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (3,7).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (3,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {3} from (6,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {3} from (7,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {3} from (8,8).
findSubsets(columns) has simplified the puzzle. Removing {7} at (4,0).
findSubsets(columns) has simplified the puzzle. Removing {7} at (5,0).
findSubsets(columns) has simplified the puzzle. Removing {5} at (7,0).
findSubsets(columns) has simplified the puzzle. Removing {9} at (5,1).
findSubsets(columns) has simplified the puzzle. Removing {8} at (7,1).
findSubsets(columns) has simplified the puzzle. Removing {8} at (8,1).
findSubsets(columns) has simplified the puzzle. Removing {2} at (7,1).
findSubsets(columns) has simplified the puzzle. Removing {5} at (5,1).
findSubsets(rows) has simplified the puzzle. Removing {8} at (0,3).
findSubsets(rows) has simplified the puzzle. Removing {9} at (0,3).
findSubsets(rows) has simplified the puzzle. Removing {8} at (0,4).
findSubsets(rows) has simplified the puzzle. Removing {9} at (0,4).
findSubsets(rows) has simplified the puzzle. Removing {2} at (2,3).
findSubsets(rows) has simplified the puzzle. Removing {2} at (2,5).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (5,3).
findSubsets(rows) has simplified the puzzle. Removing {9} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {5} at (5,0).
findSubsets(rows) has simplified the puzzle. Removing {7} at (5,3).
findSubsets(rows) has simplified the puzzle. Removing {7} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {2} at (6,3).
findSubsets(rows) has simplified the puzzle. Removing {8} at (6,3).
findSubsets(rows) has simplified the puzzle. Removing {3} at (7,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,7).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,8).
findSubsets(rows) has simplified the puzzle. Removing {3} at (7,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (4,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {5} from (4,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (8,0).
findSubsets(columns) has simplified the puzzle. Removing {2} at (5,3).
findSubsets(columns) has simplified the puzzle. Removing {8} at (2,3).
findSubsets(columns) has simplified the puzzle. Removing {8} at (3,3).
findSubsets(columns) has simplified the puzzle. Removing {3} at (0,3).
findSubsets(columns) has simplified the puzzle. Removing {9} at (3,3).
findSubsets(rows) has simplified the puzzle. Removing {9} at (2,5).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,4).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,7).
findSubsets(rows) has simplified the puzzle. Removing {9} at (3,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (5,6).
findSubsets(rows) has simplified the puzzle. Removing {4} at (5,2).
findSubsets(rows) has simplified the puzzle. Removing {1} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {2} at (8,4).
findSubsets(rows) has simplified the puzzle. Removing {3} at (8,4).
findSubsets(rows) has simplified the puzzle. Removing {2} at (8,5).
findSubsets(rows) has simplified the puzzle. Removing {2} at (8,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {2} from (0,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {1} from (3,2).
findSubsets(boxes) has simplified the puzzle . Eliminating {7} from (4,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (3,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (4,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {4} from (3,6).
findSubsets(columns) has simplified the puzzle. Removing {4} at (7,4).
findSubsets(columns) has simplified the puzzle. Removing {4} at (8,4).
findSubsets(columns) has simplified the puzzle. Removing {9} at (7,4).
findSubsets(columns) has simplified the puzzle. Removing {2} at (7,4).
findSubsets(columns) has simplified the puzzle. Removing {7} at (8,4).
findSubsets(columns) has simplified the puzzle. Removing {8} at (6,5).
findSubsets(columns) has simplified the puzzle. Removing {8} at (8,5).
findSubsets(columns) has simplified the puzzle. Removing {2} at (7,5).
findSubsets(columns) has simplified the puzzle. Removing {4} at (7,5).
findSubsets(columns) has simplified the puzzle. Removing {8} at (0,7).
findSubsets(columns) has simplified the puzzle. Removing {9} at (0,7).
findSubsets(columns) has simplified the puzzle. Removing {8} at (8,7).
findSubsets(columns) has simplified the puzzle. Removing {9} at (1,7).
findSubsets(columns) has simplified the puzzle. Removing {1} at (8,7).
findSubsets(columns) has simplified the puzzle. Removing {7} at (7,8).
findSubsets(columns) has simplified the puzzle. Removing {7} at (8,8).
findSubsets(columns) has simplified the puzzle. Removing {2} at (6,8).
findSubsets(columns) has simplified the puzzle. Removing {8} at (0,8).
findSubsets(columns) has simplified the puzzle. Removing {8} at (8,8).
findSubsets(columns) has simplified the puzzle. Removing {1} at (0,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (0,1).
findSubsets(rows) has simplified the puzzle. Removing {8} at (1,1).
findSubsets(rows) has simplified the puzzle. Removing {7} at (7,7).
findSubsets(rows) has simplified the puzzle. Removing {4} at (8,7).
forceMove placing {8} at (0,1).
forceMove placing {9} at (1,1).
forceMove placing {8} at (1,7).
forceMove placing {3} at (1,8).
forceMove placing {7} at (2,0).
forceMove placing {1} at (2,1).
forceMove placing {2} at (2,6).
forceMove placing {6} at (6,7).
forceMove placing {2} at (8,1).
forceMove placing {6} at (1,0).
forceMove placing {5} at (1,3).
forceMove placing {4} at (1,4).
forceMove placing {5} at (7,1).
forceMove placing {7} at (5,1).
findSubsets(columns) has simplified the puzzle. Removing {8} at (3,3).
findSubsets(columns) has simplified the puzzle. Removing {9} at (3,3).
findSubsets(columns) has simplified the puzzle. Removing {8} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {9} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {2} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {8} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {9} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {5} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {4} at (7,6).
findSubsets(columns) has simplified the puzzle. Removing {8} at (7,6).
findSubsets(rows) has simplified the puzzle. Removing {9} at (0,3).
findSubsets(rows) has simplified the puzzle. Removing {9} at (0,4).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,4).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,7).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {8} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (5,3).
findSubsets(rows) has simplified the puzzle. Removing {9} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {5} at (5,0).
findSubsets(rows) has simplified the puzzle. Removing {2} at (6,3).
findSubsets(rows) has simplified the puzzle. Removing {8} at (6,3).
findSubsets(rows) has simplified the puzzle. Removing {3} at (7,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,8).
findSubsets(rows) has simplified the puzzle. Removing {3} at (7,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (4,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {7} from (4,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (3,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {4} from (3,7).
findSubsets(boxes) has simplified the puzzle . Eliminating {5} from (4,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (4,8).
findSubsets(columns) has simplified the puzzle. Removing {8} at (8,0).
findSubsets(columns) has simplified the puzzle. Removing {2} at (5,3).
findSubsets(columns) has simplified the puzzle. Removing {8} at (2,3).
findSubsets(columns) has simplified the puzzle. Removing {3} at (0,3).
findSubsets(columns) has simplified the puzzle. Removing {1} at (8,7).
findSubsets(columns) has simplified the puzzle. Removing {9} at (0,7).
findSubsets(columns) has simplified the puzzle. Removing {7} at (7,8).
findSubsets(columns) has simplified the puzzle. Removing {7} at (8,8).
findSubsets(columns) has simplified the puzzle. Removing {2} at (6,8).
findSubsets(columns) has simplified the puzzle. Removing {8} at (8,8).
findSubsets(columns) has simplified the puzzle. Removing {1} at (0,8).
findSubsets(rows) has simplified the puzzle. Removing {2} at (0,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (5,6).
findSubsets(rows) has simplified the puzzle. Removing {4} at (5,2).
findSubsets(rows) has simplified the puzzle. Removing {1} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (6,5).
findSubsets(rows) has simplified the puzzle. Removing {2} at (7,4).
findSubsets(rows) has simplified the puzzle. Removing {2} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {3} at (8,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (2,5).
findSubsets(boxes) has simplified the puzzle . Eliminating {1} from (3,2).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (3,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {4} from (3,6).
findSubsets(columns) has simplified the puzzle. Removing {9} at (7,4).
findSubsets(columns) has simplified the puzzle. Removing {7} at (8,4).
findSubsets(columns) has simplified the puzzle. Removing {8} at (8,5).
findSubsets(columns) has simplified the puzzle. Removing {4} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {7} at (7,7).
findSubsets(rows) has simplified the puzzle. Removing {4} at (8,7).
forceMove placing {2} at (0,3).
findSubsets(columns) has simplified the puzzle. Removing {8} at (3,3).
findSubsets(columns) has simplified the puzzle. Removing {9} at (3,3).
findSubsets(columns) has simplified the puzzle. Removing {8} at (6,3).
findSubsets(columns) has simplified the puzzle. Removing {8} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {9} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {2} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {8} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {9} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {5} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {4} at (7,6).
findSubsets(columns) has simplified the puzzle. Removing {8} at (7,6).
findSubsets(rows) has simplified the puzzle. Removing {9} at (0,4).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,4).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,7).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {8} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (5,3).
findSubsets(rows) has simplified the puzzle. Removing {9} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {5} at (5,0).
findSubsets(rows) has simplified the puzzle. Removing {8} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (5,6).
findSubsets(rows) has simplified the puzzle. Removing {4} at (5,2).
findSubsets(rows) has simplified the puzzle. Removing {1} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {3} at (7,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,8).
findSubsets(rows) has simplified the puzzle. Removing {3} at (7,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {1} from (3,2).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (4,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {7} from (4,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (3,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (3,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {4} from (3,7).
findSubsets(boxes) has simplified the puzzle . Eliminating {5} from (4,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (4,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {4} from (3,6).
findSubsets(columns) has simplified the puzzle. Removing {8} at (8,0).
findSubsets(columns) has simplified the puzzle. Removing {8} at (2,3).
findSubsets(columns) has simplified the puzzle. Removing {3} at (8,4).
findSubsets(columns) has simplified the puzzle. Removing {9} at (7,4).
findSubsets(columns) has simplified the puzzle. Removing {2} at (7,4).
findSubsets(columns) has simplified the puzzle. Removing {7} at (8,4).
findSubsets(columns) has simplified the puzzle. Removing {1} at (8,7).
findSubsets(columns) has simplified the puzzle. Removing {9} at (0,7).
findSubsets(columns) has simplified the puzzle. Removing {7} at (7,8).
findSubsets(columns) has simplified the puzzle. Removing {7} at (8,8).
findSubsets(columns) has simplified the puzzle. Removing {2} at (6,8).
findSubsets(columns) has simplified the puzzle. Removing {8} at (8,8).
findSubsets(columns) has simplified the puzzle. Removing {1} at (0,8).
findSubsets(rows) has simplified the puzzle. Removing {8} at (6,5).
findSubsets(rows) has simplified the puzzle. Removing {7} at (7,7).
findSubsets(rows) has simplified the puzzle. Removing {4} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {2} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {8} at (8,5).
findSubsets(rows) has simplified the puzzle. Removing {4} at (8,7).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (2,5).
forceMove placing {3} at (0,4).
findSubsets(columns) has simplified the puzzle. Removing {8} at (3,3).
findSubsets(columns) has simplified the puzzle. Removing {9} at (3,3).
findSubsets(columns) has simplified the puzzle. Removing {8} at (6,3).
findSubsets(columns) has simplified the puzzle. Removing {8} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {9} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {2} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {8} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {9} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {5} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {4} at (7,6).
findSubsets(columns) has simplified the puzzle. Removing {8} at (7,6).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,4).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,7).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {8} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (5,3).
findSubsets(rows) has simplified the puzzle. Removing {9} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {5} at (5,0).
findSubsets(rows) has simplified the puzzle. Removing {8} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (5,6).
findSubsets(rows) has simplified the puzzle. Removing {4} at (5,2).
findSubsets(rows) has simplified the puzzle. Removing {1} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,8).
findSubsets(rows) has simplified the puzzle. Removing {3} at (7,0).
findSubsets(rows) has simplified the puzzle. Removing {8} at (8,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {1} from (3,2).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (4,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {7} from (4,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (3,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (3,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {4} from (3,7).
findSubsets(boxes) has simplified the puzzle . Eliminating {5} from (4,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (4,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {4} from (3,6).
findSubsets(columns) has simplified the puzzle. Removing {8} at (2,3).
findSubsets(columns) has simplified the puzzle. Removing {9} at (7,4).
findSubsets(columns) has simplified the puzzle. Removing {2} at (7,4).
findSubsets(columns) has simplified the puzzle. Removing {7} at (8,4).
findSubsets(columns) has simplified the puzzle. Removing {1} at (8,7).
findSubsets(columns) has simplified the puzzle. Removing {9} at (0,7).
findSubsets(columns) has simplified the puzzle. Removing {7} at (7,8).
findSubsets(columns) has simplified the puzzle. Removing {7} at (8,8).
findSubsets(columns) has simplified the puzzle. Removing {2} at (6,8).
findSubsets(columns) has simplified the puzzle. Removing {8} at (8,8).
findSubsets(columns) has simplified the puzzle. Removing {1} at (0,8).
findSubsets(rows) has simplified the puzzle. Removing {8} at (6,5).
findSubsets(rows) has simplified the puzzle. Removing {7} at (7,7).
findSubsets(rows) has simplified the puzzle. Removing {4} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {2} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {8} at (8,5).
findSubsets(rows) has simplified the puzzle. Removing {4} at (8,7).
findSubsets(columns) has simplified the puzzle. Removing {9} at (2,5).
forceMove placing {1} at (0,7).
forceMove placing {9} at (0,8).
findSubsets(columns) has simplified the puzzle. Removing {8} at (3,3).
findSubsets(columns) has simplified the puzzle. Removing {9} at (3,3).
findSubsets(columns) has simplified the puzzle. Removing {8} at (6,3).
findSubsets(columns) has simplified the puzzle. Removing {8} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {9} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {2} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {8} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {9} at (5,5).
findSubsets(columns) has simplified the puzzle. Removing {5} at (3,5).
findSubsets(columns) has simplified the puzzle. Removing {4} at (7,6).
findSubsets(columns) has simplified the puzzle. Removing {8} at (7,6).
findSubsets(columns) has simplified the puzzle. Removing {4} at (3,7).
findSubsets(columns) has simplified the puzzle. Removing {7} at (3,7).
findSubsets(columns) has simplified the puzzle. Removing {7} at (8,8).
findSubsets(columns) has simplified the puzzle. Removing {8} at (8,8).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,4).
findSubsets(rows) has simplified the puzzle. Removing {7} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (3,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (3,8).
findSubsets(rows) has simplified the puzzle. Removing {9} at (5,3).
findSubsets(rows) has simplified the puzzle. Removing {9} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {5} at (5,0).
findSubsets(rows) has simplified the puzzle. Removing {8} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (5,6).
findSubsets(rows) has simplified the puzzle. Removing {4} at (5,2).
findSubsets(rows) has simplified the puzzle. Removing {1} at (5,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {8} at (7,8).
findSubsets(rows) has simplified the puzzle. Removing {3} at (7,0).
findSubsets(rows) has simplified the puzzle. Removing {8} at (8,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {1} from (3,2).
findSubsets(boxes) has simplified the puzzle . Eliminating {9} from (4,0).
findSubsets(boxes) has simplified the puzzle . Eliminating {7} from (4,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {8} from (3,4).
findSubsets(boxes) has simplified the puzzle . Eliminating {5} from (4,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {4} from (3,6).
findSubsets(boxes) has simplified the puzzle . Eliminating {7} from (7,8).
findSubsets(boxes) has simplified the puzzle . Eliminating {2} from (6,8).
findSubsets(columns) has simplified the puzzle. Removing {8} at (2,3).
findSubsets(columns) has simplified the puzzle. Removing {9} at (7,4).
findSubsets(columns) has simplified the puzzle. Removing {2} at (7,4).
findSubsets(columns) has simplified the puzzle. Removing {7} at (8,4).
findSubsets(rows) has simplified the puzzle. Removing {8} at (6,5).
findSubsets(rows) has simplified the puzzle. Removing {7} at (7,7).
findSubsets(rows) has simplified the puzzle. Removing {4} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {2} at (7,5).
findSubsets(rows) has simplified the puzzle. Removing {8} at (8,5).
findSubsets(rows) has simplified the puzzle. Removing {4} at (8,7).
findSubsets(columns) has simplified the puzzle. Removing {9} at (2,5).
forceMove placing {9} at (2,3).
forceMove placing {8} at (2,5).
forceMove placing {8} at (5,3).
forceMove placing {4} at (5,6).
forceMove placing {3} at (6,3).
forceMove placing {2} at (6,5).
forceMove placing {8} at (6,8).
forceMove placing {3} at (7,6).
forceMove placing {4} at (8,5).
forceMove placing {7} at (8,7).
forceMove placing {1} at (8,8).
forceMove placing {7} at (3,3).
forceMove placing {8} at (3,6).
forceMove placing {9} at (3,7).
forceMove placing {5} at (3,8).
forceMove placing {9} at (4,4).
forceMove placing {7} at (4,8).
forceMove placing {1} at (5,2).
forceMove placing {2} at (5,4).
forceMove placing {5} at (5,5).
forceMove placing {8} at (7,0).
forceMove placing {7} at (7,4).
forceMove placing {9} at (7,5).
forceMove placing {4} at (7,7).
forceMove placing {2} at (7,8).
forceMove placing {3} at (8,0).
forceMove placing {8} at (8,4).
forceMove placing {4} at (3,2).
forceMove placing {1} at (3,4).
forceMove placing {6} at (3,5).
forceMove placing {5} at (4,0).
forceMove placing {9} at (5,0).
Enter an option
0. Exit
1. Try to solve the puzzle
2. Print current contents
3. Print the state of a cell
4. Load a new sudoku file
Which one? 2
+--------------------------+--------------------------+--------------------------+
| | | |
| 4 8 5 | 2 3 7 | 6 1 9 |
| | | |
| | | |
| | | |
| 6 9 2 | 5 4 1 | 7 8 3 |
| | | |
| | | |
| | | |
| 7 1 3 | 9 6 8 | 2 5 4 |
| | | |
+--------------------------+--------------------------+--------------------------+
| | | |
| 2 3 4 | 7 1 6 | 8 9 5 |
| | | |
| | | |
| | | |
| 5 6 8 | 4 9 3 | 1 2 7 |
| | | |
| | | |
| | | |
| 9 7 1 | 8 2 5 | 4 3 6 |
| | | |
+--------------------------+--------------------------+--------------------------+
| | | |
| 1 4 7 | 3 5 2 | 9 6 8 |
| | | |
| | | |
| | | |
| 8 5 6 | 1 7 9 | 3 4 2 |
| | | |
| | | |
| | | |
| 3 2 9 | 6 8 4 | 5 7 1 |
| | | |
+--------------------------+--------------------------+--------------------------+