Help for Weekly Unsolvable #324

Post the puzzle or solving technique that's causing you trouble and someone will help

Re: Help for Weekly Unsolvable #324

Postby SpAce » Mon Dec 10, 2018 3:25 am

RSW wrote:If you're going to use T&E then I don't see any particular problem in deciding how to go about it.

Well, it's of course a simple programming problem (unless you want to fully optimize it), but I was talking about human solving. There it pays off to make the guesses as educated as possible, because no one wants to run a zillion trials manually (especially on paper).

Once you've exhausted all logical solution techniques, just pick a cell with the fewest candidates

Or a unit with the fewest possible cells for a digit? I did consider candidates with bilocation strong-links too, but they didn't seem as potential in this case (turns out they weren't either). Even though I was using a software helper for this exercise, I made some mental predictions about the potential before picking the candidates to test. When a program runs those tests, it doesn't have to be so picky of course, and it's probably more efficient to use very simple heuristics like that. For a human solver it's different, because the actual testing can be very tedious. Based on your output, my manual picking did result in fewer trials, but perhaps I was just lucky.

and then continue on under the assumption that you've made the correct choice (using the full set of logical techniques again) until one of the following happens:
1. Puzzle solved. You're done!

I'm not! I'm not done if I happen to hit a backdoor and find a solution. How would you document that as a proof? Even if using T&E, I'd like to be able to produce a solve path that proves the solution via a set of proven eliminations. Yes, someone can argue that a solved grid is a proof too, but it's just not the same. Here's an example of a puzzle where I found a backdoor accidentally while looking for chains (pure pencil&paper solving), but it really didn't make me happy. In the end I went back and solved the rest of it with actual elimination steps, too, because it just wasn't a satisfying finish otherwise. With a super-hard puzzle I might reconsider that position.

Also, as others have mentioned, that's not where you want to stop if you want to prove the uniqueness of the solution. Of course that has any practical meaning for software solving only. Obviously you can't use any uniqueness techniques (except some special cases) then either (which would be pretty dumb from a manual solver's point of view). If you know beforehand that the puzzle has a unique solution (which is all I would manually solve), then this point is meaningless of course.

One more thing. I wouldn't call it T&E if you accept a found solution and stop at that. In my books that term only applies when you're hunting for contradictions, i.e. errors, which prove a choice wrong. Otherwise it's Trial&Success, or lucky guessing :) It's a subtle distinction, but I think that's how T&E is usually defined on this forum (or maybe I've just bought someone's propaganda).

2. Reached a contradiction, so go back to the last cell that you guessed and try a different guess.
3. Reached another impasse without solving the puzzle. So, guess the value of another cell and continue.

Yes, this is the trivial backtracking algorithm, and as such it does apply to manual T&E as well. My real question is about finding good heuristics for picking the tested candidates (or combinations of them) to make the process as manually-applicable as possible. There's no point in trying to mimic a software solver's brute force algorithm manually (unless, of course, it happens to have excellent heuristics).

## All Logic Strategies exhausted at top level. Starting new branch level 1.
## Choosing cell having fewest candidates: r5c3: [5,6]
## Level 1, trying r5c3=5: Leads to contradiction. Backtracking...

How did it find a contradiction? I ran my tests with the SudokuWiki solver and even its full technique set (including krakens) couldn't find a direct contradiction with 5r5c3 when tried as the first candidate. (It's possible with a a nested guess, but I rather tried the other bivalue cell which worked directly). Did your program use a nested guess to find the contradiction? If so, I think it should be shown in the output. If not, then what kind of a technique set does your program use to test those paths? In any case, I think it would be valuable information to show how complicated those trial steps were. This doesn't really tell us anything what happened behind the scenes (it's just a blackbox brute-force move).

## Level 1, trying r5c3=6: Leads to solution.

As eleven pointed out, this output is a bit confusing. Does your program actually test that case? Why would it, since you already found a contradiction for its bivalue cellmate and know that 6r5c3 must be the true candidate (if the puzzle has a solution at all)? Then again, if it's not really tested but it's just an assumption, then it's misleading (unless your program knows beforehand that the puzzle has at least one solution).

Btw, it might be a good idea to put long outputs into a hidden text block:

Software Output: Show
...long program output...
User avatar
SpAce
 
Posts: 2671
Joined: 22 May 2017

Re: Help for Weekly Unsolvable #324

Postby SpAce » Mon Dec 10, 2018 3:59 am

eleven wrote:
SpAce wrote:Can anyone recommend a better T&E strategy for manual solving?

I don't think, that a manual solver would solve such puzzles more than once in the life. So this is a theoretical question.

Yeah, doesn't seem like a lot of fun. Then again, some people are masochists, so don't underestimate that possibility! :D

I recently mentioned an alternative to trying a bivalue/bilocation candidate:
Choose a unit with few possible outcomes and try them one after the other.

That seems like a very viable option. Works quite nicely here at least. Thanks for bringing it up!
User avatar
SpAce
 
Posts: 2671
Joined: 22 May 2017

Re: Help for Weekly Unsolvable #324

Postby SpAce » Mon Dec 10, 2018 4:08 am

champagne wrote:With an appropriate coding, this could be faster than the faster known brute force.

Very interesting. What is the fastest known brute force currently? Is something faster than DLX?
User avatar
SpAce
 
Posts: 2671
Joined: 22 May 2017

Re: Help for Weekly Unsolvable #324

Postby champagne » Mon Dec 10, 2018 7:13 am

SpAce wrote:
champagne wrote:With an appropriate coding, this could be faster than the faster known brute force.

Very interesting. What is the fastest known brute force currently? Is something faster than DLX?

brute force

here is the pointer to the last current post of the thread where this topic was discussed. My current brute force is derived from this code
champagne
2017 Supporter
 
Posts: 7357
Joined: 02 August 2007
Location: France Brittany

Re: Help for Weekly Unsolvable #324

Postby StrmCkr » Mon Dec 10, 2018 8:04 am

Very interesting. What is the fastest known brute force currently? Is something faster than DLX?


yeah, a hybrid approach that optimizes early eliminations by basic techniques up to a point then pigeon holes the search matrix to reduce the number of matrix's the dlx must cycle through to shorten the dead end pass

....if i ever get around to coding my theorized paired propagation method for an advanced idea .... .....doubt it.


that idea uses potential sets of digits with limitations of digit combinations{meaning both cells must share a strong linked digit} to act as forced pairs connected to a sub-matrix of the grid to produce contradictions within the sub-net .

to manually do it looks like trial and error as you follow the connecting network of "on" off to a contradiction and comparing all possible combinations on the "two" initial cells to prove the network as a contradiction state.

thus the two cells cant be a subset of x+y but they could be individually x or y implying the other cannot be true.

for this grid its trying to figuring out how this happens with some reasons behind it...

Code: Select all
+-------------------------+-----------------------+------------------------+
 |  2789    24789   1247   |  6      128   12348   |  5      1389   12389   |
 |  258     6       1245   |  1348   9     12348   |  1234   7      1238    |
 |  289     2489    3      |  148    5     7       |  124    189    6       |
 +-------------------------+-----------------------+------------------------+
 |  4       2379    267    |  5      126   1236    |  8      1369   139     |
 |  3569    1       56     |  378    4     368     |  367    2      359     |
 |  2356    235     8      |  137    126   9       |  1367   1356   4       |
 +-------------------------+-----------------------+------------------------+
 |  1       3458    46     |  2      7     468     |  9      3568   358     |
 |  25678   2578    2567   |  9      3     168     |  126    4      1258    |
 |  2368    2348    9      |  148    168   5       |  1236   1368   7       |
 +-------------------------+-----------------------+------------------------+


R13C3 is potential pairs [ 1 & 2 ] or [1 & 4 ] or is [{1,7} or {1,5}] and eliminating [1& 4] as a set.
R78C46 is a set of [4,8] or is [4,1] or [4,6] and eliminating [4 & 8] as a set.
R13C2 is a set of [4,2] or [4,8] or [4,9] or [4,2] or is it [4,7] and eliminating sets [4,2],[4,8]
R23C7 is a set of [4,1] or [4,2] or [4,1] or is it [4,3] and eliminating sets [4,1]
.......................>>>

stupidly difficult to do manually... but it potentially could reduce the grid down to this.. {doubt i could prove all of them but that's the potential theory anyway.}

Code: Select all
.-------------------.------------------.-------------------.
| 2789   479   127  | 6     128  12348 | 5     1389  12389 |
| 58     6     15   | 1348  9    12348 | 234   7     1238  |
| 289    49    3    | 148   5    7     | 24    189   6     |
:-------------------+------------------+-------------------:
| 4      2379  267  | 5     126  1236  | 8     1369  139   |
| 35679  1     567  | 78    4    368   | 37    2     59    |
| 23567  2357  8    | 17    126  9     | 137   156   4     |
:-------------------+------------------+-------------------:
| 1      3458  456  | 2     7    46    | 9     3568  358   |
| 25678  2578  2567 | 9     3    18    | 126   4     1258  |
| 2368   2348  9    | 14    18   5     | 1236  1368  7     |
'-------------------'------------------'-------------------'
Last edited by StrmCkr on Mon Dec 10, 2018 8:57 am, edited 2 times in total.
Some do, some teach, the rest look it up.
stormdoku
User avatar
StrmCkr
 
Posts: 1425
Joined: 05 September 2006

Re: Help for Weekly Unsolvable #324

Postby RSW » Mon Dec 10, 2018 8:38 am

champagne wrote:I was not at all discussing timings.
The brute force used to filter valid puzzles is in another dimension.

The version in use in my programs checks 22500 puzzles per second for the file of potential hardest (2 048 000 puzzles)
and 245000 puzzles per second for the file of 17 clues puzzles (49157 puzzles)

But this is without the search of back doors

I realize this. There are really two categories of trial & error solvers. The type you are referring to (brute force) is more for research use: finding all solutions of puzzles that may have more than one, and/or processing a large number of puzzles in one go. The other type, which is what I have been using, is intended to solve a single puzzle by attempting all possible logical solutions before resorting to making trial and error guesses (and return to logic techniques after each guess).



SpAce wrote:
Once you've exhausted all logical solution techniques, just pick a cell with the fewest candidates

Or a unit with the fewest possible cells for a digit? I did consider candidates with bilocation strong-links too, but they didn't seem as potential in this case (turns out they weren't either). Even though I was using a software helper for this exercise, I made some mental predictions about the potential before picking the candidates to test. When a program runs those tests, it doesn't have to be so picky of course, and it's probably more efficient to use very simple heuristics like that. For a human solver it's different, because the actual testing can be very tedious. Based on your output, my manual picking did result in fewer trials, but perhaps I was just lucky.

This is an area that I intend to pursue. I agree that there should be better ways of choosing the best cell for T&E.

SpAce wrote:
and then continue on under the assumption that you've made the correct choice (using the full set of logical techniques again) until one of the following happens:
1. Puzzle solved. You're done!

I'm not! I'm not done if I happen to hit a backdoor and find a solution. How would you document that as a proof? Even if using T&E, I'd like to be able to produce a solve path that proves the solution via a set of proven eliminations. Yes, someone can argue that a solved grid is a proof too, but it's just not the same.

It seems to me that the existence of a valid solution is sufficient documentation. However, there could certainly be more than one solution, and the only way to find that out for sure would be to solve it with purely logical techniques, or else do an exhaustive brute force solution to see if the solution is unique.

If you need proof that a certain guess ends in a contradiction, unfortunately my T&E solver doesn't produce detailed notes for the branches that end in contradictions, because that could be an enormous amount of text. So, it basically chops off all notes between choosing a cell value and reaching a contradiction. It would actually be easier from a programming point of view to include all of the solve notes for the dead branches, but I added extra program code to eliminate them so as not to inflate the amount of text beyond what it already is.

I'll have a look at providing an extremely verbose mode to explain where and how the contradictions occur.

SpAce wrote:Also, as others have mentioned, that's not where you want to stop if you want to prove the uniqueness of the solution.

The purpose my solver is to find one valid solution and give an explanation of the steps, not find all possible solutions of an improperly formed puzzle. That would be the job for a brute force solver, and I would approach that with entirely different programming methods.
SpAce wrote:One more thing. I wouldn't call it T&E if you accept a found solution and stop at that. In my books that term only applies when you're hunting for contradictions, i.e. errors, which prove a choice wrong. Otherwise it's Trial&Success, or lucky guessing :) It's a subtle distinction, but I think that's how T&E is usually defined on this forum (or maybe I've just bought someone's propaganda).

That would be true only if the solver was lucky enough to reach a solution without making any wrong guesses. While that could happen, it would be very unlikely.
SpAce wrote:
## All Logic Strategies exhausted at top level. Starting new branch level 1.
## Choosing cell having fewest candidates: r5c3: [5,6]
## Level 1, trying r5c3=5: Leads to contradiction. Backtracking...

How did it find a contradiction? I ran my tests with the SudokuWiki solver and even its full technique set (including krakens) couldn't find a direct contradiction with 5r5c3 when tried as the first candidate...

Without providing the excessively verbose notes that the program strips off of dead branches (as mentioned above), it's hard to say how or where the contradiction occurred. However, the contradictions that the solver detects are:
1. A cell has no candidates.
2. An attempt is made to set a cell in a row/column/box to a value that already exists in that house.

