Hi Champagne,
I chose the royle17 36628 collection because it didn't contain just hard puzzles like the top... variety. With that said, I've also run against many top... collections, specifically the top50000, top10000, top1465, top105, top95 and top50. The results all show that ALSs are commonly found in most every puzzle. I think it's just a matter of how far into the solution process one wants/needs to go in order to take advantage of them.
In my first attempt at ALS chains, I placed that method after other things such as XY chains, nice loops, 3d-medusa etc. By the time the ALS engine was invoked, most of the eliminations it might have found had already been covered by the other methods, so I wasn't very impressed with their "performance". This didn't cause me concern until I started investigating SDCs and their relative frequency. Some maintained that they were rare, but I found that if I scheduled SDCs/ALSs earlier, they started popping up fairly often.
So, with that in mind and for these tests/postings:
My ALS engine executes immediately after very elementary methods are applied. Naked/hidden singles, row/col/box interactions, naked/hidden subsets size 2-4 and basic fish (x-wing, swordfish...) size 2-4. No other higher level methods of executed, so if the puzzle cannot be solved with just those elementary methods and the ALS engine, it remains "unsolved". In fact, if you were to look at the logs you would see that the DLX method kicks in immediately after the ALS engine surrenders. I consider DLX a T&E last ditch method and use it mostly to test that there is a unique valid solution, and that the test methods haven't generated invalid eliminations.
That's probably more than you wanted to know, but it's crucial in order to gauge the relevence of my reported numbers/statistics.
As for bi-value/location pairs:
I still think the ALS engine should completely subsume XY chains and I'm really close. Just a few weird edge cases remain that I need to investigate. If you're talking about b/b plots, then it's a whole different matter and I'm amazed by the additional "power" given to grouped nice loops with the new ALS engine churning out ALSs and AHSs. They work beautifully there and I love seeing NLs with AHSs and ALSs jumping back and forth. But, I still haven't figured out how to effectively use AHSs in ALS chains. I'm following your suggestion/recommendation that I always consider them in pairs, but if I defer the AHS processing after the ALS processing side, it's like I'm going through a tremendous amount of effort (computer time that is) for almost no additional eliminations. More work to do.,,
I'm still reading you web pages on full tagging, so I'm by no means certain of the following: It looks like your level 1 processing is very powerful - similar to 3d-medusa??? I know that when I execute my 3d-medusa before ALS chains, it really reduces the likelihood of the ALS engine finding anything. Same thing if I allow nice loops to run first, or my nrczt-chains. Even XY chains messes things up for me because I've implemented Denis Berthier's hXYzt as well as nrczt chains.
And at long last, I'm not sure what examples you're requesting. Do you want puzzles that the ALS engine, but itself, can't solve? And from any specific puzzle collection?
Here's one that I've been having a lot of fun with. If I run my program with different options, it will either find nothing, or else find some really interesting chains.
- Code: Select all
Puzzle: 12.456..94.6......7.9......2.751469.641938..2.95..2..4.6.2..8..572....3..1....... puzzle 1 x.pm
1 2 38 |4 5 6 |37 78 9
4 358 6 |1378 2789 1379 |125 125 1358
7 358 9 |138 28 13 |1245 12456 13568
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
2 38 7 |5 1 4 |6 9 38
6 4 1 |9 3 8 |57 57 2
38 9 5 |67 67 2 |13 18 4
--------- --------- ---------+--------- --------- ---------+--------- --------- ---------
39 6 34 |2 479 13579 |8 145 157
5 7 2 |168 489 19 |149 3 16
389 1 348 |367 4679 3579 |2459 2456 567
do_alschains - graph contains 150 vertices and 1232 edges
do_alschains - reducing r2c5.<2789> by <2>
do_alschains - reducing r3c7.<1245> by <2>
do_alschains - reducing r3c8.<12456> by <2>
do_alschains - als+[6x6/9] r3c5.<n28> -8- r8c567.<n1489> -18- r8c49.<n168> -8- b2x4679.<n13789> -9- r8c69.<n169> -6- r3c24569.<n123568>
do_alschains - reducing r3c9.<13568> by <3>
do_alschains - als+[5x6/9] r3c6.<n13> -1- r8c6.<n19> -9- b2x4679.<n13789> -8- r8c4679.<n14689> -4- r3c24567.<n123458>
do_alschains - reducing r7c6.<13579> by <3>
do_alschains - als[6x6/9] r3c6.<n13> -1- r2369c4.<n13678> -8- r8c4679.<n14689> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r7c3.<n34>
do_alschains - reducing r3c6.<13> by <1> whip als[3]
do_alschains - als[6x6/9]-whip r3c6.<n13> -1- r2369c4.<n13678> -8- r8c4679.<n14689> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r8c4679.<n14689>
do_alschains - reducing r2c8.<125> by <5>
do_alschains - reducing r3c8.<1456> by <5>
do_alschains - reducing r9c8.<2456> by <5>
do_alschains - als+[5x5/6] r5c8.<n57> -7- r1c8.<n78> -8- r1c3.<n38> -3- r7c3.<n34> -4- r1567c8.<n14578>
do_alschains - reducing r8c4.<168> by <6>
do_alschains - als+c[6x6/9] r6c4.<n67> -7- b2x479.<n1378> -8- r8c4679.<n14689> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r8c679.<n1469>
do_alschains - reducing r6c4.<67> by <7> whip als[3]
do_alschains - als[6x6/9]-whip r6c4.<n67> -7- b2x479.<n1378> -8- r8c4679.<n14689> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r8c4679.<n14689>
do_alschains - reducing r8c7.<149> by <1>
do_alschains - als[6x5/7] r6c7.<n13> -3- r1c7.<n37> -7- r1c8.<n78> -8- r1c3.<n38> -3- r7c3.<n34> -4- b9x2369.<n14567>
do_alschains - reducing r3c7.<145> by <1>
do_alschains - als[6x5/7] r6c7.<n13> -3- r1c7.<n37> -7- r1c8.<n78> -8- r17c3.<n348> -4- b9x2369.<n14567> -6- r3c2469.<n13568>
do_alschains - reducing r7c6.<1579> by <9>
do_alschains - als[6x6/9] r7c1.<n39> -3- r7c3.<n34> -4- r12567c8.<n124578> -2- r12356c7.<n123457> -4- r8c4679.<n14689> -8- b2x4679.<n13789>
do_alschains - reducing r9c1.<389> by <3>
do_alschains - reducing r9c3.<348> by <3>
do_alschains - als[6x6/9] r7c3.<n34> -4- r12567c8.<n124578> -2- r12356c7.<n123457> -4- r8c4679.<n14689> -8- b2x479.<n1378> -7- r69c4.<n367>
do_alschains - reducing r9c6.<3579> by <9> loop type (1) leg[1]
do_alschains - reducing r2c5.<789> by <7> loop type (2) als[2]
do_alschains - als+c[5x5/7]-loop r8c6.<n19> -9- b2x4679.<n13789> -89- r8c469.<n1689> -9- r2379c6.<n13579> -19- r8c6.<n19>
do_alschains - reducing r8c4.<18> by <1>
do_alschains - reducing r8c9.<16> by <1>
do_alschains - als+c[6x6/9] r8c6.<n19> -9- b2x4679.<n13789> -8- r8c4679.<n14689> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r8c67.<n149>
do_alschains - reducing r8c6.<19> by <9> whip als[3]
do_alschains - als+[6x6/9]-whip r8c6.<n19> -9- b2x4679.<n13789> -8- r8c4679.<n14689> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r8c4679.<n14689>
do_alschains - reducing r3c9.<1568> by <6>
do_alschains - reducing r9c8.<246> by <6>
do_alschains - als+[5x6/7] r8c9.<n16> -1- r8c6.<n19> -9- r679c5.<n4679> -49- r8c4569.<n14689> +9+ b9x23469.<n145679>
do_alschains - reducing r9c9.<567> by <6>
do_alschains - als+[6x5/9] r8c9.<n16> -1- r8c6.<n19> -9- b2x4679.<n13789> -8- r8c4679.<n14689> -4- b3x457.<n1245> -5- r2348c9.<n13568>
do_alschains - reducing r3c8.<146> by <1>
do_alschains - als+[6x6/8] r3c46.<n138> -8- r8c49.<n168> -18- r8c567.<n1489> +8+ r8c469.<n1689> +9+ b9x23469.<n145679> -6- r3c2469.<n13568>
do_alschains - reducing r3c9.<158> by <1>
do_alschains - als+[5x5/8] r3c46.<n138> -8- r8c49.<n168> -18- r8c567.<n1489> +8+ r8c4679.<n14689> -4- b3x457.<n1245>
do_alschains - reducing r2c6.<1379> by <1>
do_alschains - reducing r2c6.<379> by <3>
do_alschains - als+[6x6/9] r3c46.<n138> -8- r8c4679.<n14689> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r7c135.<n3479> -7- r3789c6.<n13579>
do_alschains - reducing r3c4.<138> by <8> whip als[2]
do_alschains - als[5x6/9]-whip r3c46.<n138> -8- r8c4679.<n14689> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r8c4679.<n14689>
do_alschains - reducing r9c4.<367> by <7> whip als[3]
do_alschains - als[6x6/9]-whip r69c4.<n367> -7- b2x479.<n1378> -8- r8c4679.<n14689> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r8c4679.<n14689>
do_alschains - reducing r8c7.<49> by <4> whip als[1]
do_alschains - als[4x6/8]-whip r8c67.<n149> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r8c67.<n149>
do_alschains - reducing r8c5.<489> by <9>
do_alschains - als+[5x6/8] r8c67.<n149> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r7c135.<n3479> -7- r3789c6.<n13579>
do_alschains - reducing r3c5.<28> by <8>
do_alschains - als+[6x5/8] b2x479.<n1378> -7- r6c4.<n67> -67- r6c5.<n67> -7- r7c135.<n3479> -4- b9x2369.<n14567> -6- r3c2469.<n13568>
do_alschains - reducing r2c4.<1378> by <8> whip als[2]
do_alschains - als[5x6/9]-whip b2x479.<n1378> -8- r8c4679.<n14689> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r8c4679.<n14689>
do_alschains - reducing r2c6.<79> by <7> whip als[3]
do_alschains - als+[6x6/9]-whip r238c6.<n1379> +7+ b2x479.<n1378> -8- r8c4679.<n14689> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r8c4679.<n14689>
do_alschains - reducing r7c8.<145> by <4>
do_alschains - als[5x5/7] r7c135.<n3479> -7- r6c5.<n67> -67- r6c4.<n67> -7- b2x479.<n1378> -8- r8c4679.<n14689>
do_alschains - reducing r9c5.<4679> by <7>
do_alschains - als+[6x6/9] r7c135.<n3479> -4- r12567c8.<n124578> -2- r12356c7.<n123457> -4- r8c4679.<n14689> -8- b2x4679.<n13789> +9+ r3789c6.<n13579>
do_alschains - reducing r9c5.<469> by <9>
do_alschains - als+[6x6/8] r8c469.<n1689> -8- b2x479.<n1378> -7- r6c4.<n67> -67- r6c5.<n67> -67- r6c1478.<n13678> -6- r23678c5.<n246789>
do_alschains - reducing r8c5.<48> by <8> whip als[2]
do_alschains - als+[5x6/9]-whip r8c567.<n1489> +8+ r8c4679.<n14689> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r8c4679.<n14689>
do_alschains - reducing r3c7.<45> by <5>
do_alschains - als[4x6/9] r1256c7.<n12357> -2- r12567c8.<n124578> -4- r8c679.<n1469> -6- r3c2469.<n13568>
do_alschains - reducing r9c7.<2459> by <5>
do_alschains - als+[6x6/8] b9x2369.<n14567> -4- r7c135.<n3479> -7- r3789c6.<n13579> -9- r679c5.<n4679> -49- r8c4569.<n14689> +9+ b9x23469.<n145679>
do_alschains - reducing r9c7.<249> by <4>
do_alschains - als+[6x6/9] r8c4679.<n14689> -8- b2x4679.<n13789> +9+ r3789c6.<n13579> -7- r7c135.<n3479> -4- r12567c8.<n124578> -2- r12356c7.<n123457>
do_alschains - reducing r3c8.<46> by <4>
do_alschains - als[2x6/7] r12356c7.<n123457> -2- r12567c8.<n124578>
do_alschains - reducing r2c5.<89> by <9> whip als[3]
do_alschains - als+[6x6/9]-whip b2x45789.<n123789> +9+ b2x4679.<n13789> -8- r8c4679.<n14689> -4- r12356c7.<n123457> -2- r12567c8.<n124578> -4- r8c4679.<n14689>
do_alschains - ending with 44 updates 36 total solved
do_pinnings - setting r2c4 = d7 hidden single
do_pinnings - setting r2c5 = d8 naked single
do_pinnings - setting r2c6 = d9 naked single
do_pinnings - setting r3c4 = d1 hidden single
do_pinnings - setting r3c5 = d2 naked single
do_pinnings - setting r3c6 = d3 naked single
do_pinnings - setting r3c7 = d4 naked single
do_pinnings - setting r3c8 = d6 naked single
do_pinnings - setting r6c4 = d6 naked single
do_pinnings - setting r6c5 = d7 naked single
do_pinnings - setting r7c5 = d9 hidden single
do_pinnings - setting r8c4 = d8 naked single
do_pinnings - setting r8c5 = d4 naked single
do_pinnings - setting r8c6 = d1 naked single
do_pinnings - setting r8c7 = d9 naked single
do_pinnings - setting r8c9 = d6 naked single
do_pinnings - setting r9c1 = d9 hidden single
do_pinnings - setting r9c3 = d8 hidden single
do_pinnings - setting r9c4 = d3 naked single
do_pinnings - setting r9c5 = d6 naked single
do_pinnings - setting r9c7 = d2 naked single
do_pinnings - setting r9c8 = d4 naked single
do_pinnings - ending with 22 updates 58 total solved
do_pinnings - setting r1c3 = d3 naked single
do_pinnings - setting r1c7 = d7 naked single
do_pinnings - setting r1c8 = d8 naked single
do_pinnings - setting r2c2 = d5 naked single
do_pinnings - setting r2c7 = d1 naked single
do_pinnings - setting r2c8 = d2 naked single
do_pinnings - setting r2c9 = d3 naked single
do_pinnings - setting r3c2 = d8 naked single
do_pinnings - setting r3c9 = d5 naked single
do_pinnings - setting r4c2 = d3 naked single
do_pinnings - setting r4c9 = d8 naked single
do_pinnings - setting r5c7 = d5 naked single
do_pinnings - setting r5c8 = d7 naked single
do_pinnings - setting r6c1 = d8 naked single
do_pinnings - setting r6c7 = d3 naked single
do_pinnings - setting r6c8 = d1 naked single
do_pinnings - setting r7c1 = d3 naked single
do_pinnings - setting r7c3 = d4 naked single
do_pinnings - setting r7c8 = d5 naked single
do_pinnings - setting r7c9 = d1 hidden single
do_pinnings - setting r9c6 = d5 hidden single
do_pinnings - setting r9c9 = d7 naked single
do_pinnings - ending with 22 updates 80 total solved
do_pinnings - setting r7c6 = d7 naked single
do_pinnings - ending with 1 updates 81 total solved
RCB solution 1 for puzzle 1 x.pm
1 2 3| 4 5 6| 7 8 9
4 5 6| 7 8 9| 1 2 3
7 8 9| 1 2 3| 4 6 5
------+------+------
2 3 7| 5 1 4| 6 9 8
6 4 1| 9 3 8| 5 7 2
8 9 5| 6 7 2| 3 1 4
------+------+------
3 6 4| 2 9 7| 8 5 1
5 7 2| 8 4 1| 9 3 6
9 1 8| 3 6 5| 2 4 7
Puzzle call statistics:
do_pinnings updates/calls 45/4 11.2500 0.1791 msec 0.0448 msec/call 0.0040 msec/update
do_restrictions updates/calls 0/1 0.0000 0.0140 msec 0.0140 msec/call inf msec/update
do_subsets updates/calls 0/1 0.0000 0.0729 msec 0.0729 msec/call inf msec/update
do_alschains updates/calls 44/1 44.0000 3369.7534 msec 3369.7534 msec/call 76.5853 msec/update
Puzzle 1 took 3401.3672 msec for 1 solution(s)
/home/paul/nsudoku/sudoku -bv -Xprsa -A6 -B4 -w -P x.pm
nrczt promote 0) 0 1) 0 2) 0 3) 0 4) 0 5) 0 6) 0 z_links) 0 t_links) 0 g_links) 0
nrczt search
vt chains) 0 vs chains) 0 ve chains) 0 nrc[0] exits) 0 nrczt 0) 0 nrczt 1) 0 nrczt 2) 0 nrczt 3) 0 nrczt 4) 0
niceloop search
niceloop exits 0) 0/0 1) 0/0 2) 0/0 3) 0/0 4) 0/0 5) 0/0 6) 0/0 7) 0/0 8) 0/0 9) 0/0
Cheers,
Paul