In the general paradigm of CSP-Rules and its SudoRules application, each time a candidate is eliminated, the simplest available rule is chosen for the next step and applied. As a result, some patterns that allow multiple eliminations may be interrupted by a simpler rule after only part of these eliminations have been effected. This typically happens with Subsets.
As a nicety leading to shorter and more readable resolution paths, I have introduced a new option in SudoRules, allowing a Subset (Naked, Hidden or Super-Hidden, and also Finned Fish) to suspend the application of all the other rules and to eliminate all its targets at once.
If a resolution theory (a set of resolution rules) chosen for solving a puzzle has the confluence property, this may change the resolution path but this cannot change the final rating with respect to this theory: it is obtained at the end of any resolution path. If whips or g-whips are activated but not braids or g-braids, this may change the resolution path and lead to an apparently different W+S or gW+S rating, but this happens very rarely.
I've also introduced this option in the other applications of CSP-Rules that use Subsets [LatinRules, FutoRules, KakuRules and HidatoRules (tests in progress)]
As an example of the difference, consider the following puzzle:
..9.2.48.6....89..82..9...1.9.......7.8...1.2.......7.9...7..65..61....9.52.6.8..
- Code: Select all
..9.2.48.
6....89..
82..9...1
.9.......
7.8...1.2
.......7.
9...7..65
..61....9
.52.6.8..
Activating only Singles, Whips[1] (= claiming+pointing), Subsets and FinnedFish, the two resolution paths start the same way:
- Code: Select all
singles ==> r9c9 = 7, r2c9 = 3, r1c9 = 6, r3c8 = 5, r2c8 = 2, r3c7 = 7, r2c3 = 7, r8c2 = 7, r7c2 = 8, r7c3 = 1, r9c8 = 1, r8c8 = 4, r4c8 = 3, r5c8 = 9, r8c1 = 3, r8c7 = 2, r7c7 = 3, r8c6 = 5, r8c5 = 8, r9c1 = 4, r1c1 = 5
whip[1]: c5n3{r6 .} ==> r6c6 ≠ 3, r6c4 ≠ 3
whip[1]: c1n1{r6 .} ==> r6c2 ≠ 1
whip[1]: c5n3{r6 .} ==> r5c6 ≠ 3
whip[1]: r5n5{c5 .} ==> r6c5 ≠ 5, r6c4 ≠ 5
whip[1]: c5n3{r6 .} ==> r5c4 ≠ 3
whip[1]: r5n5{c5 .} ==> r4c5 ≠ 5, r4c4 ≠ 5
At this point, a hidden quad appears in the central block for digits 2789:
- Code: Select all
24678 14 12467
456 345 46
24689 134 12469
and the usual version of SudoRules gives:
- Code: Select all
hidden-quads-in-a-block: b5{r6c6 r4c6 r4c4 r6c4}{n2 n7 n8 n9} ==> r6c6 ≠ 6
hidden-quads-in-a-block: b5{r6c6 r4c6 r4c4 r6c4}{n2 n7 n8 n9} ==> r6c6 ≠ 4
hidden-quads-in-a-block: b5{r6c6 r4c6 r4c4 r6c4}{n2 n7 n8 n9} ==> r6c6 ≠ 1
hidden-pairs-in-a-column: c6{n1 n7}{r1 r4} ==> r4c6 ≠ 6
hidden-pairs-in-a-column: c6{n1 n7}{r1 r4} ==> r4c6 ≠ 4
hidden-pairs-in-a-column: c6{n1 n7}{r1 r4} ==> r4c6 ≠ 2
hidden-pairs-in-a-column: c6{n1 n7}{r1 r4} ==> r1c6 ≠ 3
hidden-triplets-in-a-block: b5{r6c6 r4c4 r6c4}{n2 n8 n9} ==> r6c4 ≠ 6
hidden-triplets-in-a-block: b5{r6c6 r4c4 r6c4}{n2 n8 n9} ==> r6c4 ≠ 4
hidden-triplets-in-a-block: b5{r6c6 r4c4 r6c4}{n2 n8 n9} ==> r4c4 ≠ 7
stte
which I usually simplify manually for publication to:
- Code: Select all
hidden-quads-in-a-block: b5{r6c6 r4c6 r4c4 r6c4}{n2 n7 n8 n9} ==> r6c6 ≠ 6, r6c6 ≠ 4, r6c6 ≠ 1
hidden-pairs-in-a-column: c6{n1 n7}{r1 r4} ==> r4c6 ≠ 6, r4c6 ≠ 4, r4c6 ≠ 2, r1c6 ≠ 3
hidden-triplets-in-a-block: b5{r6c6 r4c4 r6c4}{n2 n8 n9} ==> r6c4 ≠ 6, r6c4 ≠ 4, r4c4 ≠ 7
stte
It's interesting to notice that the hidden-triplets is a degenerated part of the original hidden quad. It illustrates the idea that in a resolution theory with the confluence property (as chosen here), if a rule (hidden-quads) is no longer available to make eliminations that it could have done but it has not done (because it has been interrupted or for any other reason), there will always be other rules available to do these eliminations.
If the new option is chosen, we get instead (with no manual change):
- Code: Select all
hidden-quads-in-a-block: b5{r6c6 r4c6 r4c4 r6c4}{n2 n7 n8 n9} ==> r6c6 ≠ 6, r6c6 ≠ 4, r6c6 ≠ 1, r6c4 ≠ 6, r6c4 ≠ 4, r4c6 ≠ 6, r4c6 ≠ 4, r4c6 ≠ 1, r4c4 ≠ 6, r4c4 ≠ 4
stte