SpAce wrote:
## Level 1, trying r5c3=6: Leads to solution.

As eleven pointed out, this output is a bit confusing. Does your program actually test that case? Why would it, since you already found a contradiction for its bivalue cellmate and know that 6r5c3 must be the true candidate (if the puzzle has a solution at all)? Then again, if it's not really tested but it's just an assumption, then it's misleading (unless your program knows beforehand that the puzzle has at least one solution).

It has already been tested out when that output line is generated. However, it would be more accurate for it to say:
"## Level 1, trying r5c3=6: Leads to solution as follows:"
This happens because the solver accumulates the solve notes from the point where a guess is made until either a valid solution is found or a contradiction is found. If a valid solution is found, then the note is set to "Leads to a solution" and the accumulated solve notes are then appended. If a contradiction is found, then the note is set to "Leads to contradiction" and the accumulated notes are discarded.

SpAce wrote:Btw, it might be a good idea to put long outputs into a hidden text block:

Software Output: Show
...long program output...

Good point. I keep forgetting that the option is available on this forum.
RSW
 
Posts: 618
Joined: 01 December 2018
Location: Western Canada

Re: Help for Weekly Unsolvable #324

Postby 1to9only » Mon Dec 10, 2018 8:52 am

I put the puzzle through a Reverse SudokuExplainer, i.e. it applies the SE solving methods in REVERSE order... I'll admit to not being expert enough to interpret the output, but you guys may find it useful...
Hidden Text: Show
Code: Select all
...6..5...6..9..7...3..7..64..5..8...1..4..2...8..9..41..2..9......3..4...9..5..7
...6..5...6..9..7...3..7..64..5..8...1..4..2...8..9..41..2..9......3..4...9..5..7 8.5, Region Forcing Chains: 5 in row ==> R3C1.5 off
...6..5...6..9..7...3..7..64..5..8...1..4..2...8..9..41..2..9......3..4...9..5..7 8.5, Region Forcing Chains: 5 in row ==> R3C2.5 off
...6..5...6..9..7...3..7..64..5..8...1..4..2...8..9..41..2..9......3..4...9..5..7 8.6, Region Forcing Chains: 5 in column ==> R7C3.5 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9......3..4...9..5..7 1.2, Hidden Single: R3C5: 5 in block
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9......3..4...9..5..7 9.1, Contradiction Forcing Chain: R2C1.2 on ==> R1C6.2 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9......3..4...9..5..7 9.5, Contradiction Forcing Chain: R8C1.5 on ==> R6C1.3 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 1.2, Hidden Single: R8C4: 9 in block
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 7 in column ==> R4C5.7 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 7 in row ==> R5C1.7 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 7 in row ==> R5C3.7 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 7 in row ==> R6C1.7 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 7 in row ==> R6C2.7 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 7 in column ==> R6C5.7 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 7 in row ==> R7C2.7 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 7 in row ==> R7C3.7 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.0, Contradiction Forcing Chain: R7C5.6 on ==> R9C5.1 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.2, Contradiction Forcing Chain: R1C2.2 on ==> R7C3.6 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.3, Region Forcing Chains: 4 in row ==> R2C3.4 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.2, Contradiction Forcing Chain: R2C6.1 on ==> R6C5.6 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.3, Contradiction Forcing Chain: R6C8.3 on ==> R6C1.2 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.4, Contradiction Forcing Chain: R7C2.4 on ==> R6C2.2 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.4, Contradiction Forcing Chain: R8C1.2 on ==> R2C4.3 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.4, Contradiction Forcing Chain: R2C3.2 on ==> R5C9.9 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.4, Contradiction Forcing Chain: R6C1.5 on ==> R8C6.8 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.1, Contradiction Forcing Chain: R2C7.1 on ==> R8C7.2 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.2, Contradiction Forcing Chain: R2C9.1 on ==> R2C7.3 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.3, Contradiction Forcing Chain: R7C6.8 on ==> R8C7.1 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R7C3 ==> R7C8.6 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.9, Contradiction Forcing Chain: R4C6.6 on ==> R5C9.5 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.3, Contradiction Forcing Chain: R4C3.6 on ==> R9C7.1 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.2, Cell Forcing Chains: R5C9 ==> R8C3.7 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.3, Contradiction Forcing Chain: R5C6.6 on ==> R6C7.3 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 6 in block ==> R9C5.6 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.9, Contradiction Forcing Chain: R7C5.8 on ==> R7C6.4 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.0, Region Forcing Chains: 4 in row ==> R3C4.4 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.1, Contradiction Forcing Chain: R2C4.8 on ==> R4C3.7 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.1, Region Forcing Chains: 8 in row ==> R2C9.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.0, Contradiction Forcing Chain: R2C6.8 on ==> R2C7.4 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.7, Cell Forcing Chains: R3C4 ==> R3C8.8 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.0, Cell Forcing Chains: R1C5 ==> R1C6.8 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.0, Cell Forcing Chains: R1C5 ==> R1C6.1 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.9, Region Forcing Chains: 1 in column ==> R4C5.1 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.9, Region Forcing Chains: 1 in column ==> R4C8.1 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.0, Contradiction Forcing Chain: R7C3.6 on ==> R8C7.1 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.7, Region Forcing Chains: 6 in block ==> R8C6.6 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R8C6 ==> R9C4.1 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R8C6 ==> R9C4.8 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.9, Region Forcing Chains: 2 in column ==> R1C3.4 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 4 in block ==> R9C2.4 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.9, Region Forcing Chains: 1 in column ==> R2C4.4 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 4 in block ==> R7C6.4 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.0, Contradiction Forcing Chain: R5C1.3 on ==> R6C7.3 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.8, Region Forcing Chains: 3 in block ==> R6C4.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.9, Contradiction Forcing Chain: R5C7.6 on ==> R9C7.3 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 6 in row ==> R6C1.6 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.7, Region Forcing Chains: 9 in row ==> R5C9.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 9.0, Region Forcing Chains: 2 in column ==> R8C7.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.9, Region Forcing Chains: 1 in block ==> R8C3.6 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 6 in block ==> R5C1.6 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R5C1 ==> R5C3.5 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.8, Region Forcing Chains: 9 in column ==> R1C2.8 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.8, Contradiction Forcing Chain: R8C1.8 on ==> R1C5.8 both on & off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.8, Region Forcing Chains: 9 in column ==> R3C2.8 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 8 in block ==> R9C1.8 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.8, Cell Forcing Chains: R2C9 ==> R9C7.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.8, Cell Forcing Chains: R5C6 ==> R6C7.1 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.8, Region Forcing Chains: 1 in block ==> R4C9.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.8, Region Forcing Chains: 1 in block ==> R8C9.1 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.8, Cell Forcing Chains: R2C9 ==> R1C9.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.7, Cell Forcing Chains: R8C3 ==> R8C2.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.8, Cell Forcing Chains: R5C6 ==> R6C7.6 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 6 in block ==> R9C8.6 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R5C7 ==> R4C8.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 3 in block ==> R2C7.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 3 in block ==> R1C6.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.8, Cell Forcing Chains: R6C1 ==> R9C1.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.6, Cell Forcing Chains: R2C7 ==> R3C2.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.7, Cell Forcing Chains: R2C1 ==> R3C1.9 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.7, Cell Forcing Chains: R2C1 ==> R6C2.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.7, Cell Forcing Chains: R6C2 ==> R4C2.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.7, Cell Forcing Chains: R3C1 ==> R5C4.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 3 in block ==> R2C6.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R1C6 ==> R1C5.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 2 in block ==> R4C6.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R1C5 ==> R2C4.1 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R1C5 ==> R6C5.1 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R2C6 ==> R2C9.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 2 in block ==> R9C7.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R8C7 ==> R9C8.1 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 1 in block ==> R3C7.1 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 1 in block ==> R1C8.1 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 1 in block ==> R1C3.1 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R1C3 ==> R8C3.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.6, Region Forcing Chains: 2 in column ==> R6C2.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.6, Cell Forcing Chains: R4C9 ==> R4C2.9 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 9 in column ==> R1C1.9 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 9 in row ==> R5C9.9 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 4 in block ==> R1C2.7 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 1 in column ==> R1C9.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 1 in column ==> R1C9.8 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R1C9 ==> R1C8.9 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R1C8 ==> R7C8.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R1C8 ==> R7C8.8 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 8 in column ==> R1C1.8 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R1C1 ==> R3C1.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 2 in block ==> R1C6.2 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 8 in column ==> R9C2.8 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 3 in row ==> R7C2.5 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 5 in block ==> R8C9.5 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Region Forcing Chains: 3 in row ==> R7C9.5 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.5, Cell Forcing Chains: R7C9 ==> R8C9.8 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.6, Region Forcing Chains: 1 in column ==> R6C8.5 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.7, Cell Forcing Chains: R5C6 ==> R9C2.3 off
...6..5...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 8.6, Region Forcing Chains: 3 in column ==> R8C2.5 off
...6.45...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R1C6: 4
.9.6.45...6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R1C2: 9
.9.6.45.1.6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R1C9: 1
.9.6845.1.6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R1C5: 8
.9.684531.6..9..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R1C8: 3
.9.684531.6.39..7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R2C4: 3
.9.684531.6.392.7...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R2C6: 2
.9.684531.6.39247...3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R2C7: 4
.9.684531.6.392478..3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R2C9: 8
.9.68453156.392478..3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R2C1: 5
.9.684531561392478..3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R2C3: 1
.9.6845315613924788.3.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R3C1: 8
.9.684531561392478843.57..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R3C2: 4
.9.684531561392478843157..64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R3C4: 1
.9.6845315613924788431572.64..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R3C7: 2
.9.6845315613924788431572964..5..8...1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R3C8: 9
.9.6845315613924788431572964..5..86..1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R4C8: 6
.9.6845315613924788431572964..52.86..1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R4C5: 2
.9.6845315613924788431572964.752.86..1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R4C3: 7
.926845315613924788431572964.752.86..1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R1C3: 2
7926845315613924788431572964.752.86..1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R1C1: 7
79268453156139247884315729643752.86..1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R4C2: 3
79268453156139247884315729643752186..1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R4C6: 1
792684531561392478843157296437521869.1..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R4C9: 9
79268453156139247884315729643752186991..4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R5C1: 9
792684531561392478843157296437521869916.4..2...8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R5C3: 6
792684531561392478843157296437521869916.4..25..8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R5C9: 5
792684531561392478843157296437521869916.4..252.8..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R6C1: 2
792684531561392478843157296437521869916.4..25258..9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R6C2: 5
792684531561392478843157296437521869916.4..252587.9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R6C4: 7
79268453156139247884315729643752186991684..252587.9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R5C4: 8
792684531561392478843157296437521869916843.252587.9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R5C6: 3
7926845315613924788431572964375218699168437252587.9..41..2..9.....93..4...9..5..7 2.3, Naked Single: R5C7: 7
792684531561392478843157296437521869916843725258769..41..2..9.....93..4...9..5..7 2.3, Naked Single: R6C5: 6
7926845315613924788431572964375218699168437252587693.41..2..9.....93..4...9..5..7 2.3, Naked Single: R6C7: 3
7926845315613924788431572964375218699168437252587693141..2..9.....93..4...9..5..7 2.3, Naked Single: R6C8: 1
79268453156139247884315729643752186991684372525876931418.2..9.....93..4...9..5..7 2.3, Naked Single: R7C2: 8
7926845315613924788431572964375218699168437252587693141842..9.....93..4...9..5..7 2.3, Naked Single: R7C3: 4
79268453156139247884315729643752186991684372525876931418427.9.....93..4...9..5..7 2.3, Naked Single: R7C5: 7
7926845315613924788431572964375218699168437252587693141842769.....93..4...9..5..7 2.3, Naked Single: R7C6: 6
79268453156139247884315729643752186991684372525876931418427695....93..4...9..5..7 2.3, Naked Single: R7C8: 5
792684531561392478843157296437521869916843725258769314184276953...93..4...9..5..7 2.3, Naked Single: R7C9: 3
7926845315613924788431572964375218699168437252587693141842769536..93..4...9..5..7 2.3, Naked Single: R8C1: 6
79268453156139247884315729643752186991684372525876931418427695367.93..4...9..5..7 2.3, Naked Single: R8C2: 7
79268453156139247884315729643752186991684372525876931418427695367593..4...9..5..7 2.3, Naked Single: R8C3: 5
792684531561392478843157296437521869916843725258769314184276953675938.4...9..5..7 2.3, Naked Single: R8C6: 8
79268453156139247884315729643752186991684372525876931418427695367593814...9..5..7 2.3, Naked Single: R8C7: 1
792684531561392478843157296437521869916843725258769314184276953675938142..9..5..7 2.3, Naked Single: R8C9: 2
7926845315613924788431572964375218699168437252587693141842769536759381423.9..5..7 2.3, Naked Single: R9C1: 3
792684531561392478843157296437521869916843725258769314184276953675938142329..5..7 2.3, Naked Single: R9C2: 2
7926845315613924788431572964375218699168437252587693141842769536759381423294.5..7 2.3, Naked Single: R9C4: 4
792684531561392478843157296437521869916843725258769314184276953675938142329415..7 2.3, Naked Single: R9C5: 1
7926845315613924788431572964375218699168437252587693141842769536759381423294156.7 2.3, Naked Single: R9C7: 6
792684531561392478843157296437521869916843725258769314184276953675938142329415687 2.3, Naked Single: R9C8: 8
ED=9.5/8.6/8.5
User avatar
1to9only
 
