Sudoku solver
I've created a Sudoku Solver, somewhere around 2005. The intention was to solve this puzzle using logic and not using brute force.
We're using only a few rules, so we might not be able to solve all your puzzles. Will you let me know how if we're unable to solve one, but you've managed to do it yourself?
Used logic:
- #
- Description
- 1
-
We exclude possibilities based on already known numbers in the grid.
- 2
-
We might found some answers using this exclusion of numbers. We can just fill them in now.
- 3
-
When viewing a whole row or column, we might find a number that can only be placed at one spot. It is certain that we need to place it there.
- 4
-
If we can determine that a number can only be placed in one row or one column of a block, we can exclude this number in the same row or column in other blocks.
Example:
<tr><td class="row">1</td><td class="s1 r0 c0 n3">3</td><td class="s0 r0 c1 n0">0</td><td class="s0 r0 c2 n0">0</td><td class="s0 r0 c3 n0">0</td><td class="s0 r0 c4 n0">0</td><td class="s0 r0 c5 n0">0</td><td class="s0 r0 c6 n0">0</td><td class="s0 r0 c7 n0">0</td><td class="s0 r0 c8 n0">0</td></tr><tr><td class="row">2</td><td class="s1 r1 c0 n0">0</td><td class="s0 r1 c1 n0">0</td><td class="s0 r1 c2 n0">0</td><td class="s0 r1 c3 n0">0</td><td class="s0 r1 c4 n0">0</td><td class="s0 r1 c5 n0">0</td><td class="s0 r1 c6 n0">0</td><td class="s0 r1 c7 n0">0</td><td class="s0 r1 c8 n0">0</td></tr><tr><td class="row">3</td><td class="s1 r2 c0 n0">0</td><td class="s0 r2 c1 n0">0</td><td class="s0 r2 c2 n0">0</td><td class="s0 r2 c3 n0">0</td><td class="s0 r2 c4 n0">0</td><td class="s0 r2 c5 n0">0</td><td class="s0 r2 c6 n0">0</td><td class="s0 r2 c7 n0">0</td><td class="s0 r2 c8 n0">0</td></tr><tr><td class="row">4</td><td class="s1 r3 c0 n0">0</td><td class="s4 r3 c1 n0">0</td><td class="s4 r3 c2 n0">0</td><td class="s0 r3 c3 n0">0</td><td class="s0 r3 c4 n0">0</td><td class="s0 r3 c5 n0">0</td><td class="s0 r3 c6 n0">0</td><td class="s0 r3 c7 n0">0</td><td class="s0 r3 c8 n0">0</td></tr><tr><td class="row">5</td><td class="s1 r4 c0 n0">0</td><td class="s4 r4 c1 n0">0</td><td class="s4 r4 c2 n0">0</td><td class="s0 r4 c3 n0">0</td><td class="s0 r4 c4 n0">0</td><td class="s0 r4 c5 n0">0</td><td class="s0 r4 c6 n0">0</td><td class="s0 r4 c7 n0">0</td><td class="s0 r4 c8 n0">0</td></tr><tr><td class="row">6</td><td class="s1 r5 c0 n0">0</td><td class="s4 r5 c1 n0">0</td><td class="s4 r5 c2 n0">0</td><td class="s0 r5 c3 n0">0</td><td class="s0 r5 c4 n0">0</td><td class="s0 r5 c5 n0">0</td><td class="s0 r5 c6 n0">0</td><td class="s0 r5 c7 n0">0</td><td class="s0 r5 c8 n0">0</td></tr><tr><td class="row">7</td><td class="s1 r6 c0 n0">0</td><td class="s0 r6 c1 n7">7</td><td class="s4 r6 c2 n0">0</td><td class="s0 r6 c3 n2">2</td><td class="s0 r6 c4 n1">1</td><td class="s0 r6 c5 n5">5</td><td class="s0 r6 c6 n0">0</td><td class="s0 r6 c7 n0">0</td><td class="s0 r6 c8 n0">0</td></tr><tr><td class="row">8</td><td class="s1 r7 c0 n0">0</td><td class="s4 r7 c1 n0">0</td><td class="s4 r7 c2 n0">0</td><td class="s3 r7 c3 n0">0</td><td class="s3 r7 c4 n0">0</td><td class="s3 r7 c5 n0">0</td><td class="s0 r7 c6 n0">0</td><td class="s0 r7 c7 n0">0</td><td class="s0 r7 c8 n0">0</td></tr><tr><td class="row">9</td><td class="s1 r8 c0 n0">0</td><td class="s0 r8 c1 n6">6</td><td class="s4 r8 c2 n0">0</td><td class="s0 r8 c3 n9">9</td><td class="s0 r8 c4 n8">8</td><td class="s0 r8 c5 n7">7</td><td class="s0 r8 c6 n0">0</td><td class="s0 r8 c7 n0">0</td><td class="s0 r8 c8 n0">0</td></tr>1 2 3 4 5 6 7 8 9 → <tr><td class="row">1</td><td class="s1 r0 c0 n3">3</td><td class="s0 r0 c1 n0">0</td><td class="s0 r0 c2 n0">0</td><td class="s0 r0 c3 n0">0</td><td class="s0 r0 c4 n0">0</td><td class="s0 r0 c5 n0">0</td><td class="s0 r0 c6 n0">0</td><td class="s0 r0 c7 n0">0</td><td class="s0 r0 c8 n0">0</td></tr><tr><td class="row">2</td><td class="s1 r1 c0 n0">0</td><td class="s0 r1 c1 n0">0</td><td class="s0 r1 c2 n0">0</td><td class="s0 r1 c3 n0">0</td><td class="s0 r1 c4 n0">0</td><td class="s0 r1 c5 n0">0</td><td class="s0 r1 c6 n0">0</td><td class="s0 r1 c7 n0">0</td><td class="s0 r1 c8 n0">0</td></tr><tr><td class="row">3</td><td class="s1 r2 c0 n0">0</td><td class="s0 r2 c1 n0">0</td><td class="s0 r2 c2 n0">0</td><td class="s0 r2 c3 n0">0</td><td class="s0 r2 c4 n0">0</td><td class="s0 r2 c5 n0">0</td><td class="s0 r2 c6 n0">0</td><td class="s0 r2 c7 n0">0</td><td class="s0 r2 c8 n0">0</td></tr><tr><td class="row">4</td><td class="s1 r3 c0 n0">0</td><td class="s4 r3 c1 n0">0</td><td class="s0 r3 c2 n0">0</td><td class="s0 r3 c3 n0">0</td><td class="s0 r3 c4 n0">0</td><td class="s0 r3 c5 n0">0</td><td class="s0 r3 c6 n0">0</td><td class="s0 r3 c7 n0">0</td><td class="s0 r3 c8 n0">0</td></tr><tr><td class="row">5</td><td class="s1 r4 c0 n0">0</td><td class="s4 r4 c1 n0">0</td><td class="s0 r4 c2 n0">0</td><td class="s0 r4 c3 n0">0</td><td class="s0 r4 c4 n0">0</td><td class="s0 r4 c5 n0">0</td><td class="s0 r4 c6 n0">0</td><td class="s0 r4 c7 n0">0</td><td class="s0 r4 c8 n0">0</td></tr><tr><td class="row">6</td><td class="s1 r5 c0 n0">0</td><td class="s4 r5 c1 n0">0</td><td class="s0 r5 c2 n0">0</td><td class="s0 r5 c3 n0">0</td><td class="s0 r5 c4 n0">0</td><td class="s0 r5 c5 n0">0</td><td class="s0 r5 c6 n0">0</td><td class="s0 r5 c7 n0">0</td><td class="s0 r5 c8 n0">0</td></tr><tr><td class="row">7</td><td class="s1 r6 c0 n0">0</td><td class="s0 r6 c1 n7">7</td><td class="s4 r6 c2 n0">0</td><td class="s0 r6 c3 n2">2</td><td class="s0 r6 c4 n1">1</td><td class="s0 r6 c5 n5">5</td><td class="s0 r6 c6 n0">0</td><td class="s0 r6 c7 n0">0</td><td class="s0 r6 c8 n0">0</td></tr><tr><td class="row">8</td><td class="s1 r7 c0 n0">0</td><td class="s0 r7 c1 n0">0</td><td class="s0 r7 c2 n0">0</td><td class="s3 r7 c3 n0">0</td><td class="s3 r7 c4 n0">0</td><td class="s3 r7 c5 n0">0</td><td class="s0 r7 c6 n0">0</td><td class="s0 r7 c7 n0">0</td><td class="s0 r7 c8 n0">0</td></tr><tr><td class="row">9</td><td class="s1 r8 c0 n0">0</td><td class="s0 r8 c1 n6">6</td><td class="s4 r8 c2 n0">0</td><td class="s0 r8 c3 n9">9</td><td class="s0 r8 c4 n8">8</td><td class="s0 r8 c5 n7">7</td><td class="s0 r8 c6 n0">0</td><td class="s0 r8 c7 n0">0</td><td class="s0 r8 c8 n0">0</td></tr>1 2 3 4 5 6 7 8 9 In column 1 we've found a 3, making columns 2 and 3 the only available spaces for a 3 in these blocks. Since we know a 3 should be placed in columns 4,5 or 6 of row 8, we can exclude this row from the other blocks. We know that this number should be in these columns, because we cannot place it anywhere else in this block.
Using exclusion we've found number 3 can only be placed in column 3 of the bottom block, making this column unavailable for the block above.
- 5
-
In some cases, two numbers can only be placed in two spaces, thus making these spaces not available for any other number.
Example:
<tr><td class="row">1</td><td class="s0 r0 c0 n0">0</td><td class="s0 r0 c1 n0">0</td><td class="s0 r0 c2 n0">0</td><td class="s1 r0 c3 n2">2</td><td class="s0 r0 c4 n0">0</td><td class="s0 r0 c5 n0">0</td><td class="s0 r0 c6 n0">0</td><td class="s0 r0 c7 n0">0</td><td class="s0 r0 c8 n0">0</td></tr><tr><td class="row">2</td><td class="s0 r1 c0 n0">0</td><td class="s0 r1 c1 n0">0</td><td class="s0 r1 c2 n0">0</td><td class="s1 r1 c3 n0">0</td><td class="s0 r1 c4 n0">0</td><td class="s0 r1 c5 n0">0</td><td class="s0 r1 c6 n0">0</td><td class="s0 r1 c7 n0">0</td><td class="s0 r1 c8 n0">0</td></tr><tr><td class="row">3</td><td class="s0 r2 c0 n0">0</td><td class="s0 r2 c1 n0">0</td><td class="s0 r2 c2 n0">0</td><td class="s1 r2 c3 n0">0</td><td class="s0 r2 c4 n0">0</td><td class="s0 r2 c5 n0">0</td><td class="s0 r2 c6 n0">0</td><td class="s0 r2 c7 n0">0</td><td class="s0 r2 c8 n0">0</td></tr><tr><td class="row">4</td><td class="s0 r3 c0 n0">0</td><td class="s0 r3 c1 n0">0</td><td class="s0 r3 c2 n0">0</td><td class="s1 r3 c3 n0">0</td><td class="s2 r3 c4 n0">0</td><td class="s0 r3 c5 n9">9</td><td class="s0 r3 c6 n0">0</td><td class="s0 r3 c7 n0">0</td><td class="s0 r3 c8 n0">0</td></tr><tr><td class="row">5</td><td class="s0 r4 c0 n0">0</td><td class="s0 r4 c1 n0">0</td><td class="s0 r4 c2 n0">0</td><td class="s1 r4 c3 n0">0</td><td class="s0 r4 c4 n3">3</td><td class="s2 r4 c5 n0">0</td><td class="s0 r4 c6 n0">0</td><td class="s0 r4 c7 n0">0</td><td class="s0 r4 c8 n0">0</td></tr><tr><td class="row">6</td><td class="s1 r5 c0 n0">0</td><td class="s1 r5 c1 n4">4</td><td class="s1 r5 c2 n0">0</td><td class="s1 r5 c3 n0">0</td><td class="s1 r5 c4 n0">0</td><td class="s1 r5 c5 n0">0</td><td class="s1 r5 c6 n0">0</td><td class="s1 r5 c7 n2">2</td><td class="s1 r5 c8 n0">0</td></tr><tr><td class="row">7</td><td class="s0 r6 c0 n0">0</td><td class="s0 r6 c1 n0">0</td><td class="s0 r6 c2 n0">0</td><td class="s1 r6 c3 n0">0</td><td class="s0 r6 c4 n0">0</td><td class="s0 r6 c5 n0">0</td><td class="s0 r6 c6 n0">0</td><td class="s0 r6 c7 n0">0</td><td class="s0 r6 c8 n0">0</td></tr><tr><td class="row">8</td><td class="s0 r7 c0 n0">0</td><td class="s0 r7 c1 n0">0</td><td class="s0 r7 c2 n0">0</td><td class="s1 r7 c3 n4">4</td><td class="s0 r7 c4 n0">0</td><td class="s0 r7 c5 n0">0</td><td class="s0 r7 c6 n0">0</td><td class="s0 r7 c7 n0">0</td><td class="s0 r7 c8 n0">0</td></tr><tr><td class="row">9</td><td class="s0 r8 c0 n0">0</td><td class="s0 r8 c1 n0">0</td><td class="s0 r8 c2 n0">0</td><td class="s1 r8 c3 n0">0</td><td class="s0 r8 c4 n0">0</td><td class="s0 r8 c5 n0">0</td><td class="s0 r8 c6 n0">0</td><td class="s0 r8 c7 n0">0</td><td class="s0 r8 c8 n0">0</td></tr>1 2 3 4 5 6 7 8 9 Row 4 and column 6 contain a 2 and a 4. The positions row 4 column 5 and row 5 column 6 need to either contain a 2 or a 4, making these positions unavailable for any other number.

