Form (1) occurs when an adjacent left-hand (parent) and right-hand (child) ALS share cells.
Form (2) occurs when a chain is formed and non-adjacent members of the chain share cells.
Form (1) is valid as long as the shared cells do not contain any RCD(s).
Form (2) is valid provided the start ALS and the end ALS are not identical (loop). This is still under investigation.
This fortuitous bug opened up ALS chains and provided many more potential eliminations due to these new overlapping possibilities. Using the Royle17 (36628) puzzle set as a standard collection to test against, my new ALS engine reports:
- Code: Select all
34933 normal ALSs, 18391 overlapping ALSs, 1484 cannibalistic ALSs, 2830 overlapping/cannibalistic ALSs, 348 SDCs and 8 cannibalistic SDCs.
In discussion with ronk and hobiwan, I have to qualify the SDC categorizations. I assumed that all SDCs could be derived as dual-link ALS chains, but my code to classify one as an SDC is defective. As a result, anything reported by the engine as an SDC should just be considered a "normal" dual-linked ALS.
The following is from the solution log for Royle17 #40:
- Code: Select all
Royle17 #40 after simple eliminations:
8 B27-9 A29 |4 6 3 |79 1 5
A46 B457-6 57-6 |9 1 2 |67 8 3
3 AB69 1 |7 8 5 |69 4 2
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
7 8 4 |2 5 6 |3 9 1
9 B56 56 |1 3 7 |4 2 8
1 23 23 |8 9 4 |5 7 6
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
5 B79 8 |6 4 1 |2 3 79
2 34-9 39 |5 7 8 |1 6 49
46 1 67 |3 2 9 |8 5 47
do_alschains - graph contains 104 vertices and 1388 edges
do_alschains - reducing r2c2.<4567> by <6> dual
do_alschains - reducing r2c3.<567> by <6> dual
do_alschains - reducing r1c2.<279> by <9> dual
do_alschains - reducing r8c2.<349> by <9> dual
do_alschains - sdc+c[2x6/6] b1x348.<2469> +24+ r12357c2.<245679>
Not an SDC, but truly a bizzare dual-linked overlapping, cannibalistic dual-linked ALS. I can't explain the candidate eliminations is terms of subset counting, especially the r1c2 <> 9 and r2c2 <> 6, but these types of ALSs are "all over the place" and all the eliminations are valid. Another example:
- Code: Select all
Royle17 #11551 after simple eliminations:
2 6 7 |8 5 4 |3 9 1
1 39 8 |39 A67 67 |4 2 5
5 39 4 |1 23-9 239 |6 8 7
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
4 7 2 |5 B38-9 B39 |89 1 6
9 1 3 |B47 B468-7 68-7 |78 5 2
8 5 6 |2 AB79 1 |79 4 3
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
7 4 1 |6 A89 5 |2 3 89
6 8 5 |39 234-9 239 |1 7 49
3 2 9 |47 1 78 |5 6 48
do_alschains - graph contains 123 vertices and 1520 edges
do_alschains - reducing r5c5.<4678> by <7> dual
do_alschains - reducing r5c6.<678> by <7> dual
do_alschains - reducing r3c5.<239> by <9> dual
do_alschains - reducing r4c5.<389> by <9> dual
do_alschains - reducing r8c5.<2349> by <9> dual
do_alschains - sdc+c[2x6/6] r267c5.<6789> +68+ b5x23458.<346789>
The following solution logs demonstrate the frequency of overlapping ALSs
- Code: Select all
Royle17 #14464 after simple eliminations:
78 1 2 |3 4 9 |6 578 57
4 6 357 |57 1 578 |378 2 9
378 9 357 |2 578 6 |378 14 14
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
1 3 8 |9 6 57 |4 57 2
5 7 4 |1 3 2 |9 6 8
6 2 9 |8 57 4 |57 13 13
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
37 58 37 |4 2 58 |1 9 6
2 458 6 |57 9 1 |578 34578 3457
9 458 1 |6 578 3 |2 4578 457
do_alschains - graph contains 133 vertices and 814 edges
do_alschains - reducing r8c9.<3457> by <5>
do_alschains - als[3x3/4] r1c9.<57> -7- r23c7.<378> -8- r8c47.<578>
do_alschains - reducing r2c3.<357> by <5>
do_alschains - reducing r3c5.<578> by <5>
do_alschains - als+[3x3/3] r2c4.<57> -7- b8x34.<578> -8- r2c46.<578>
do_alschains - reducing r8c8.<34578> by <7>
do_alschains - reducing r9c8.<4578> by <7>
do_alschains - als+[3x4/4] r4c8.<57> -5- r236c7.<3578> -8- r14c8.<578>
do_alschains - reducing r3c3.<357> by <3>
do_alschains - als+[4x4/4] r27c3.<357> -5- r2c4.<57> -7- b8x34.<578> -8- r2c346.<3578>
do_alschains - ending with 6 updates 49 total solved
do_pinnings - setting r3c3 = d5 hidden single
do_pinnings - ending with 1 updates 50 total solved
78 1 2 |3 4 9 |6 578 57
4 6 37 |57 1 578 |378 2 9
378 9 5 |2 78 6 |378 14 14
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
1 3 8 |9 6 57 |4 57 2
5 7 4 |1 3 2 |9 6 8
6 2 9 |8 57 4 |57 13 13
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
37 58 37 |4 2 58 |1 9 6
2 458 6 |57 9 1 |578 3458 347
9 458 1 |6 578 3 |2 458 457
do_alschains - graph contains 131 vertices and 1018 edges
do_alschains - reducing r3c7.<378> by <7>
do_alschains - als+[3x4/4] r3c5.<78> -8- r2c346.<3578> -3- r3c15.<378>
do_alschains - reducing r2c7.<378> by <7>
do_alschains - als[3x3/3] r6c7.<57> -5- r36c5.<578> -8- r2c46.<578>
do_alschains - reducing r8c7.<578> by <7>
do_alschains - als[4x5/6] r6c7.<57> -5- r36c5.<578> -7- r9c258.<4578> -5- r3689c9.<13457>
do_alschains - reducing r8c2.<458> by <5>
do_alschains - als[4x6/6] r7c2.<58> -8- r47c6.<578> -7- r34689c8.<134578> -8- r8c47.<578>
do_alschains - reducing r8c9.<347> by <7>
do_alschains - als+[3x4/4] r8c4.<57> -5- r2c347.<3578> -8- r8c47.<578>
do_alschains - reducing r1c1.<78> by <7>
do_alschains - als[4x4/4] r1c89.<578> -8- r236c7.<3578> -5- r36c5.<578> -8- b1x67.<378>
- Code: Select all
Royle16 #4858 after simple eliminations:
49 7 1 |49 6 3 |5 2 8
8 3 5 |1 2 479 |6 79 479
2 6 49 |8 5 479 |479 13 13
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
3 2 7 |5 9 8 |1 4 6
459 149 6 |3 147 14 |8 579 2
459 149 8 |2 147 6 |79 3579 35
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
7 5 2 |6 14 149 |3 8 49
6 49 3 |479 8 2 |479 15 15
1 8 49 |479 3 5 |2 6 479
do_alschains - graph contains 138 vertices and 1010 edges
do_alschains - reducing r9c9.<479> by <4>
do_alschains - als+[4x3/4] r7c9.<49> -9- r57c6.<149> -4- r2c68.<479> -7- r27c9.<479>
do_alschains - reducing r3c6.<479> by <4>
do_alschains - als[4x3/4] b2x16.<479> -7- r2c89.<479> -4- r7c9.<49> -9- r57c6.<149>
do_alschains - ending with 2 updates 49 total solved
49 7 1 |49 6 3 |5 2 8
8 3 5 |1 2 479 |6 79 479
2 6 49 |8 5 79 |479 13 13
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
3 2 7 |5 9 8 |1 4 6
459 149 6 |3 147 14 |8 579 2
459 149 8 |2 147 6 |79 3579 35
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
7 5 2 |6 14 149 |3 8 49
6 49 3 |479 8 2 |479 15 15
1 8 49 |479 3 5 |2 6 79
do_alschains - graph contains 143 vertices and 1220 edges
do_alschains - reducing r6c2.<149> by <9>
do_alschains - als[4x6/6] r8c2.<49> -4- b9x49.<479> -9- r7c59.<149> -1- r6c15789.<134579>
do_alschains - reducing r8c4.<479> by <9>
do_alschains - als[3x3/3] r8c2.<49> -4- r9c39.<479> -7- r19c4.<479>
do_alschains - reducing r5c5.<147> by <1>
do_alschains - als[4x3/4] r5c26.<149> -9- r8c2.<49> -4- b9x49.<479> -9- r7c59.<149>
do_alschains - ending with 3 updates 49 total solved
49 7 1 |49 6 3 |5 2 8
8 3 5 |1 2 479 |6 79 479
2 6 49 |8 5 79 |479 13 13
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
3 2 7 |5 9 8 |1 4 6
459 149 6 |3 47 14 |8 579 2
459 14 8 |2 147 6 |79 3579 35
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
7 5 2 |6 14 149 |3 8 49
6 49 3 |47 8 2 |479 15 15
1 8 49 |479 3 5 |2 6 79
do_alschains - graph contains 150 vertices and 1482 edges
do_alschains - reducing r2c6.<479> by <7>
do_alschains - reducing r3c7.<479> by <7>
do_alschains - als+[4x3/3] b2x19.<479> -4- r89c4.<479> -9- r9c3.<49> -4- r3c36.<479>
do_alschains - reducing r3c7.<49> by <9>
do_alschains - als[4x3/3] r3c36.<479> -4- r9c3.<49> -9- r8c24.<479> -4- r68c7.<479>
For those who wish to experiment with these new ALS chains, I've posted my ALS engine on a hosting site for downloading. It's a command line batch solver, so there's no elegant GUI and the solution log is (as shown above) less than pretty. But it's functional and free, so please let me know if you find an example puzzle that produces invalid eliminations. I've tested against massive collections (top50000, top10000, royle17) and have not hit a single incorrect reduction, but I can't prove why overlap/cannibalism should or should not be legal. I'm hoping that someone out there with advanced math/logic can offer a proof.