Posts: 4175
Joined: 04 April 2018

Re: Help for Weekly Unsolvable #324

Postby champagne » Mon Dec 10, 2018 9:18 am

1to9only wrote:I put the puzzle through a Reverse SudokuExplainer, i.e. it applies the SE solving methods in REVERSE order... I'll admit to not being expert enough to interpret the output, but you guys may find it useful...

A quick look at your list shows that the elimination indicated earlier (2r2c1) is number 5 in your list, not a surprise as I used a solver cloning serate :roll:
champagne
2017 Supporter
 
Posts: 7357
Joined: 02 August 2007
Location: France Brittany

Re: Help for Weekly Unsolvable #324

Postby RSW » Mon Dec 10, 2018 1:22 pm

SpAce wrote:
## All Logic Strategies exhausted at top level. Starting new branch level 1.
## Choosing cell having fewest candidates: r5c3: [5,6]
## Level 1, trying r5c3=5: Leads to contradiction. Backtracking...

How did it find a contradiction? I ran my tests with the SudokuWiki solver and even its full technique set (including krakens) couldn't find a direct contradiction with 5r5c3 when tried as the first candidate. (It's possible with a a nested guess, but I rather tried the other bivalue cell which worked directly). Did your program use a nested guess to find the contradiction? If so, I think it should be shown in the output. If not, then what kind of a technique set does your program use to test those paths? In any case, I think it would be valuable information to show how complicated those trial steps were. This doesn't really tell us anything what happened behind the scenes (it's just a blackbox brute-force move).

Sorry. I didn't answer your question about whether it involved nested guesses. Yes, it did. As many as 8 at one point.
It turned out to be relatively easy to add an additional log file that includes all dead ends.
Full Solver Output: Show
Code: Select all
 0: * Cell r3c5 is the only valid location in column 5 for digit 5
 0:  - Removing candidate 5 from r3c1 r3c2
 0: * Cell r8c4 is the only valid location in row 8 for digit 9
 0: * Cell r7c5 is the only valid location in block 8 for digit 7
 0:  - Removing candidate 7 from r7c2 r7c3 r4c5 r6c5
 0: Box/Line: In row 4, the only valid positions for digit 7 are r4c2 r4c3
 0:  - Removing candidate 7 from block 4 r5c1 r5c3 r6c1 r6c2
 1:  ## All Logic Strategies exhausted at top level. Starting new branch level 1.
 1:  ## Choosing cell having fewest candidates: r5c3: [5,6]
 1:  ## Level 1, trying r5c3=5
 1:  ## Current Hypothesis Summary: r5c3=5
 1:  * Cell r2c1 is the only valid location in row 2 for digit 5
 1:   - Removing candidate 5 from r8c1
 1:  * Cell r6c8 is the only valid location in row 6 for digit 5
 1:   - Removing candidate 5 from r7c8
 2:   ## All Logic Strategies exhausted at level 1. Starting new branch level 2.
 2:   ## Choosing cell having fewest candidates: r7c3: [4,6]
 2:   ## Level 2, trying r7c3=4
 2:   ## Current Hypothesis Summary: r5c3=5 r7c3=4
 2:   * Cell r9c4 is the only valid location in row 9 for digit 4
 2:    - Removing candidate 4 from r2c4 r3c4
 3:    ## All Logic Strategies exhausted at level 2. Starting new branch level 3.
 3:    ## Choosing cell having fewest candidates: r2c3: [1,2]
 3:    ## Level 3, trying r2c3=1
 3:    ## Current Hypothesis Summary: r5c3=5 r7c3=4 r2c3=1
 4:     ## All Logic Strategies exhausted at level 3. Starting new branch level 4.
 4:     ## Choosing cell having fewest candidates: r1c3: [2,7]
 4:     ## Level 4, trying r1c3=2
 4:     ## Current Hypothesis Summary: r5c3=5 r7c3=4 r2c3=1 r1c3=2
 4:     * Cell r3c7 is the only valid location in row 3 for digit 2
 4:      - Removing candidate 2 from r2c7 r8c7 r9c7 r2c9
 4:     * Cell r8c9 is the only valid location in column 9 for digit 2
 4:      - Removing candidate 2 from r8c1 r8c2
 4:     * Cell r2c6 is the only valid location in block 2 for digit 2
 4:      - Removing candidate 2 from r4c6
 4:     * Cell r2c7 is the only valid location in row 2 for digit 4
 4:     * Cell r3c2 is the only valid location in row 3 for digit 4
 4:      - Removing candidate 4 from r1c2
 4:     * Cell r1c6 is the only valid location in column 6 for digit 4
 4:     * Cell r8c2 is the only valid location in row 8 for digit 5
 4:      - Removing candidate 5 from r7c2
 4:     * Cell r7c9 is the only valid location in column 9 for digit 5
 4:     * Cell r2c4 is the only valid location in block 2 for digit 3
 4:      - Removing candidate 3 from r2c9 r5c4 r6c4
 4:     * Cell r2c9 now has only one possible value: 8
 4:      - Removing candidate 8 from r1c9 r1c8 r3c8
 4:     Sparse Subset: In column 2, the digits 2 3 8 must go in cells r6c2 r7c2 r9c2 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 2
 4:      - Removing candidate(s) 8 from cell r1c2
 4:      - Removing candidate(s) 2 3 from cell r4c2
 4:     Box/Line: In row 4, the only valid positions for digit 2 are r4c5
 4:      - Removing candidate 2 from block 5 r6c5
 4:     Box/Line: In column 2, the only valid positions for digit 8 are r7c2 r9c2
 4:      - Removing candidate 8 from block 7 r8c1 r9c1
 4:     X-wing: In columns 2 & 8, digit 8 must go in row 7 or 9
 4:     Therefore candidate 8 can be removed from all other cells in rows 7 & 9
 4:     Removing candidate 8 from r9c5 r7c6
 4:     * Cell r7c6 now has only one possible value: 6
 4:      - Removing candidate 6 from r7c8 r4c6 r5c6 r8c6 r9c5
 4:     * Cell r9c5 now has only one possible value: 1
 4:      - Removing candidate 1 from r9c7 r9c8 r1c5 r4c5 r6c5 r8c6
 4:     * Cell r1c5 now has only one possible value: 8
 4:      - Removing candidate 8 from r1c1 r3c4
 4:     * Cell r3c4 now has only one possible value: 1
 4:      - Removing candidate 1 from r3c8 r6c4
 4:     * Cell r3c8 now has only one possible value: 9
 4:      - Removing candidate 9 from r3c1 r1c8 r4c8 r1c9
 4:     * Cell r3c1 now has only one possible value: 8
 4:     * Cell r6c4 now has only one possible value: 7
 4:      - Removing candidate 7 from r6c7 r5c4
 4:     * Cell r5c4 now has only one possible value: 8
 4:      - Removing candidate 8 from r5c6
 4:     * Cell r5c6 now has only one possible value: 3
 4:      - Removing candidate 3 from r5c1 r5c7 r5c9 r4c6
 4:     * Cell r5c9 now has only one possible value: 9
 4:      - Removing candidate 9 from r5c1 r4c9
 4:     * Cell r5c1 now has only one possible value: 6
 4:      - Removing candidate 6 from r5c7 r6c1 r8c1 r9c1 r4c3
 4:     * Cell r5c7 now has only one possible value: 7
 4:     * Cell r8c1 now has only one possible value: 7
 4:      - Removing candidate 7 from r8c3 r1c1
 4:     * Cell r8c3 now has only one possible value: 6
 4:      - Removing candidate 6 from r8c7
 4:     * Cell r8c7 now has only one possible value: 1
 4:      - Removing candidate 1 from r6c7
 4:     * Cell r1c1 now has only one possible value: 9
 4:      - Removing candidate 9 from r1c2
 4:     * Cell r1c2 now has only one possible value: 7
 4:      - Removing candidate 7 from r4c2
 4:     * Cell r4c2 now has only one possible value: 9
 4:     * Cell r4c3 now has only one possible value: 7
 4:     * Cell r4c6 now has only one possible value: 1
 4:      - Removing candidate 1 from r4c8 r4c9
 4:     * Cell r4c9 now has only one possible value: 3
 4:      - Removing candidate 3 from r4c8 r1c9 r6c7
 4:     * Cell r4c8 now has only one possible value: 6
 4:      - Removing candidate 6 from r4c5 r9c8 r6c7
 4:     * Cell r4c5 now has only one possible value: 2
 4:     * Cell r1c9 now has only one possible value: 1
 4:      - Removing candidate 1 from r1c8
 4:     * Cell r1c8 now has only one possible value: 3
 4:      - Removing candidate 3 from r7c8 r9c8
 4:     * Cell r7c8 now has only one possible value: 8
 4:      - Removing candidate 8 from r7c2 r9c8
 4:     * Cell r7c2 now has only one possible value: 3
 4:      - Removing candidate 3 from r6c2 r9c2 r9c1
 4:     * Cell r6c2 now has only one possible value: 2
 4:      - Removing candidate 2 from r6c1 r9c2
 4:     * Cell r6c1 now has only one possible value: 3
 4:     * Cell r9c2 now has only one possible value: 8
 4:     * Cell r9c1 now has only one possible value: 2
 4:     * Cell r9c8 now has only one possible value: 8
 4:      - Removing candidate 8 from r9c2 r7c8
 4:     * Cell r6c7 now has only one possible value: 6
 4:      - Removing candidate 6 from r6c5 r9c7 r4c8
 4:     * Cell r9c7 now has only one possible value: 3
 4:     * Cell r6c5 now has only one possible value: 6
 4:      - Removing candidate 6 from r6c7
 4:     * Cell r8c6 now has only one possible value: 8
 4:     ## Contradiction: Cell r4c8 has no valid candidates.
 4:     ## Backtracking...
 4:     ## Level 4, trying r1c3=7
 4:     ## Current Hypothesis Summary: r5c3=5 r7c3=4 r2c3=1 r1c3=7
 4:     * Cell r4c2 is the only valid location in row 4 for digit 7
 4:      - Removing candidate 7 from r8c2
 4:     * Cell r8c1 is the only valid location in row 8 for digit 7
 4:     * Cell r5c1 is the only valid location in block 4 for digit 9
 4:      - Removing candidate 9 from r5c9 r1c1 r3c1
 4:     * Cell r5c9 now has only one possible value: 3
 4:      - Removing candidate 3 from r5c4 r5c6 r5c7 r1c9 r2c9 r4c9 r7c9 r4c8 r6c7
 4:     * Cell r4c6 is the only valid location in row 4 for digit 3
 4:      - Removing candidate 3 from r1c6 r2c6 r6c4
 4:     * Cell r2c4 is the only valid location in column 4 for digit 3
 4:      - Removing candidate 3 from r2c7
 4:     * Cell r9c7 is the only valid location in column 7 for digit 3
 4:      - Removing candidate 3 from r9c1 r9c2 r9c8 r7c8
 4:     * Cell r1c8 is the only valid location in column 8 for digit 3
 4:     * Cell r7c2 is the only valid location in block 7 for digit 3
 4:      - Removing candidate 3 from r6c2
 4:     * Cell r6c2 now has only one possible value: 2
 4:      - Removing candidate 2 from r6c1 r6c5 r1c2 r3c2 r8c2 r9c2 r4c3
 4:     * Cell r9c2 now has only one possible value: 8
 4:      - Removing candidate 8 from r9c1 r9c5 r9c8 r1c2 r3c2 r8c2
 4:     * Cell r8c2 now has only one possible value: 5
 4:      - Removing candidate 5 from r8c9
 4:     * Cell r4c3 now has only one possible value: 6
 4:      - Removing candidate 6 from r4c5 r4c8 r8c3 r6c1
 4:     * Cell r8c3 now has only one possible value: 2
 4:      - Removing candidate 2 from r8c7 r8c9 r9c1
 4:     * Cell r9c1 now has only one possible value: 6
 4:      - Removing candidate 6 from r9c5 r9c8
 4:     * Cell r9c5 now has only one possible value: 1
 4:      - Removing candidate 1 from r9c8 r1c5 r4c5 r6c5 r8c6
 4:     * Cell r4c5 now has only one possible value: 2
 4:      - Removing candidate 2 from r1c5
 4:     * Cell r1c5 now has only one possible value: 8
 4:      - Removing candidate 8 from r1c1 r1c6 r1c9 r2c6 r3c4
 4:     * Cell r1c1 now has only one possible value: 2
 4:      - Removing candidate 2 from r1c6 r1c9 r3c1
 4:     * Cell r3c1 now has only one possible value: 8
 4:      - Removing candidate 8 from r3c8
 4:     * Cell r3c4 now has only one possible value: 1
 4:      - Removing candidate 1 from r3c7 r3c8 r6c4 r1c6
 4:     * Cell r3c8 now has only one possible value: 9
 4:      - Removing candidate 9 from r3c2 r4c8 r1c9
 4:     * Cell r3c2 now has only one possible value: 4
 4:      - Removing candidate 4 from r3c7 r1c2
 4:     * Cell r3c7 now has only one possible value: 2
 4:      - Removing candidate 2 from r2c7 r2c9
 4:     * Cell r2c7 now has only one possible value: 4
 4:      - Removing candidate 4 from r2c6
 4:     * Cell r2c6 now has only one possible value: 2
 4:     * Cell r2c9 now has only one possible value: 8
 4:      - Removing candidate 8 from r7c9 r8c9
 4:     * Cell r7c9 now has only one possible value: 5
 4:     * Cell r8c9 now has only one possible value: 1
 4:      - Removing candidate 1 from r8c7 r1c9 r4c9
 4:     * Cell r8c7 now has only one possible value: 6
 4:      - Removing candidate 6 from r8c6 r5c7 r6c7 r7c8
 4:     * Cell r8c6 now has only one possible value: 8
 4:      - Removing candidate 8 from r5c6 r7c6
 4:     * Cell r5c6 now has only one possible value: 6
 4:      - Removing candidate 6 from r7c6 r6c5
 4:     * Cell r7c6 now has only one possible value: 6
 4:      - Removing candidate 6 from r5c6
 4:     * Cell r5c7 now has only one possible value: 7
 4:      - Removing candidate 7 from r5c4 r6c7
 4:     * Cell r5c4 now has only one possible value: 8
 4:     * Cell r6c7 now has only one possible value: 1
 4:      - Removing candidate 1 from r4c8
 4:     * Cell r7c8 now has only one possible value: 8
 4:     * Cell r4c9 now has only one possible value: 9
 4:     * Cell r1c2 now has only one possible value: 9
 4:     * Cell r4c8 now has only one possible value: 1
 4:      - Removing candidate 1 from r6c7
 4:     * Cell r1c9 now has only one possible value: 1
 4:      - Removing candidate 1 from r8c9
 4:     * Cell r6c4 now has only one possible value: 7
 4:     * Cell r1c6 now has only one possible value: 4
 4:     * Cell r6c5 now has only one possible value: 6
 4:     * Cell r9c8 now has only one possible value: 1
 4:      - Removing candidate 1 from r9c5 r4c8
 4:     * Cell r6c1 now has only one possible value: 3
 4:     ## Contradiction: Cell r4c8 has no valid candidates.
 4:     ## Backtracking...
 4:     ## Exhausted all candidates for cell r1c3 at level 4
 3:    ## Backtracking...
 3:    ## Level 3, trying r2c3=2
 3:    ## Current Hypothesis Summary: r5c3=5 r7c3=4 r2c3=2
 3:    * Cell r1c3 is the only valid location in column 3 for digit 1
 3:     - Removing candidate 1 from r1c5 r1c6 r1c8 r1c9
 3:    * Cell r3c7 is the only valid location in row 3 for digit 2
 3:     - Removing candidate 2 from r8c7 r9c7 r1c9
 3:    * Cell r8c9 is the only valid location in column 9 for digit 2
 3:     - Removing candidate 2 from r8c1 r8c2
 3:    * Cell r3c2 is the only valid location in row 3 for digit 4
 3:     - Removing candidate 4 from r1c2
 3:    * Cell r2c7 is the only valid location in column 7 for digit 4
 3:     - Removing candidate 4 from r2c6
 3:    * Cell r1c6 is the only valid location in block 2 for digit 4
 3:    * Cell r8c2 is the only valid location in row 8 for digit 5
 3:     - Removing candidate 5 from r7c2
 3:    * Cell r7c9 is the only valid location in column 9 for digit 5
 3:    * Cell r1c5 is the only valid location in row 1 for digit 2
 3:     - Removing candidate 2 from r4c5 r6c5
 3:    * Cell r4c6 is the only valid location in column 6 for digit 2
 3:     - Removing candidate 2 from r4c2
 3:    * Cell r9c5 is the only valid location in column 5 for digit 8
 3:     - Removing candidate 8 from r9c1 r9c2 r9c8 r7c6 r8c6
 3:    * Cell r7c6 now has only one possible value: 6
 3:     - Removing candidate 6 from r7c8 r5c6 r8c6
 3:    * Cell r8c6 now has only one possible value: 1
 3:     - Removing candidate 1 from r8c7 r2c6
 3:    * Cell r8c7 now has only one possible value: 6
 3:     - Removing candidate 6 from r8c1 r8c3 r5c7 r6c7 r9c7 r9c8
 3:    * Cell r8c3 now has only one possible value: 7
 3:     - Removing candidate 7 from r8c1 r4c3
 3:    * Cell r8c1 now has only one possible value: 8
 3:     - Removing candidate 8 from r1c1 r3c1 r7c2
 3:    * Cell r3c1 now has only one possible value: 9
 3:     - Removing candidate 9 from r3c8 r1c1 r5c1 r1c2
 3:    * Cell r1c1 now has only one possible value: 7
 3:     - Removing candidate 7 from r1c2
 3:    * Cell r1c2 now has only one possible value: 8
 3:     - Removing candidate 8 from r1c8 r1c9
 3:    * Cell r7c2 now has only one possible value: 3
 3:     - Removing candidate 3 from r7c8 r4c2 r6c2 r9c2 r9c1
 3:    * Cell r7c8 now has only one possible value: 8
 3:     - Removing candidate 8 from r3c8
 3:    * Cell r3c8 now has only one possible value: 1
 3:     - Removing candidate 1 from r3c4 r4c8 r9c8 r2c9
 3:    * Cell r3c4 now has only one possible value: 8
 3:     - Removing candidate 8 from r2c4 r5c4 r2c6
 3:    * Cell r2c6 now has only one possible value: 3
 3:     - Removing candidate 3 from r2c4 r2c9 r5c6
 3:    * Cell r2c4 now has only one possible value: 1
 3:     - Removing candidate 1 from r6c4
 3:    * Cell r2c9 now has only one possible value: 8
 3:    * Cell r5c6 now has only one possible value: 8
 3:    * Cell r9c8 now has only one possible value: 3
 3:     - Removing candidate 3 from r9c7 r1c8 r4c8
 3:    * Cell r9c7 now has only one possible value: 1
 3:     - Removing candidate 1 from r6c7
 3:    * Cell r1c8 now has only one possible value: 9
 3:     - Removing candidate 9 from r1c9 r4c8
 3:    * Cell r1c9 now has only one possible value: 3
 3:     - Removing candidate 3 from r4c9 r5c9
 3:    * Cell r5c9 now has only one possible value: 9
 3:     - Removing candidate 9 from r4c9
 3:    * Cell r4c9 now has only one possible value: 1
 3:     - Removing candidate 1 from r4c5
 3:    * Cell r4c5 now has only one possible value: 6
 3:     - Removing candidate 6 from r4c3 r4c8 r6c5
 3:    * Cell r6c5 now has only one possible value: 1
 3:    * Cell r4c8 now has only one possible value: 6
 3:     - Removing candidate 6 from r4c5
 3:    * Cell r6c2 now has only one possible value: 2
 3:     - Removing candidate 2 from r6c1 r9c2
 3:    * Cell r9c2 now has only one possible value: 2
 3:     - Removing candidate 2 from r9c1 r6c2
 3:    * Cell r9c1 now has only one possible value: 6
 3:     - Removing candidate 6 from r5c1 r6c1
 3:    * Cell r5c1 now has only one possible value: 3
 3:     - Removing candidate 3 from r5c4 r5c7 r6c1
 3:    * Cell r5c4 now has only one possible value: 7
 3:     - Removing candidate 7 from r5c7 r6c4
 3:    * Cell r6c4 now has only one possible value: 3
 3:     - Removing candidate 3 from r6c7
 3:    * Cell r6c7 now has only one possible value: 7
 3:    * Cell r5c7 now has only one possible value: 7
 3:     - Removing candidate 7 from r5c4 r6c7
 3:    * Cell r6c1 now has only one possible value: 3
 3:     - Removing candidate 3 from r6c4 r5c1
 3:    * Cell r4c3 now has only one possible value: 6
 3:     - Removing candidate 6 from r4c8
 3:    * Cell r4c2 is the only valid location in row 4 for digit 9
 3:    ## Contradiction: Cell r4c5 has no valid candidates.
 3:    ## Backtracking...
 3:    ## Exhausted all candidates for cell r2c3 at level 3
 2:   ## Backtracking...
 2:   ## Level 2, trying r7c3=6
 2:   ## Current Hypothesis Summary: r5c3=5 r7c3=6
 2:   Dense subset: In column 3, r6c3 r7c3  have identical candidates: 2 7
 2:    - Removing candidate 2 from r1c3 r2c3
 2:    - Removing candidate 7 from r1c3
 2:   Dense subset: In block 1, r2c1 r2c2  have identical candidates: 1 4
 2:    - Removing candidate 4 from r1c2 r3c2
 3:    ## All Logic Strategies exhausted at level 2. Starting new branch level 3.
 3:    ## Choosing cell having fewest candidates: r1c3: [1,4]
 3:    ## Level 3, trying r1c3=1
 3:    ## Current Hypothesis Summary: r5c3=5 r7c3=6 r1c3=1
 3:    * Cell r2c3=4 by simple elimination.
 3:    * Cell r1c6 is the only valid location in row 1 for digit 4
 3:     - Removing candidate 4 from r7c6 r3c4
 3:    * Cell r7c6 now has only one possible value: 8
 3:     - Removing candidate 8 from r7c2 r7c8 r7c9 r2c6 r5c6 r8c6 r9c4 r9c5
 3:    * Cell r7c8 now has only one possible value: 3
 3:     - Removing candidate 3 from r7c2 r7c9 r1c8 r4c8 r9c8 r9c7
 3:    * Cell r7c9 now has only one possible value: 5
 3:     - Removing candidate 5 from r7c2 r8c9
 3:    * Cell r7c2 now has only one possible value: 4
 3:     - Removing candidate 4 from r9c2
 3:    * Cell r3c7 is the only valid location in row 3 for digit 4
 3:    * Cell r9c4 is the only valid location in row 9 for digit 4
 3:    * Cell r8c2 is the only valid location in row 8 for digit 5
 3:    * Cell r5c4 is the only valid location in row 5 for digit 8
 3:     - Removing candidate 8 from r2c4 r3c4
 3:    * Cell r3c4 now has only one possible value: 1
 3:     - Removing candidate 1 from r3c8 r2c4 r6c4 r2c6
 3:    * Cell r2c4 now has only one possible value: 3
 3:     - Removing candidate 3 from r2c6 r2c7 r2c9 r6c4
 3:    * Cell r2c6 now has only one possible value: 2
 3:     - Removing candidate 2 from r2c7 r2c9 r4c6 r1c5
 3:    * Cell r2c7 now has only one possible value: 1
 3:     - Removing candidate 1 from r2c9 r6c7 r8c7 r9c7
 3:    * Cell r2c9 now has only one possible value: 8
 3:     - Removing candidate 8 from r1c9 r8c9 r1c8 r3c8
 3:    * Cell r1c8 now has only one possible value: 9
 3:     - Removing candidate 9 from r1c1 r1c2 r1c9 r3c8 r4c8
 3:    * Cell r3c8 now has only one possible value: 9
 3:     - Removing candidate 9 from r3c1 r3c2 r1c8
 3:    * Cell r1c5 now has only one possible value: 8
 3:     - Removing candidate 8 from r1c1 r1c2
 3:    * Cell r6c4 now has only one possible value: 7
 3:     - Removing candidate 7 from r6c7
 3:    * Cell r8c1 is the only valid location in row 8 for digit 8
 3:     - Removing candidate 8 from r3c1 r9c1 r9c2
 3:    * Cell r3c1 now has only one possible value: 2
 3:     - Removing candidate 2 from r3c2 r1c1 r6c1 r9c1 r1c2
 3:    * Cell r3c2 now has only one possible value: 8
 3:    * Cell r1c1 now has only one possible value: 7
 3:     - Removing candidate 7 from r1c2
 3:    * Cell r9c1 now has only one possible value: 3
 3:     - Removing candidate 3 from r9c2 r5c1 r6c1
 3:    * Cell r9c2 now has only one possible value: 2
 3:     - Removing candidate 2 from r9c7 r4c2 r6c2 r8c3
 3:    * Cell r9c7 now has only one possible value: 6
 3:     - Removing candidate 6 from r9c5 r9c8 r5c7 r6c7 r8c7
 3:    * Cell r9c5 now has only one possible value: 1
 3:     - Removing candidate 1 from r9c8 r4c5 r6c5 r8c6
 3:    * Cell r9c8 now has only one possible value: 8
 3:    * Cell r8c6 now has only one possible value: 6
 3:     - Removing candidate 6 from r4c6 r5c6
 3:    * Cell r5c6 now has only one possible value: 3
 3:     - Removing candidate 3 from r5c7 r5c9 r4c6
 3:    * Cell r5c7 now has only one possible value: 7
 3:    * Cell r5c9 now has only one possible value: 9
 3:     - Removing candidate 9 from r5c1 r4c9
 3:    * Cell r5c1 now has only one possible value: 6
 3:     - Removing candidate 6 from r6c1
 3:    * Cell r4c6 now has only one possible value: 1
 3:     - Removing candidate 1 from r4c8 r4c9
 3:    * Cell r4c8 now has only one possible value: 6
 3:     - Removing candidate 6 from r4c5
 3:    * Cell r4c5 now has only one possible value: 2
 3:     - Removing candidate 2 from r4c3 r6c5
 3:    * Cell r4c3 now has only one possible value: 7
 3:     - Removing candidate 7 from r4c2 r8c3
 3:    * Cell r6c5 now has only one possible value: 6
 3:    * Cell r4c9 now has only one possible value: 3
 3:     - Removing candidate 3 from r4c2 r1c9 r6c7
 3:    * Cell r4c2 now has only one possible value: 9
 3:    * Cell r1c9 now has only one possible value: 2
 3:     - Removing candidate 2 from r8c9
 3:    * Cell r8c9 now has only one possible value: 1
 3:    * Cell r6c7 now has only one possible value: 3
 3:     - Removing candidate 3 from r6c2 r4c9
 3:    * Cell r8c7 now has only one possible value: 2
 3:    * Cell r6c2 now has only one possible value: 3
 3:     - Removing candidate 3 from r6c7
 3:    * Cell r8c3 now has only one possible value: 7
 3:     - Removing candidate 7 from r4c3
 3:    * Cell r6c1 now has only one possible value: 6
 3:     - Removing candidate 6 from r6c5 r5c1
 3:    * Cell r1c2 now has only one possible value: 7
 3:     - Removing candidate 7 from r1c1
 3:    ## Contradiction: Cell r1c1 has no valid candidates.
 3:    ## Backtracking...
 3:    ## Level 3, trying r1c3=4
 3:    ## Current Hypothesis Summary: r5c3=5 r7c3=6 r1c3=4
 3:    * Cell r2c3=1 by simple elimination.
 4:     ## All Logic Strategies exhausted at level 3. Starting new branch level 4.
 4:     ## Choosing cell having fewest candidates: r8c3: [2,7]
 4:     ## Level 4, trying r8c3=2
 4:     ## Current Hypothesis Summary: r5c3=5 r7c3=6 r1c3=4 r8c3=2
 4:     * Cell r4c3=7 by simple elimination.
 4:     * Cell r9c7 is the only valid location in row 9 for digit 2
 4:      - Removing candidate 2 from r2c7 r3c7
 4:     Box/Line: In row 3, the only valid positions for digit 2 are r3c1 r3c2
 4:      - Removing candidate 2 from block 1 r1c1 r1c2
 5:      ## All Logic Strategies exhausted at level 4. Starting new branch level 5.
 5:      ## Choosing cell having fewest candidates: r9c1: [3,8]
 5:      ## Level 5, trying r9c1=3
 5:      ## Current Hypothesis Summary: r5c3=5 r7c3=6 r1c3=4 r8c3=2 r9c1=3
 6:       ## All Logic Strategies exhausted at level 5. Starting new branch level 6.
 6:       ## Choosing cell having fewest candidates: r9c2: [4,8]
 6:       ## Level 6, trying r9c2=4
 6:       ## Current Hypothesis Summary: r5c3=5 r7c3=6 r1c3=4 r8c3=2 r9c1=3 r9c2=4
 6:       * Cell r7c6 is the only valid location in row 7 for digit 4
 6:        - Removing candidate 4 from r2c6
 7:        ## All Logic Strategies exhausted at level 6. Starting new branch level 7.
 7:        ## Choosing cell having fewest candidates: r5c1: [6,9]
 7:        ## Level 7, trying r5c1=6
 7:        ## Current Hypothesis Summary: r5c3=5 r7c3=6 r1c3=4 r8c3=2 r9c1=3 r9c2=4 r5c1=6
 7:        * Cell r6c1=2 by simple elimination.
 7:        * Cell r6c2=3 by simple elimination.
 7:        * Cell r4c2=9 by simple elimination.
 7:        * Cell r3c2 is the only valid location in row 3 for digit 2
 7:        * Cell r5c9 is the only valid location in row 5 for digit 9
 7:         - Removing candidate 9 from r1c9
 7:        X-wing: In columns 4 & 7, digit 3 must go in row 2 or 5
 7:        Therefore candidate 3 can be removed from all other cells in rows 2 & 5
 7:        Removing candidate 3 from r2c6 r5c6 r2c9
 7:        * Cell r5c6 now has only one possible value: 8
 7:         - Removing candidate 8 from r5c4 r1c6 r2c6 r8c6
 7:        * Cell r2c6 now has only one possible value: 2
 7:         - Removing candidate 2 from r2c9 r1c6 r4c6 r1c5
 7:        * Cell r2c9 now has only one possible value: 8
 7:         - Removing candidate 8 from r2c4 r1c9 r7c9 r8c9 r1c8 r3c8
 7:        * Cell r1c9 is the only valid location in row 1 for digit 2
 7:        * Cell r4c5 is the only valid location in row 4 for digit 2
 7:        Dense subset: In row 8, r8c6 r8c7  have identical candidates: 1 6
 7:         - Removing candidate 1 from r8c9
 7:        * Cell r8c9 now has only one possible value: 5
 7:         - Removing candidate 5 from r8c2 r7c9
 7:        * Cell r7c9 now has only one possible value: 3
 7:         - Removing candidate 3 from r7c8 r4c9
 7:        * Cell r7c8 now has only one possible value: 8
 7:         - Removing candidate 8 from r7c2 r9c8
 7:        * Cell r7c2 now has only one possible value: 5
 7:        * Cell r4c9 now has only one possible value: 1
 7:         - Removing candidate 1 from r4c6 r4c8 r6c7
 7:        XY-wing: Interdependent cells r1c6 r4c6 r6c5 each have two out of the three candidates 1 3 6.
 7:        Depending on the value of pivot cell r4c6, either r1c6 or r6c5 must have the value 1.
 7:        Therefore candidate 1 can be eliminated from cells which intersect r1c6 and r6c5.
 7:         - Eliminating candidate 1 from cell r1c5
 7:        * Cell r1c5 now has only one possible value: 8
 7:         - Removing candidate 8 from r1c1 r1c2 r9c5 r3c4
 7:        * Cell r1c2 now has only one possible value: 7
 7:         - Removing candidate 7 from r1c1 r8c2
 7:        * Cell r1c1 now has only one possible value: 9
 7:         - Removing candidate 9 from r1c8 r3c1
 7:        * Cell r3c1 now has only one possible value: 8
 7:         - Removing candidate 8 from r8c1
 7:        * Cell r8c1 now has only one possible value: 7
 7:        * Cell r8c2 now has only one possible value: 8
 7:        * Cell r9c4 is the only valid location in row 9 for digit 8
 7:        * Cell r3c8 is the only valid location in row 3 for digit 9
 8:         ## All Logic Strategies exhausted at level 7. Starting new branch level 8.
 8:         ## Choosing cell having fewest candidates: r1c6: [1,3]
 8:         ## Level 8, trying r1c6=1
 8:         ## Current Hypothesis Summary: r5c3=5 r7c3=6 r1c3=4 r8c3=2 r9c1=3 r9c2=4 r5c1=6 r1c6=1
 8:         * Cell r1c8=3 by simple elimination.
 8:         * Cell r2c7=4 by simple elimination.
 8:         * Cell r3c4=4 by simple elimination.
 8:         * Cell r3c7=1 by simple elimination.
 8:         * Cell r4c8=6 by simple elimination.
 8:         * Cell r6c7=7 by simple elimination.
 8:         * Cell r8c6=6 by simple elimination.
 8:         * Cell r9c5=1 by simple elimination.
 8:         * Cell r2c4=3 by simple elimination.
 8:         * Cell r4c6=3 by simple elimination.
 8:         * Cell r5c4=7 by simple elimination.
 8:         * Cell r5c7=3 by simple elimination.
 8:         * Cell r6c4=1 by simple elimination.
 8:         * Cell r6c5=6 by simple elimination.
 8:         ## Contradiction: Cell r8c7 has no valid candidates.
 8:         ## Backtracking...
 8:         ## Level 8, trying r1c6=3
 8:         ## Current Hypothesis Summary: r5c3=5 r7c3=6 r1c3=4 r8c3=2 r9c1=3 r9c2=4 r5c1=6 r1c6=3
 8:         * Cell r1c8=1 by simple elimination.
 8:         * Cell r2c4=4 by simple elimination.
 8:         * Cell r2c7=3 by simple elimination.
 8:         * Cell r3c4=1 by simple elimination.
 8:         * Cell r3c7=4 by simple elimination.
 8:         * Cell r4c6=6 by simple elimination.
 8:         * Cell r4c8=3 by simple elimination.
 8:         * Cell r5c7=7 by simple elimination.
 8:         * Cell r6c4=7 by simple elimination.
 8:         * Cell r6c5=1 by simple elimination.
 8:         * Cell r6c7=6 by simple elimination.
 8:         * Cell r8c6=1 by simple elimination.
 8:         * Cell r9c5=6 by simple elimination.
 8:         * Cell r5c4=3 by simple elimination.
 8:         ## Contradiction: Cell r8c7 has no valid candidates.
 8:         ## Backtracking...
 8:         ## Exhausted all candidates for cell r1c6 at level 8
 7:        ## Backtracking...
 7:        ## Level 7, trying r5c1=9
 7:        ## Current Hypothesis Summary: r5c3=5 r7c3=6 r1c3=4 r8c3=2 r9c1=3 r9c2=4 r5c1=9
 7:        * Cell r5c9=3 by simple elimination.
 7:        * Cell r7c8 is the only valid location in row 7 for digit 3
 7:         - Removing candidate 3 from r1c8
 7:        * Cell r2c7 is the only valid location in column 7 for digit 3
 7:         - Removing candidate 3 from r2c4 r2c6
 7:        * Cell r1c6 is the only valid location in block 2 for digit 3
 7:         - Removing candidate 3 from r4c6
 7:        * Cell r6c4 is the only valid location in block 5 for digit 3
 7:         - Removing candidate 3 from r6c2
 7:        * Cell r6c2 now has only one possible value: 2
 7:         - Removing candidate 2 from r6c1 r6c5 r3c2 r4c2
 7:        * Cell r6c1 now has only one possible value: 6
 7:         - Removing candidate 6 from r6c5 r6c7
 7:        * Cell r6c5 now has only one possible value: 1
 7:         - Removing candidate 1 from r6c7 r1c5 r4c5 r9c5 r4c6
 7:        * Cell r6c7 now has only one possible value: 7
 7:         - Removing candidate 7 from r5c7
 7:        * Cell r5c7 now has only one possible value: 6
 7:         - Removing candidate 6 from r5c6 r8c7 r4c8
 7:        * Cell r5c6 now has only one possible value: 8
 7:         - Removing candidate 8 from r5c4 r2c6 r8c6
 7:        * Cell r5c4 now has only one possible value: 7
 7:        * Cell r2c6 now has only one possible value: 2
 7:         - Removing candidate 2 from r2c9 r4c6 r1c5
 7:        * Cell r2c9 now has only one possible value: 8
 7:         - Removing candidate 8 from r2c4 r1c9 r7c9 r8c9 r1c8 r3c8
 7:        * Cell r2c4 now has only one possible value: 4
 7:         - Removing candidate 4 from r3c4
 7:        * Cell r7c9 now has only one possible value: 5
 7:         - Removing candidate 5 from r7c2 r8c9
 7:        * Cell r7c2 now has only one possible value: 8
 7:         - Removing candidate 8 from r1c2 r3c2 r8c2 r8c1
 7:        * Cell r3c2 now has only one possible value: 9
 7:         - Removing candidate 9 from r3c8 r1c2
 7:        * Cell r3c8 now has only one possible value: 1
 7:         - Removing candidate 1 from r3c4 r3c7 r1c8 r4c8 r9c8 r1c9
 7:        * Cell r3c4 now has only one possible value: 8
 7:         - Removing candidate 8 from r3c1 r9c4 r1c5
 7:        * Cell r3c1 now has only one possible value: 2
 7:        * Cell r9c4 now has only one possible value: 1
 7:         - Removing candidate 1 from r8c6
 7:        * Cell r8c6 now has only one possible value: 6
 7:         - Removing candidate 6 from r4c6 r9c5
 7:        * Cell r9c5 now has only one possible value: 8
 7:         - Removing candidate 8 from r9c8
 7:        * Cell r9c8 now has only one possible value: 6
 7:        * Cell r3c7 now has only one possible value: 4
 7:        * Cell r1c8 now has only one possible value: 9
 7:         - Removing candidate 9 from r1c9 r4c8
 7:        * Cell r1c9 now has only one possible value: 2
 7:        * Cell r4c8 now has only one possible value: 9
 7:         - Removing candidate 9 from r4c9 r1c8
 7:        * Cell r4c9 now has only one possible value: 1
 7:         - Removing candidate 1 from r8c9
 7:        * Cell r1c2 now has only one possible value: 7
 7:         - Removing candidate 7 from r1c1 r8c2
 7:        * Cell r1c1 now has only one possible value: 8
 7:        * Cell r8c2 now has only one possible value: 5
 7:        * Cell r8c1 now has only one possible value: 7
 7:        * Cell r8c9 now has only one possible value: 1
 7:         - Removing candidate 1 from r8c7 r4c9
 7:        * Cell r4c6 now has only one possible value: 6
 7:         - Removing candidate 6 from r4c5 r8c6
 7:        * Cell r4c5 now has only one possible value: 2
 7:        * Cell r1c5 now has only one possible value: 8
 7:         - Removing candidate 8 from r1c1 r9c5 r3c4
 7:        * Cell r8c7 now has only one possible value: 1
 7:         - Removing candidate 1 from r8c9
 7:        * Cell r4c2 now has only one possible value: 3
 7:        ## Contradiction: Cell r1c1 has no valid candidates.
 7:        ## Backtracking...
 7:        ## Exhausted all candidates for cell r5c1 at level 7
 6:       ## Backtracking...
 6:       ## Level 6, trying r9c2=8
 6:       ## Current Hypothesis Summary: r5c3=5 r7c3=6 r1c3=4 r8c3=2 r9c1=3 r9c2=8
 6:       * Cell r8c1=7 by simple elimination.
 6:       * Cell r8c2=5 by simple elimination.
 6:       * Cell r7c2=4 by simple elimination.
 6:       * Cell r7c6=8 by simple elimination.
 6:       * Cell r7c8=3 by simple elimination.
 6:       * Cell r7c9=5 by simple elimination.
 6:       * Cell r9c4 is the only valid location in row 9 for digit 4
 6:        - Removing candidate 4 from r2c4 r3c4
 6:       * Cell r2c6 is the only valid location in column 6 for digit 4
 6:        - Removing candidate 4 from r2c7
 6:       * Cell r2c7 now has only one possible value: 3
 6:        - Removing candidate 3 from r2c4 r2c9 r5c7 r6c7 r1c9
 6:       * Cell r2c4 now has only one possible value: 8
 6:        - Removing candidate 8 from r2c9 r3c4 r5c4 r1c5
 6:       * Cell r2c9 now has only one possible value: 2
 6:        - Removing candidate 2 from r1c9
 6:       * Cell r3c4 now has only one possible value: 1
 6:        - Removing candidate 1 from r3c7 r3c8 r6c4 r1c5 r1c6
 6:       * Cell r3c7 now has only one possible value: 4
 6:       * Cell r1c5 now has only one possible value: 2
 6:        - Removing candidate 2 from r1c6 r4c5 r6c5
 6:       * Cell r1c6 now has only one possible value: 3
 6:        - Removing candidate 3 from r4c6 r5c6
 6:       * Cell r5c6 now has only one possible value: 6
 6:        - Removing candidate 6 from r5c1 r5c7 r4c6 r8c6 r4c5 r6c5
 6:       * Cell r5c1 now has only one possible value: 9
 6:        - Removing candidate 9 from r5c9 r1c1 r3c1 r4c2
 6:       * Cell r5c9 now has only one possible value: 3
 6:        - Removing candidate 3 from r5c4 r4c9
 6:       * Cell r5c4 now has only one possible value: 7
 6:        - Removing candidate 7 from r5c7 r6c4
 6:       * Cell r6c4 now has only one possible value: 3
 6:        - Removing candidate 3 from r6c2
 6:       * Cell r6c2 now has only one possible value: 2
 6:        - Removing candidate 2 from r6c1 r3c2 r4c2
 6:       * Cell r6c1 now has only one possible value: 6
 6:        - Removing candidate 6 from r6c7
 6:       * Cell r3c2 now has only one possible value: 9
 6:        - Removing candidate 9 from r3c8 r1c2
 6:       * Cell r3c8 now has only one possible value: 8
 6:        - Removing candidate 8 from r3c1 r1c8 r1c9
 6:       * Cell r3c1 now has only one possible value: 2
 6:       * Cell r1c2 now has only one possible value: 7
 6:       * Cell r4c2 now has only one possible value: 3
 6:       * Cell r1c1 now has only one possible value: 8
 6:       * Cell r5c7 now has only one possible value: 7
 6:        - Removing candidate 7 from r5c4 r6c7
 6:       * Cell r6c7 now has only one possible value: 1
 6:        - Removing candidate 1 from r6c5 r8c7 r4c8 r4c9
 6:       * Cell r8c7 now has only one possible value: 6
 6:        - Removing candidate 6 from r9c8
 6:       * Cell r9c8 now has only one possible value: 1
 6:        - Removing candidate 1 from r9c5 r1c8 r8c9
 6:       * Cell r9c5 now has only one possible value: 6
 6:       * Cell r1c8 now has only one possible value: 9
 6:        - Removing candidate 9 from r1c9 r4c8
 6:       * Cell r1c9 now has only one possible value: 1
 6:       * Cell r4c8 now has only one possible value: 6
 6:       * Cell r8c9 now has only one possible value: 8
 6:       * Cell r4c9 now has only one possible value: 9
 6:       * Cell r8c6 now has only one possible value: 1
 6:        - Removing candidate 1 from r4c6
 6:       * Cell r4c6 now has only one possible value: 2
 6:       * Cell r4c5 now has only one possible value: 1
 6:       * Cell r6c5 now has only one possible value: 1
 6:        - Removing candidate 1 from r6c7 r4c5
 6:       ## Contradiction: Cell r4c5 has no valid candidates.
 6:       ## Backtracking...
 6:       ## Exhausted all candidates for cell r9c2 at level 6
 5:      ## Backtracking...
 5:      ## Level 5, trying r9c1=8
 5:      ## Current Hypothesis Summary: r5c3=5 r7c3=6 r1c3=4 r8c3=2 r9c1=8
 5:      * Cell r8c1=7 by simple elimination.
 5:      * Cell r8c2=5 by simple elimination.
 5:      * Cell r1c1=9 by simple elimination.
 5:      * Cell r3c1=2 by simple elimination.
 5:      * Cell r3c2=8 by simple elimination.
 5:      * Cell r1c2=7 by simple elimination.
 5:      * Cell r7c9 is the only valid location in row 7 for digit 5
 5:      * Cell r1c5 is the only valid location in column 5 for digit 8
 5:       - Removing candidate 8 from r1c6 r1c8 r1c9 r2c4 r2c6
 5:      * Cell r7c8 is the only valid location in column 8 for digit 8
 5:       - Removing candidate 8 from r7c6 r8c9
 5:      * Cell r7c6 now has only one possible value: 4
 5:       - Removing candidate 4 from r7c2 r2c6 r9c4
 5:      * Cell r7c2 now has only one possible value: 3
 5:       - Removing candidate 3 from r4c2 r6c2 r9c2
 5:      * Cell r6c2 now has only one possible value: 2
 5:       - Removing candidate 2 from r6c5 r4c2
 5:      * Cell r4c2 now has only one possible value: 9
 5:       - Removing candidate 9 from r4c8 r4c9
 5:      * Cell r9c2 now has only one possible value: 4
 5:      * Cell r9c4 now has only one possible value: 1
 5:       - Removing candidate 1 from r9c5 r9c8 r3c4 r6c4 r8c6
 5:      * Cell r9c5 now has only one possible value: 6
 5:       - Removing candidate 6 from r9c8 r4c5 r6c5 r8c6
 5:      * Cell r9c8 now has only one possible value: 3
 5:       - Removing candidate 3 from r1c8 r4c8
 5:      * Cell r1c8 now has only one possible value: 1
 5:       - Removing candidate 1 from r1c6 r1c9 r3c8 r4c8 r3c7
 5:      * Cell r3c8 now has only one possible value: 9
 5:      * Cell r4c8 now has only one possible value: 6
 5:       - Removing candidate 6 from r4c6 r5c7 r6c7
 5:      * Cell r3c7 now has only one possible value: 4
 5:       - Removing candidate 4 from r3c4 r2c7
 5:      * Cell r2c7 now has only one possible value: 3
 5:       - Removing candidate 3 from r2c4 r2c6 r2c9 r5c7 r6c7 r1c9
 5:      * Cell r2c4 now has only one possible value: 4
 5:      * Cell r2c6 now has only one possible value: 2
 5:       - Removing candidate 2 from r2c9 r1c6 r4c6
 5:      * Cell r2c9 now has only one possible value: 8
 5:      * Cell r1c6 now has only one possible value: 3
 5:       - Removing candidate 3 from r4c6 r5c6
 5:      * Cell r4c6 now has only one possible value: 1
 5:       - Removing candidate 1 from r4c5 r4c9 r6c5
 5:      * Cell r4c5 now has only one possible value: 2
 5:      * Cell r4c9 now has only one possible value: 3
 5:       - Removing candidate 3 from r5c9
 5:      * Cell r5c9 now has only one possible value: 9
 5:      * Cell r5c7 now has only one possible value: 7
 5:       - Removing candidate 7 from r5c4 r6c7
 5:      * Cell r6c7 now has only one possible value: 1
 5:       - Removing candidate 1 from r8c7
 5:      * Cell r8c7 now has only one possible value: 6
 5:      * Cell r1c9 now has only one possible value: 2
 5:      * Cell r6c5 now has only one possible value: 1
 5:       - Removing candidate 1 from r6c7 r4c6
 5:      * Cell r8c6 now has only one possible value: 8
 5:       - Removing candidate 8 from r5c6
 5:      * Cell r5c6 now has only one possible value: 6
 5:       - Removing candidate 6 from r5c1
 5:      * Cell r5c1 now has only one possible value: 3
 5:       - Removing candidate 3 from r5c4 r6c1
 5:      * Cell r5c4 now has only one possible value: 8
 5:      * Cell r6c1 now has only one possible value: 6
 5:      * Cell r3c4 now has only one possible value: 4
 5:       - Removing candidate 4 from r3c7 r2c4
 5:      * Cell r8c9 now has only one possible value: 1
 5:      * Cell r6c4 is the only valid location in row 6 for digit 3
 5:      ## Contradiction: Cell r2c4 has no valid candidates.
 5:      ## Backtracking...
 5:      ## Exhausted all candidates for cell r9c1 at level 5
 4:     ## Backtracking...
 4:     ## Level 4, trying r8c3=7
 4:     ## Current Hypothesis Summary: r5c3=5 r7c3=6 r1c3=4 r8c3=7
 4:     * Cell r4c3=2 by simple elimination.
 4:     * Cell r6c2=3 by simple elimination.
 4:     * Cell r6c1=6 by simple elimination.
 4:     * Cell r5c1=9 by simple elimination.
 4:     * Cell r5c9=3 by simple elimination.
 4:     * Cell r4c2=7 by simple elimination.
 4:     * Cell r6c5 is the only valid location in row 6 for digit 2
 4:      - Removing candidate 2 from r1c5
 4:     * Cell r4c6 is the only valid location in row 4 for digit 3
 4:      - Removing candidate 3 from r1c6 r2c6
 4:     * Cell r7c8 is the only valid location in row 7 for digit 3
 4:      - Removing candidate 3 from r1c8 r9c8 r9c7
 4:     * Cell r9c1 is the only valid location in row 9 for digit 3
 4:     * Cell r2c4 is the only valid location in column 4 for digit 3
 4:      - Removing candidate 3 from r2c7
 4:     * Cell r1c1 is the only valid location in row 1 for digit 7
 4:     Sparse Subset: In row 1, the digits 1 2 8 9 must go in cells r1c2 r1c5 r1c6 r1c8 (unspecified order)
 4:     These digits can then be eliminated from the other cells in row 1
 4:      - Removing candidate(s) 1 2 8 9 from cell r1c9
 4:     Sparse Subset: In row 1, the digits 1 2 8 9 must go in cells r1c2 r1c5 r1c6 r1c9 (unspecified order)
 4:     These digits can then be eliminated from the other cells in row 1
 4:      - Removing candidate(s) 1 8 9 from cell r1c8
 4:     Sparse Subset: In row 1, the digits 1 2 8 9 must go in cells r1c2 r1c5 r1c8 r1c9 (unspecified order)
 4:     These digits can then be eliminated from the other cells in row 1
 4:      - Removing candidate(s) 1 2 8 from cell r1c6
 4:     Sparse Subset: In row 1, the digits 1 2 8 9 must go in cells r1c2 r1c6 r1c8 r1c9 (unspecified order)
 4:     These digits can then be eliminated from the other cells in row 1
 4:      - Removing candidate(s) 1 8 from cell r1c5
 4:     Sparse Subset: In row 1, the digits 1 2 8 9 must go in cells r1c5 r1c6 r1c8 r1c9 (unspecified order)
 4:     These digits can then be eliminated from the other cells in row 1
 4:      - Removing candidate(s) 2 8 9 from cell r1c2
 4:     Sparse Subset: In column 2, the digits 2 4 5 8 must go in cells r1c2 r7c2 r8c2 r9c2 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 2
 4:      - Removing candidate(s) 2 8 from cell r3c2
 4:     Sparse Subset: In column 6, the digits 2 4 8 must go in cells r1c6 r2c6 r7c6 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 6
 4:      - Removing candidate(s) 8 from cell r5c6
 4:      - Removing candidate(s) 8 from cell r8c6
 4:     Sparse Subset: In column 6, the digits 4 6 8 must go in cells r1c6 r5c6 r7c6 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 6
 4:      - Removing candidate(s) 4 8 from cell r2c6
 4:      - Removing candidate(s) 6 from cell r8c6
 4:     Sparse Subset: In column 6, the digits 1 6 8 must go in cells r1c6 r5c6 r8c6 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 6
 4:      - Removing candidate(s) 8 from cell r7c6
 4:     Sparse Subset: In column 7, the digits 1 2 4 6 must go in cells r2c7 r3c7 r8c7 r9c7 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 7
 4:      - Removing candidate(s) 6 from cell r5c7
 4:      - Removing candidate(s) 1 from cell r6c7
 4:     Sparse Subset: In column 7, the digits 1 2 6 7 must go in cells r5c7 r6c7 r8c7 r9c7 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 7
 4:      - Removing candidate(s) 2 from cell r2c7
 4:      - Removing candidate(s) 1 2 from cell r3c7
 4:     Sparse Subset: In column 7, the digits 1 2 4 6 7 must go in cells r2c7 r3c7 r5c7 r6c7 r8c7 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 7
 4:      - Removing candidate(s) 1 2 6 from cell r9c7
 4:     Sparse Subset: In column 7, the digits 1 2 4 6 7 must go in cells r2c7 r3c7 r5c7 r6c7 r9c7 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 7
 4:      - Removing candidate(s) 1 2 6 from cell r8c7
 4:     Sparse Subset: In column 7, the digits 1 2 4 6 7 must go in cells r2c7 r3c7 r5c7 r8c7 r9c7 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 7
 4:      - Removing candidate(s) 7 from cell r6c7
 4:     Sparse Subset: In column 7, the digits 1 2 4 6 7 must go in cells r2c7 r3c7 r6c7 r8c7 r9c7 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 7
 4:      - Removing candidate(s) 7 from cell r5c7
 4:     Sparse Subset: In column 7, the digits 1 2 4 6 7 must go in cells r2c7 r5c7 r6c7 r8c7 r9c7 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 7
 4:      - Removing candidate(s) 4 from cell r3c7
 4:     Sparse Subset: In column 7, the digits 1 2 4 6 7 must go in cells r3c7 r5c7 r6c7 r8c7 r9c7 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 7
 4:      - Removing candidate(s) 4 from cell r2c7
 4:     Sparse Subset: In column 9, the digits 2 5 8 must go in cells r1c9 r2c9 r7c9 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 9
 4:      - Removing candidate(s) 2 5 8 from cell r8c9
 4:     Sparse Subset: In column 9, the digits 1 2 5 8 must go in cells r1c9 r2c9 r7c9 r8c9 (unspecified order)
 4:     These digits can then be eliminated from the other cells in column 9
 4:      - Removing candidate(s) 1 from cell r4c9
 4:     Sparse Subset: In block 3, the digits 1 8 9 must go in cells r1c8 r1c9 r3c8 (unspecified order)
 4:     These digits can then be eliminated from the other cells in block 3
 4:      - Removing candidate(s) 8 from cell r2c9
 4:     Sparse Subset: In block 9, the digits 1 6 8 must go in cells r8c7 r9c7 r9c8 (unspecified order)
 4:     These digits can then be eliminated from the other cells in block 9
 4:      - Removing candidate(s) 8 from cell r7c9
 4:     * Cell r2c6 now has only one possible value: 2
 4:      - Removing candidate 2 from r2c9
 4:     * Cell r3c2 now has only one possible value: 9
 4:      - Removing candidate 9 from r3c8
 4:     * Cell r4c9 now has only one possible value: 9
 4:      - Removing candidate 9 from r4c8
 4:     * Cell r5c6 now has only one possible value: 6
 4:      - Removing candidate 6 from r4c5
 4:     * Cell r4c5 now has only one possible value: 1
 4:      - Removing candidate 1 from r4c8 r9c5 r6c4
 4:     * Cell r4c8 now has only one possible value: 6
 4:      - Removing candidate 6 from r9c8
 4:     * Cell r6c4 now has only one possible value: 7
 4:      - Removing candidate 7 from r5c4
 4:     * Cell r5c4 now has only one possible value: 8
 4:      - Removing candidate 8 from r3c4 r9c4
 4:     * Cell r7c6 now has only one possible value: 4
 4:      - Removing candidate 4 from r7c2 r9c4
 4:     * Cell r9c4 now has only one possible value: 1
 4:      - Removing candidate 1 from r9c8 r3c4 r8c6
 4:     * Cell r9c8 now has only one possible value: 8
 4:      - Removing candidate 8 from r9c2 r9c5 r3c8
 4:     * Cell r9c5 now has only one possible value: 6
 4:     * Cell r3c8 now has only one possible value: 1
 4:     * Cell r3c4 now has only one possible value: 4
 4:     * Cell r7c9 now has only one possible value: 5
 4:      - Removing candidate 5 from r7c2
 4:     * Cell r7c2 now has only one possible value: 8
 4:      - Removing candidate 8 from r8c2 r8c1
 4:     * Cell r8c1 now has only one possible value: 2
 4:      - Removing candidate 2 from r8c2 r3c1 r9c2
 4:     * Cell r8c2 now has only one possible value: 5
 4:     * Cell r3c1 now has only one possible value: 8
 4:     * Cell r9c2 now has only one possible value: 4
 4:     * Cell r8c9 now has only one possible value: 1
 4:     ## Contradiction: Cell r1c2 has no valid candidates.
 4:     ## Backtracking...
 4:     ## Exhausted all candidates for cell r8c3 at level 4
 3:    ## Backtracking...
 3:    ## Exhausted all candidates for cell r1c3 at level 3
 2:   ## Backtracking...
 2:   ## Exhausted all candidates for cell r7c3 at level 2


*****************
At this point it is determined that r5c3<>5 because all preceding
logic & nested guesses have resulted in contradiction.
*****************


 1:  ## Backtracking...
 1:  ## Level 1, trying r5c3=6
 1:  ## Current Hypothesis Summary: r5c3=6
 1:  Sparse Subset: In row 5, the digits 3 7 8 must go in cells r5c4 r5c6 r5c7 (unspecified order)
 1:  These digits can then be eliminated from the other cells in row 5
 1:   - Removing candidate(s) 3 from cell r5c1
 1:   - Removing candidate(s) 3 from cell r5c9
 2:   ## All Logic Strategies exhausted at level 1. Starting new branch level 2.
 2:   ## Choosing cell having fewest candidates: r5c6: [3,8]
 2:   ## Level 2, trying r5c6=3
 2:   ## Current Hypothesis Summary: r5c3=6 r5c6=3
 2:   * Cell r5c7=7 by simple elimination.
 2:   * Cell r5c4=8 by simple elimination.
 2:   * Cell r2c4 is the only valid location in column 4 for digit 3
 2:    - Removing candidate 3 from r2c7 r2c9
 2:   * Cell r6c4 is the only valid location in row 6 for digit 7
 2:   X-wing: In columns 1 & 7, digit 3 must go in row 6 or 9
 2:   Therefore candidate 3 can be removed from all other cells in rows 6 & 9
 2:   Removing candidate 3 from r6c2 r9c2 r6c8 r9c8
 3:    ## All Logic Strategies exhausted at level 2. Starting new branch level 3.
 3:    ## Choosing cell having fewest candidates: r5c1: [5,9]
 3:    ## Level 3, trying r5c1=5
 3:    ## Current Hypothesis Summary: r5c3=6 r5c6=3 r5c1=5
 3:    * Cell r5c9=9 by simple elimination.
 3:    * Cell r6c2=2 by simple elimination.
 3:    * Cell r4c3=7 by simple elimination.
 3:    * Cell r6c1=3 by simple elimination.
 3:    * Cell r9c7 is the only valid location in row 9 for digit 3
 3:     - Removing candidate 3 from r7c8 r7c9
 3:    * Cell r7c2 is the only valid location in block 7 for digit 3
 3:     - Removing candidate 3 from r4c2
 3:    * Cell r2c3 is the only valid location in row 2 for digit 5
 3:     - Removing candidate 5 from r7c3 r8c3
 3:    * Cell r7c3 now has only one possible value: 4
 3:     - Removing candidate 4 from r7c6 r1c3 r9c2
 3:    * Cell r9c2 now has only one possible value: 8
 3:     - Removing candidate 8 from r9c1 r9c5 r9c8 r1c2 r3c2 r8c2 r8c1
 3:    * Cell r8c3 now has only one possible value: 2
 3:     - Removing candidate 2 from r8c1 r8c7 r8c9 r1c3 r9c1
 3:    * Cell r9c1 now has only one possible value: 6
 3:     - Removing candidate 6 from r9c5 r9c8 r8c1
 3:    * Cell r9c5 now has only one possible value: 1
 3:     - Removing candidate 1 from r9c4 r9c8 r1c5 r4c5 r6c5 r8c6
 3:    * Cell r9c4 now has only one possible value: 4
 3:     - Removing candidate 4 from r3c4
 3:    * Cell r3c4 now has only one possible value: 1
 3:     - Removing candidate 1 from r3c7 r3c8 r1c6 r2c6
 3:    * Cell r6c5 now has only one possible value: 6
 3:     - Removing candidate 6 from r6c7 r6c8 r4c5 r4c6
 3:    * Cell r6c7 now has only one possible value: 1
 3:     - Removing candidate 1 from r6c8 r2c7 r8c7 r4c8 r4c9
 3:    * Cell r6c8 now has only one possible value: 5
 3:     - Removing candidate 5 from r7c8
 3:    * Cell r8c7 now has only one possible value: 6
 3:     - Removing candidate 6 from r8c6 r7c8
 3:    * Cell r8c6 now has only one possible value: 8
 3:     - Removing candidate 8 from r8c9 r1c6 r2c6 r7c6
 3:    * Cell r7c6 now has only one possible value: 6
 3:    * Cell r7c8 now has only one possible value: 8
 3:     - Removing candidate 8 from r7c9 r1c8 r3c8
 3:    * Cell r7c9 now has only one possible value: 5
 3:     - Removing candidate 5 from r8c9
 3:    * Cell r8c9 now has only one possible value: 1
 3:     - Removing candidate 1 from r1c9 r2c9
 3:    * Cell r3c8 now has only one possible value: 9
 3:     - Removing candidate 9 from r3c1 r3c2 r1c8
 3:    * Cell r3c2 now has only one possible value: 4
 3:     - Removing candidate 4 from r3c7 r1c2
 3:    * Cell r3c7 now has only one possible value: 2
 3:     - Removing candidate 2 from r3c1 r2c7 r1c9 r2c9
 3:    * Cell r3c1 now has only one possible value: 8
 3:     - Removing candidate 8 from r1c1 r2c1
 3:    * Cell r2c1 now has only one possible value: 2
 3:     - Removing candidate 2 from r2c6 r1c1
 3:    * Cell r2c6 now has only one possible value: 4
 3:     - Removing candidate 4 from r2c7 r1c6
 3:    * Cell r1c6 now has only one possible value: 2
 3:     - Removing candidate 2 from r1c5 r4c6
 3:    * Cell r1c5 now has only one possible value: 8
 3:     - Removing candidate 8 from r1c9
 3:    * Cell r1c9 now has only one possible value: 3
 3:     - Removing candidate 3 from r1c8 r4c9
 3:    * Cell r1c8 now has only one possible value: 1
 3:     - Removing candidate 1 from r1c3
 3:    * Cell r1c3 now has only one possible value: 7
 3:     - Removing candidate 7 from r1c1 r1c2 r4c3
 3:    * Cell r1c1 now has only one possible value: 9
 3:     - Removing candidate 9 from r1c2
 3:    * Cell r1c2 now has only one possible value: 9
 3:     - Removing candidate 9 from r1c1 r4c2
 3:    * Cell r4c2 now has only one possible value: 7
 3:     - Removing candidate 7 from r8c2
 3:    * Cell r8c2 now has only one possible value: 5
 3:    * Cell r4c6 now has only one possible value: 1
 3:    * Cell r2c7 now has only one possible value: 4
 3:     - Removing candidate 4 from r2c6
 3:    * Cell r2c9 now has only one possible value: 8
 3:    * Cell r4c9 now has only one possible value: 3
 3:     - Removing candidate 3 from r4c8 r1c9
 3:    * Cell r4c8 now has only one possible value: 6
 3:    * Cell r4c5 now has only one possible value: 2
 3:    * Cell r9c8 now has only one possible value: 1
 3:     - Removing candidate 1 from r9c5 r1c8 r8c9
 3:    * Cell r8c1 now has only one possible value: 7
 3:    ## Contradiction: Cell r1c1 has no valid candidates.
 3:    ## Backtracking...
 3:    ## Level 3, trying r5c1=9
 3:    ## Current Hypothesis Summary: r5c3=6 r5c6=3 r5c1=9
 3:    * Cell r5c9=5 by simple elimination.
 3:    * Cell r7c8 is the only valid location in column 8 for digit 5
 3:     - Removing candidate 5 from r7c2 r7c3
 3:    * Cell r7c3 now has only one possible value: 4
 3:     - Removing candidate 4 from r7c2 r7c6 r1c3 r2c3 r9c2
 3:    * Cell r7c6 is the only valid location in row 7 for digit 6
 3:     - Removing candidate 6 from r4c6 r8c6 r9c5
 3:    * Cell r9c4 is the only valid location in row 9 for digit 4
 3:     - Removing candidate 4 from r3c4
 3:    * Cell r3c4 now has only one possible value: 1
 3:     - Removing candidate 1 from r3c7 r3c8 r1c5 r1c6 r2c6
 3:    Sparse Subset: In column 2, the digits 2 3 5 7 8 must go in cells r4c2 r6c2 r7c2 r8c2 r9c2 (unspecified order)
 3:    These digits can then be eliminated from the other cells in column 2
 3:     - Removing candidate(s) 2 7 8 from cell r1c2
 3:     - Removing candidate(s) 2 8 from cell r3c2
 3:    Box/Line: In column 2, the only valid positions for digit 8 are r7c2 r8c2 r9c2
 3:     - Removing candidate 8 from block 7 r8c1 r9c1
 4:     ## All Logic Strategies exhausted at level 3. Starting new branch level 4.
 4:     ## Choosing cell having fewest candidates: r9c5: [1,8]
 4:     ## Level 4, trying r9c5=1
 4:     ## Current Hypothesis Summary: r5c3=6 r5c6=3 r5c1=9 r9c5=1
 4:     * Cell r8c6=8 by simple elimination.
 4:     * Cell r4c6 is the only valid location in column 6 for digit 1
 4:      - Removing candidate 1 from r4c8 r4c9
 4:     * Cell r1c5 is the only valid location in column 5 for digit 8
 4:      - Removing candidate 8 from r1c1 r1c8 r1c9
 5:      ## All Logic Strategies exhausted at level 4. Starting new branch level 5.
 5:      ## Choosing cell having fewest candidates: r1c1: [2,7]
 5:      ## Level 5, trying r1c1=2
 5:      ## Current Hypothesis Summary: r5c3=6 r5c6=3 r5c1=9 r9c5=1 r1c1=2
 5:      * Cell r1c6=4 by simple elimination.
 5:      * Cell r2c6=2 by simple elimination.
 5:      * Cell r3c1=8 by simple elimination.
 5:      * Cell r3c8=9 by simple elimination.
 5:      * Cell r1c2=9 by simple elimination.
 5:      * Cell r2c1=5 by simple elimination.
 5:      * Cell r2c3=1 by simple elimination.
 5:      * Cell r2c7=4 by simple elimination.
 5:      * Cell r2c9=8 by simple elimination.
 5:      * Cell r3c2=4 by simple elimination.
 5:      * Cell r3c7=2 by simple elimination.
 5:      * Cell r6c1=3 by simple elimination.
 5:      * Cell r7c9=3 by simple elimination.
 5:      * Cell r9c1=6 by simple elimination.
 5:      * Cell r9c8=8 by simple elimination.
 5:      * Cell r1c3=7 by simple elimination.
 5:      * Cell r1c9=1 by simple elimination.
 5:      * Cell r4c3=2 by simple elimination.
 5:      * Cell r4c5=6 by simple elimination.
 5:      * Cell r4c8=3 by simple elimination.
 5:      * Cell r4c9=9 by simple elimination.
 5:      * Cell r6c2=5 by simple elimination.
 5:      * Cell r6c5=2 by simple elimination.
 5:      * Cell r7c2=8 by simple elimination.
 5:      * Cell r8c1=7 by simple elimination.
 5:      * Cell r8c2=2 by simple elimination.
 5:      * Cell r8c3=5 by simple elimination.
 5:      * Cell r4c2=7 by simple elimination.
 5:      * Cell r8c7 is the only valid location in row 8 for digit 1
 5:       - Removing candidate 1 from r6c7
 5:      * Cell r6c7 now has only one possible value: 6
 5:       - Removing candidate 6 from r6c8
 5:      * Cell r6c8 now has only one possible value: 1
 5:      ## Contradiction: Cell r1c8 has no valid candidates.
 5:      ## Backtracking...
 5:      ## Level 5, trying r1c1=7
 5:      ## Current Hypothesis Summary: r5c3=6 r5c6=3 r5c1=9 r9c5=1 r1c1=7
 6:       ## All Logic Strategies exhausted at level 5. Starting new branch level 6.
 6:       ## Choosing cell having fewest candidates: r1c2: [4,9]
 6:       ## Level 6, trying r1c2=4
 6:       ## Current Hypothesis Summary: r5c3=6 r5c6=3 r5c1=9 r9c5=1 r1c1=7 r1c2=4
 6:       * Cell r1c6=2 by simple elimination.
 6:       * Cell r2c6=4 by simple elimination.
 6:       * Cell r3c2=9 by simple elimination.
 6:       * Cell r3c8=8 by simple elimination.
 6:       * Cell r9c8=6 by simple elimination.
 6:       * Cell r1c3=1 by simple elimination.
 6:       * Cell r3c1=2 by simple elimination.
 6:       * Cell r3c7=4 by simple elimination.
 6:       * Cell r6c8=1 by simple elimination.
 6:       * Cell r9c1=3 by simple elimination.
 6:       * Cell r9c7=2 by simple elimination.
 6:       * Cell r2c3=5 by simple elimination.
 6:       * Cell r2c7=1 by simple elimination.
 6:       * Cell r2c9=2 by simple elimination.
 6:       * Cell r6c1=5 by simple elimination.
 6:       * Cell r6c2=2 by simple elimination.
 6:       * Cell r6c5=6 by simple elimination.
 6:       * Cell r6c7=3 by simple elimination.
 6:       * Cell r7c2=8 by simple elimination.
 6:       * Cell r7c9=3 by simple elimination.
 6:       * Cell r8c1=6 by simple elimination.
 6:       * Cell r8c9=1 by simple elimination.
 6:       * Cell r1c9=9 by simple elimination.
 6:       * Cell r2c1=8 by simple elimination.
 6:       * Cell r4c3=7 by simple elimination.
 6:       * Cell r4c5=2 by simple elimination.
 6:       * Cell r4c8=9 by simple elimination.
 6:       * Cell r8c3=2 by simple elimination.
 6:       * Cell r1c8=3 by simple elimination.
 6:       * Cell r4c2=3 by simple elimination.
 6:       * Cell r8c2 is the only valid location in row 8 for digit 5
 6:       ## Contradiction: Cell r4c9 has no valid candidates.
 6:       ## Backtracking...
 6:       ## Level 6, trying r1c2=9
 6:       ## Current Hypothesis Summary: r5c3=6 r5c6=3 r5c1=9 r9c5=1 r1c1=7 r1c2=9
 6:       * Cell r3c2=4 by simple elimination.
 6:       * Cell r3c7=2 by simple elimination.
 6:       * Cell r3c1=8 by simple elimination.
 6:       * Cell r3c8=9 by simple elimination.
 6:       * Cell r8c9 is the only valid location in column 9 for digit 2
 6:        - Removing candidate 2 from r8c1 r8c2 r8c3
 6:       * Cell r1c6 is the only valid location in row 1 for digit 4
 6:        - Removing candidate 4 from r2c6
 6:       * Cell r2c6 now has only one possible value: 2
 6:        - Removing candidate 2 from r2c1 r2c3
 6:       * Cell r2c7 is the only valid location in row 2 for digit 4
 6:       * Cell r9c8 is the only valid location in column 8 for digit 8
 6:        - Removing candidate 8 from r9c2 r7c9
 6:       * Cell r9c2 now has only one possible value: 2
 6:        - Removing candidate 2 from r9c1 r4c2 r6c2
 6:       * Cell r6c2 now has only one possible value: 5
 6:        - Removing candidate 5 from r6c1 r8c2
 6:       * Cell r8c2 now has only one possible value: 7
 6:        - Removing candidate 7 from r8c3 r4c2
 6:       * Cell r8c3 now has only one possible value: 5
 6:        - Removing candidate 5 from r8c1 r2c3
 6:       * Cell r8c1 now has only one possible value: 6
 6:        - Removing candidate 6 from r8c7 r9c1
 6:       * Cell r8c7 now has only one possible value: 1
 6:        - Removing candidate 1 from r6c7
 6:       * Cell r9c1 now has only one possible value: 3
 6:        - Removing candidate 3 from r9c7 r6c1 r7c2
 6:       * Cell r9c7 now has only one possible value: 6
 6:        - Removing candidate 6 from r6c7
 6:       * Cell r6c7 now has only one possible value: 3
 6:        - Removing candidate 3 from r4c8 r4c9
 6:       * Cell r4c8 now has only one possible value: 6
 6:        - Removing candidate 6 from r4c5 r6c8
 6:       * Cell r4c5 now has only one possible value: 2
 6:        - Removing candidate 2 from r4c3 r6c5
 6:       * Cell r4c3 now has only one possible value: 7
 6:       * Cell r6c5 now has only one possible value: 6
 6:       * Cell r6c8 now has only one possible value: 1
 6:        - Removing candidate 1 from r1c8
 6:       * Cell r1c8 now has only one possible value: 3
 6:        - Removing candidate 3 from r1c9
 6:       * Cell r1c9 now has only one possible value: 1
 6:        - Removing candidate 1 from r1c3 r2c9
 6:       * Cell r1c3 now has only one possible value: 2
 6:       * Cell r2c9 now has only one possible value: 8
 6:        - Removing candidate 8 from r2c1
 6:       * Cell r2c1 now has only one possible value: 5
 6:       * Cell r4c9 now has only one possible value: 9
 6:       * Cell r6c1 now has only one possible value: 2
 6:       * Cell r7c2 now has only one possible value: 8
 6:       * Cell r2c3 now has only one possible value: 1
 6:       * Cell r4c2 now has only one possible value: 3
 6:       * Cell r7c9 now has only one possible value: 3
 6:       ## Puzzle Solved.

About 4/5ths of the way down the listing is where it ultimately determines that r5c3<>5.
RSW
 
Posts: 618
Joined: 01 December 2018
Location: Western Canada

Re: Help for Weekly Unsolvable #324

Postby eleven » Mon Dec 10, 2018 8:08 pm

SpAce wrote:
I recently mentioned an alternative to trying a bivalue/bilocation candidate:
Choose a unit with few possible outcomes and try them one after the other.

That seems like a very viable option. Works quite nicely here at least. Thanks for bringing it up!

Probably i was just lucky with column 5.
I started to try it with box 2, in the hope, it would lead to easier sub-puzzles with 5 open cells (and more tries), but then realized, that even with a filled box you need harder techniques to complete the puzzle.
eleven
 
Posts: 3097
Joined: 10 February 2008

Re: Help for Weekly Unsolvable #324

Postby SpAce » Tue Dec 11, 2018 10:11 am

champagne wrote:here is the pointer to the last current post of the thread where this topic was discussed. My current brute force is derived from this code

Cool, thanks! I skimmed the thread, but didn't much understand about the details. Is the idea of the algorithm explained anywhere in plain English? Otherwise I doubt I'd understand much of the code (not that I really need to, right now at least). Seems pretty darn fast, anyway!

StrmCkr wrote:yeah, a hybrid approach that optimizes early eliminations by basic techniques up to a point then pigeon holes the search matrix to reduce the number of matrix's the dlx must cycle through to shorten the dead end pass

Is that what the above mentioned algorithm is about?
User avatar
SpAce
 
Posts: 2671
Joined: 22 May 2017

Re: Help for Weekly Unsolvable #324

Postby StrmCkr » Tue Dec 11, 2018 10:24 am

StrmCkr wrote:
yeah, a hybrid approach that optimizes early eliminations by basic techniques up to a point then pigeon holes the search matrix to reduce the number of matrix's the dlx must cycle through to shorten the dead end pass


Is that what the above mentioned algorithm is about?
in short yes, its a streamlined DLX.
Some do, some teach, the rest look it up.
stormdoku
User avatar
StrmCkr
 
Posts: 1425
Joined: 05 September 2006

Re: Help for Weekly Unsolvable #324

Postby champagne » Tue Dec 11, 2018 12:09 pm

SpAce wrote:
champagne wrote:here is the pointer to the last current post of the thread where this topic was discussed. My current brute force is derived from this code

Cool, thanks! I skimmed the thread, but didn't much understand about the details. Is the idea of the algorithm explained anywhere in plain English? Otherwise I doubt I'd understand much of the code (not that I really need to, right now at least). Seems pretty darn fast, anyway!


The key point is clearly zhouyundong_2012 update step.
in the frame used by him, the puzzle is split in 9 "digits" of "3 bands for each digit"

each band;digit is analyzed using lookup tables to see whether

Code: Select all
a.1) the band is valid
a.2) the band can be cleaned applying the logical rules* 
  locked in box
  locked in row
b) other bands of the digits are cleaned applying the same rule in column
c) new assigned rows of the bands are identified and the corresponding cleaning is done for other digits.


this is the main contribution of zhouyundong_2012

When all possible cleanings using this process is covered, a guess is needed, unless a cell with only one possible digit shows up.
if such a cell appears, the process can loop.

The guess strategy can vary, but in the last described "brute force"
. priority is given to a bi-value cell
. then a bi-value in row or b0x
....
champagne
2017 Supporter
 
Posts: 7357
Joined: 02 August 2007
Location: France Brittany

Re: Help for Weekly Unsolvable #324

Postby SpAce » Tue Dec 11, 2018 11:14 pm

Thanks, champagne and StrmCkr!
User avatar
SpAce
 
Posts: 2671
Joined: 22 May 2017

Re: Help for Weekly Unsolvable #324

Postby StrmCkr » Wed Dec 12, 2018 12:26 am

a.1) the band is valid
a.2) the band can be cleaned applying the logical rules*
locked in box
locked in row
b) other bands of the digits are cleaned applying the same rule in column
c) new assigned rows of the bands are identified and the corresponding cleaning is done for other digits.


wouldn't the same effect apply to stacks as well?
Some do, some teach, the rest look it up.
stormdoku
User avatar
StrmCkr
 
Posts: 1425
Joined: 05 September 2006

PreviousNext

Return to Help with puzzles and solving techniques