Sokwe wrote: April 23rd, 2023, 3:36 pm
I generally tried to extend side-to-side branches until they reached beyond everything below them. I then immediately turned them downwards at the points that I personally thought would be most likely to work.
Yeah, I've done a lot of that, f2b is just so much better than s2s.
Sokwe wrote: April 23rd, 2023, 3:36 pm
I imagine I could have done better if I knew how to use the seam ripper feature. I spent a lot of time moving the search over to WLS and JLS and carefully testing various potential branching locations and partial branches. This was the most personally time consuming part of the search. Other parts I could just set up and let run while I did other things.
The two seam ripper options have their own issues and their notion of splittable does not match exactly "can be continued productively". I configure them both (V1 and V2) in most fixed-board searches if only to give myself more randomish partials to skim through so you might try it.
Sokwe wrote: April 23rd, 2023, 3:36 pm
I also imagine that the pattern DB ends would be extremely useful for back-to-front searches. Such searches are very slow and quickly run out of memory at low widths. Since there is a very large collection of width-12 2c/5 ships in the knightt-results collection, I suspect that the search would notice an existing component from there long before it could find a solution directly.
Both the current pattern DB and the new version I sketched have performance issues trying to tackle knightt-results. The current version reanalyzes files each search which is extremely slow while the newer version only analyzes files once. Once ingested the current knightt-results repo I have turns into a 73MB DB for 2c/5 b2f which takes ~6s to load per search.
That sounds better but once it hits a result it has to do a ton of analysis to figure out best solutions for it from the DB it has. As a test I loaded the knightt-results 2c/5 asymmetric width 12 as well as the original sparker you have on the west side of that main b2f branch and reran the search from that split. It loads the DB in like 6s and immediately finds a hit but then it takes it ~12m to decide what the best completion from the DB is. The best completion by population conflicts with the next branch to the east. Then is takes another ~7m before it outputs the best completion by right (east) clearance (with ties broken by population) which does not conflict and is a little smaller:
Code: Select all
x = 150, y = 358, rule = B3/S23
66b3o$65bo2bo$65b2o$68bo$63b6o$61b2o5bo$61b3o4bo$61bo$62b3o$62bob4o$
61b2ob2o$61bobo$61b4o$64b2o$63bobo2$63bo2bo$65b2o$64bo$63bob2o$64bobo$
62b2o$63bo$63bo$64b2o$64b2o$64bobo$65b2o$64b2o$65b2o$64bo2bo$64bo2bo$
67b3o$66b4o$68b2o2$68b2o17b3o$69bo17bobo$86bo2bo$69b2o15b4o$68b3o13bo
4b2o$83b3obo$66bo3bo11bo4bob2o$65b2obo12b3ob2o$65b3o13b2o2b2o$67bo14b
3o$68b2o12b2o2bo$66bo2bo$65bo15b2o$65bo3bo15b3o$65bo19b3o$68b2o15b2o$
66b2o2bo14bobo$66b5o16bo$66bo18bobo$68b2o14b2obo$66bo2bo14b2o$70b3o10b
obo$66bo5b2o9bo$67b2o3b2o$83b2o$71bo11b2o$71b2o11bo2bo$70b2o15b2o$68bo
4bo$67b3ob2o7b3o3bo$66b4o10bobo$65b2o3b2o7bo2bo2bobo$64b2o3bo8bob2o2bo
3bo$69bo8bobo3bo3bo$65bo3bobo16bo$65b3o18b3o$66bobob2o14bo$65b2obo12bo
$65b2obo11b3o$66bo2bo10b3o$65bo4bo11bo$65bo4bo9b3o$64bo2bob2o$64b2obo
2bo7bo3bo$64bo2bob2o6b2o3bo$68b3o5b2o2b3o$68bo9bo$65bo2bobo9bobo$66bob
obo9b2o$65b2obo2bo$64bo17bo$70bo9b4o$63bo5bo14bo$64b2obo15b3o$67b2o15b
o$64b2o2b2o9b3ob3o$66b3obo8b3o2b2o$64b2o4bo8b2o3b2o$65b2ob2o9bobo$65b
2ob3o9bo$66bo2b2o11b4o$66bo11b3ob3o$66b2o2bo6bo6b2o$66b3o2bo5b2o$68bo
3b2o3b2o$68b3o10b2o$67bo2b3o7bo2b2o$67b3o2bo8bo2bo$65b2o4b2o10bo$65b5o
bo9b2o$66bo2bo2bo8b2o$67bo2bo11b3o$66b2obo13bo$66b2ob2o10bo$67b2obobo
6bob2o$67b2obob2o4bo3bo$69b5o4bo$69b2o6b2ob2o$77b2o2bo$70b2o6bob3o$72b
3o4bo3bo$65b3o13bobo$64bo3bo3b3o5bo2bo$63b2o4b2ob2o5b3obo$64b2o7bo5bo$
64b2o6bo5b2obo$67bob3o8bobo14bo$66bo15b2o12bobo$78b4ob2o10b2ob2o$71b2o
5bo4b2o10bo2b2o$69bobo6bob3o11bobo$68b3o5b3o2b3o10bobo$76b2o6bo7bo3bob
2o$71bo5b2o4bobo5bo4bo2bo$68bo3bo4b2o12bo4b3o$69bo2bo9bo8bobo3bo2bo$
67b3o2bo5bob3obo12b2obo30bo$64b2ob2o12bo15bo32b3o$64b2o6bo6b2o2b2o10b
2ob2o30bobo4bo$64bo2b4obo5b2o9bo8b2o23b2o5b2o4b3o$66b3o19bobo4b2obo23b
ob2o3b3o4bobo$69bobo15b2ob2ob2ob3o23bob2obo4bo4b2o5b2o$69bobo7bo8bobob
o29b2ob2obo3bo4b3o3b2obo$69bo8bo9bobobobo30b3o2b2o4bo4bob2obo$70b3o6bo
bo6bob2ob2o28bobo10bo3bob2ob2o$81bo7bo33bo13b2o2b3o$68bo4bo7bo6b3o52bo
bo$15b3o12bo7b3o26b3o3bobo3bobo5bo3b2o40b3o9bo$9bo5bobo4b3o4bobo6bobo
5bo20bo4b3obo10bo2bob2o39bo$8b2o5bo3bobo3bo2b2obobo4bo2bo3b3o21bobobo
3bo4bo5b2o2b2o38bo2bo$6b2obo4bo5bo5bo5b3o3bo3bobo2bo9bo11b2o3bobo2bo
11b2o39b4o$8bo2b3obo8bobo3b4ob2o2b2obobob2o4b3obobo8bo11b2ob2o3b5o41b
2o$11b3o7bobo10bo7bo3b2o2b3o3bob2o7bo12bo6b4o$9bo4b3o2b2o3b2ob5o3b4o3b
o7bo3bobobo29b2o50bo$6b2obo10bo3b3o3bobo13bo4b4obo2bo23b2o49b2o3b3o$
16bo2bo11bo3b3o3bo3bo5bo4bo3bo20bobob2o46bo5bo2bo$12b2o3bo17bo9bo10bo
3bo19bo51bo3bo3b2obo$12b3o5b3o14b2o20bo21bob3obo44b2o2bo3bo2bo$14b2o3b
o2bo30bobob2ob2o23bob2o47b2o2bobo$14b3o4bo32bo6b2o19bo2bo3bo44b3o$11bo
b2o2b3obo40b2o18bo5bo46b3o3bo$10bobob2obo3bo41bo17bob2obo5bo39b2obob3o
$9b2o4bobo2bo2b2o38b2o26b3o$9bo3b2o2bobo43bo16bobob2o5bo2bo10bo14b3o4b
3o2b2o2bo$7b2ob2obo2b2o38b3o21bobob2o6b2obo8b4o5b3o4bobo4b3o4b2o$9b3o
2bob3obo35bo2bo20bobo3bo5b2obo2b3o3bo3bo3bo3bo3bo2bo2bo3bo$18b2ob2o29b
o4b2obo2b2o7b3o6b2o3bo8b4o2b4obob4o5bo2b2ob4ob4o$9bo12bo23bo4bobo4bobo
2bob2o5bobo7bo3bo4b7o3bo5b2o6bob2o2bo8b3o$8bobo7b3o23b2ob2ob2ob2o5bo2b
obo2bo2bo2bo4bo5b2o2b5o6bo3bo5b2o4bo4bo3bob2o2b2o$bo5b2ob2o5b3o24b2obo
bobobo3bo2bo5b3o2bob2o5b2o3bo2bo3bo20b6o4bobo$3o4bo2b2o4b3o3bo19bobo2b
o4bo3b2o10bo4bo7b4o3bo15b3o9bo2b2o$o2bo2b2ob2o6b2o3b2o17bob2ob2obobo5b
2o2b2o3bo8b2o8bo3bo$bo2bobo2b2o10bo2bo15b2o5bo3b2obobobo4bob2o2b2obo3b
o8b3o$bob4ob2o12bo18bo4bo3bo2b2o23bo5bob2o$2b4o2b2o14bo16bo5b2o4b2o19b
obo2b2o5bo$3bob3o15bo11b3o2bo8b2o24b2obo2bo3bo$5bo29bobo2b2ob2obo27bo
2b3o5b2o5bo$9bo25bo4bo3bo5bo7bo5bo5bo13bobo3b2ob2o3bo$3b2o3bobo25b2o3b
3o3bo2bo6b3o3b3o3bob2obo3bob2o2bo5b2o5bobo$8bob2o23bobo3b2o2b3o8bo2bo
3bobo2b2ob2o6bobo4bo2bo6b2ob2o9bo7bo$10bo23b3o7b3o8b3o10bo2bo4b2obo4bo
4bobo7b2o2bo5bobo4b2ob2o$5b3o2bo23b2o4bo6bo8bobo4bo4b2o2b3o2bo4bobob2o
bobo4b7ob2o2b2ob2o3b2o9b3o$4b2obob2o13b3o6bo4b2obobo3bo10b2o3bo14bo2b
2o5bo2b3o5b2o3b2o2b2o2bo14bobo$3bobo18bobo6b2ob3o3b3obo7bo4bo13b2o4bob
o3b3o3bob3o2b2o9b2ob2ob2obo7bo2bo$2b3o19bo3bo3b2o4b3obobo14bo12b3o5b2o
bob2o2b2o3bo3bo4b4obo3b2o3bo2bo4bob3o$bo22bo4b2ob2obo7bo10b2o3bo10bobo
10bo8bo6bo3bob2o5b3o2bob2o4bobob2o4b3o$b2o2bo19bo5bo3b4o2b3o12bo2bo6bo
3b2ob2o5bo2bobo6bob3o7b2obo4b6o3b3obobob2o4bobo$b3o21b4ob4o3b2o3b2o14b
o5b2ob2o3b2o7bobobo5bo4bo4bo2bo7bo3bob2ob3obobo5bo4bo$31bo3bo3bo2bo2b
2o20b2o3b2o5bob3o3bo4bo10b2o2b2o5b2ob2o6bob2o4bo4bo$2b2o4bo14b3o6b2o3b
o2bo4bo22bo10bo4b2obo6bo15bo3bo3bob3o2bo6b2o$2bobo2bobo14b2o6bob3o2bo
2bo20bo2b2ob2ob2o6b2o3b2o5bob4ob2o11bo5bo2bobobobobo2b2obob2o$6b2ob2o
18b2obo2bobo2b2o21b2ob2obob2o7b2obob2o7bo2bobob2o12bo3bobobo2bobo5bo5b
o$2bobob2o2bo19bob3o2bo5bo21bobo4bo10bo9bobo5b2o10bobo2b3o2bo2b2obo4bo
3b3o$3bo2bo2b2o16b2obo10bob2o21bo2b2o10bobo2bo4b2o2bo4bo13bo3bo4b2o4bo
4bo7bo$26b2obobob2obo2b3ob2o20bob3o11bobobo5bo4bo4b2obo8b5o5b2o2b2ob2o
2bobo5bo$6bo2b2o16b5obo4b3ob2o23bo11bo3b3obo4b3ob2o2bo12bo7b4o11bo5b2o
$9b2o17b3o6bo2bobo22bo4b3o6bob2o4bo8b2o3b4o8bo3bo3bob2o7bo6bob3o$6bo2b
o18bobo3bo2bo27b3ob4o7b2o3b2o4bo7bo6bo8bobobo13bobo5b2o$6bobo19bo5bo2b
2o27bob2o3bo6b2obob2o3bo8bob7o6b3o5b3o9b3o4bo$24b3o9bobobo24b3o3bob2o
8bo7bo2bo2bobo7bo4b2ob2o5b3o10bo2bo2b2o$26b2ob2o2bobo29bo3bo10bo2bobo
5bob4o3b3ob3o5b3o20bo6bo$27b2o4bobo5bo22bo2bo4bo8bobobo19bobo7bo4b2o
13bo3bo3bo$26bo11b3o22b2o3bob2o7bob3o3bo15b3ob2o5b2ob2o2bo12b2ob2o3bo$
27b2o8bo29b2o10bo4b2obo7b2o3b6o9bo2b2ob2o12bo$28bo8bo2bobo22b2obo11b2o
3b2o8b2o2b4obo11b3o2b2o11bobobo$41b3o21b3o12b2obob2o9bob2ob2o2b2o27bo
4bo$28bo9bo4bo21b3o15bo12bob2o5bobo9bo2b2o11bo6bo$27b2o9b3o25bob3o10bo
bo2bo8b2o4b2o5bo3b3o2bob4o10bo6bo$27b2o8b2o2b2o23b2o2bo10bobobo15b2o4b
o4bobo4b2o2bo10b2o5bo$26bo3bo5b3o3b3o15bo4bo13bo3b3obo9bo4bo3b2o4bobo
8bob2o12bobobo$26bo3bo4bo5bo2bo14b3o2b3o2bobo7bob2o4bo9bo3bobo9b3o4b2o
5bo12bo2bo$34bob2o4bo15bo6bo3bobo8b2o3b2o9b2o3bo4bo6b3o4b2ob2o3bo11bo
2bo2bo$29bo4bo3b2ob3o14bobo4bo3bobo8b2obob2o9b2o4bo3bo6bo5bobo7bo15bob
o$25b2obo5b5ob2o18bobo3bo16bo13b2o8bo10b2obob2ob2obo14b2ob2o$24b2obo6b
o4bo18bo4b5o3bo8bo2bobo8b2obo5b2obo9b2obobob3obob2o8bobo2bo2b2o$28b2o
8b2o18bobo3b2ob3ob3o7bobobo7b2ob2o4bo13bo2bobo5b2o9b2o3b5o$29bo6bobo
24bo9bo5bob3o3bo5bobo5bob2o10bo12bo14bo3bo$27bo2b2o4bo2bo23bobo3b2obo
6bo4b2obo6b2obo3bo2bo11b2ob5obo12b2o5bo$27bob3o7bo26bo13b2o3b2o7bo2bo
2bo2bo14bobo3b3o3bo6bo2bob2obob2o$26bobobobo5bo24bo2b2o12b2obob2o14bob
o10b3o5b3o2bo2bo6bo2b2ob3obo$25b3o2b3o6bo3b3o13bo7b2o14bo10bo6bo2bo9b
3o5bo2bobobo6b2o7b3o$26b2o2b3o8bo3bo11b2ob2o3bobobo11bobo2bo11bo3b4o
10bo6b3o10b2o2bo2b2ob2o$28bobo10bo4bo10b2o6bobob5o7bobobo9bo2b3o3b2o
10bobo4b3o11bo2bo2bo$37b3o3bo2b2o8bo6bo5bob3o5bo3b3obo8bo2b2o16b3o3b2o
13bo$37b2o5bo11bobo4b2obo7bo4bob2o4bo10bo4bo12b2ob2o2b2o14bo2b2o$37bo
18bo7bo7b2obo4b2o3b2o5bo2b3obo18bob2o3b5o10bobo$40b2o4b2o7b2o3b4o5b6o
5b2obob2o4b3ob4o16bo4bo2b3o2b2o10bob2o$36b2o8bo22bo5bo7bo6bo5b3o16bobo
3b2obo2bo3b3o4bobo3bo$34bob3o6bo10bo2bo12b2o6bo2bobo7bob2o2b2o14bo3b2o
4b2o4b3o3b3ob4o$33bo2bo6bobo10bo2bo2bo3b7o8bobobo6bo7b2o17b2o4bo5bo2bo
7bo2bo$32bo2bo7bobo10bo6bo2b2o2bo8bob3o3bo4bo3bo3b3o15bobo9b2o2bo7b5o$
33bo3bo17b5o19bo4b2obo7bo4b3o15bobo2b2o5b2o12bo3bo$34bobo18b3o2bo4bo5b
2o7b2o3b2o8bo4b3o15bo4bo6bo2bo14b2o$34bob3o17bobobo5bo5bo7b2obob2o6bo
3bo19bo2bo2b2o7bo11bo2b3o$33b2o2b2o18b3o8bo4bo9bo10bob2o2bo15b5o3bo7bo
10b4o$31bob4o20bo2bo9b2o9bobo2bo8bo3b2o17bo3bo9b3o7b2obobo$30b2o3bo3bo
16b2o2bo12b2o6bobobo13bobo17b4o6bo5bo5b2obob2o$31bobo3bo16b2obo2bo12bo
bo3bo3b3obo11bobo16bo2b2o2b2obobobo10bo2bobo$30bo22bo6bo12bobo3bob2o4b
o9bo20b2o4bobo4bo8b5ob3o$29bo24bo4b2obo7b3o7b2o3b2o8bob5o16b2o4b4ob3ob
o6bo4b4o$29bo3bo4bo17bo2b2ob2o16b2obob2o7b2o3bob2o14bo2bo4bob3o3bo6b4o
b2o$29bo7bobo17bo25bo12b3o3b2o13bo6bo3bo3bobo6bo$30bobo3b2ob2o20b2o6bo
b2o7bo2bobo10bo4b3o13bo5bo6bo10b2o3bo$30bo6bob2o17bo4bo4b2o11bobobo9bo
2bo2b2o14bobobo4bo3bo2bo8bo$32b2o3b3o18bobo3bo14bob3o3bo3b3ob2o3bob2o
15bo7bo4b2o$31b3o4b2o18bobo10bo7bo4b2obo3bo2b7o16b4o7b2o2bob2o6b3o$36b
2o17b3o3b2o6b3o8b2o3b2o4bobo8bobo16bo8bobo12b2o$35b3o29b2obo9b2obob2o
4bobo4bo5bo12b2o7b3obob2o7bobo$53b2ob3o6b2obo2b2o10bo8b3ob2o7bo13b2o8b
2obo9b2o$37bo15bo2b4o8b2o2bo8bobo2bo7bob4obo2bo15b4o2b2o4bob2o6b2ob2o$
36b3o14b2o3b2o4bo3b2o11bobobo4b2o2bobo26bo6bobob2o8bo$35b2ob2o13bo2bo
7b2ob7o5bo3b3obo2b2o4bobo20bo2bo4bo2bobo9b3o$34bo2bo19b3o10b4o5bob2o4b
o8b2obo2b3o17bo4bo2b2obo11b3o$34bob2o14bo18b2o7b2o3b2o7b2o3bo2b3o14b4o
4b3o3bo8b2obo$36b2o13b2o5b2o20b2obob2o10bo4bo2bo16b3o2bobo12bo$34bo48b
o8b3obobo3bo14b2o3b3ob2obo12bobo$33b2obobo17bo2bo20bo2bobo5bo3b3o5bo
13b2o3b3o2bo3bobo10bo$31b2obo3b2o15b3obo21bobobo8b2ob2o3bobo17b3o8bo5b
o4bo$30bo4b5o14b4obo19bob3o3bo11b2o21bo5bo4bo4b3ob2o3bo$30bobo2b3ob2o
12b2o24bo4b2obo7bobo25bo3bobo7bo8bo$38bo14b2o4b2o19b2o3b2o5bob5o2bo20b
3o12bobo5bo$31bo27b2o19b2obob2o6bo3b2o2bo22b3ob2o9bobo$31bo20bo2bo4b2o
21bo37bo4bo10bo2bo$54bo4bobo19bobo2bo12bo2b2o17bobobob3o7bo$81bobobo
15b2obo15bo2bobobo$53bobo4b2o17bo3b3obo11bo3b2o17bo2bobob2o$52b2ob2o
22bob2o4bo14bo17b3o4b2o2bo$52b2o2bo23b2o3b2o16bobo18bo3bo2b2o$55b3o22b
2obob2o13bo2bo20bo3b3o$52b2o4b2o23bo17bobo22bob2o$56b4o20bo2bobo16bobo
22bo$54b2o5bo19bobobo16b2obo18b2o$55bob3o19bob3o3bo14bo21b3o3b3o$56bo
22bo4b2obo15b2o19b2o3bob2o$56bobo21b2o3b2o13bo24b2ob2o3bo$58bobo19b2ob
ob2o8bo30b2o5bo$59bobo21bo10bobob2ob2o22bobo$56bo24bobo2bo6b2obo3bo24b
2o4b2o$55bobo23bobobo8bobobob3o21bo3b2o$58bo20bo3b3obo6bobob3ob2o20bob
ob2o$58bo20bob2o4bo5bo2bobobob2o20b3o$55bobo22b2o3b2o11bobo20b2o$54b2o
24b2obob2o6bo2bobobo18b2ob2o$54b2ob2o24bo11b2o22b2obobo$80bo2bobo10bob
2o20bobo2bo$59bo21bobobo10bo22bo6bo$57bobo19bob3o3bo8b2o23bobobo$58bo
20bo4b2obo7b4o20bo3bo$58b2o20b2o3b2o7bo4bo19b2o2bo$58b2o20b2obob2o7bo
2b2o18b3o2b2o$57bo25bo11bob3o22bo$54b2o2b2o21bobo2bo8b2o2bobo14bo4bo$
54b2o25bobobo12bo2bo14bo$55bo23bo3b3obo10bo18b2o2bobo$79bob2o4bo11b4o
21bo$80b2o3b2o15b2o17bo2bo$80b2obob2o15bob2o16bob2o$83bo10b3o5bo17bo5b
o$80bo2bobo8bo5bo18b2ob3o2bo$81bobobo8bob2o6b2o13b2obo2bob2o$79bob3o3b
o11b2obobo15b3o4b2o$79bo4b2obo11b3ob2o15b2obo$80b2o3b2o12bo4bo15b2o$
80b2obob2o36bo$83bo19bo15bobob2o$81bobo2bo14b2obo13b2o3bob2o$81bobobo
15bo3bo12b5o4bo$79bo3b3obo16bo12b2ob3o2bobo$79bob2o4bo10bo2bo2bo14bo$
80b2o3b2o10bob2o25bo$80b2obob2o9b2obo4bo21bo$83bo12b2o2b2obo$80bo2bobo
11bob3obo$81bobobo12bobo$79bob3o3bo11b3ob2o$79bo4b2obo12b3obo$80b2o3b
2o15b3o$80b2obob2o$83bo19b2o$81bobo2bo16b2o$81bobobo$79bo3b3obo13b2o$
79bob2o4bo9bo$80b2o3b2o9bobo2bobo$64b2o8b2o4b2obob2o8bo3bo2bo$65bo7bob
o7bo12bob2o$61bobo5b2o2bo6bo2bobo2bo8b2o$60bob3o4bobob2o6bobo2bo2bo7b
2o$58b3o9b2o7bobobo3bob3o5bo$57bo3b5o7b4o2bo3bob3o4bo$58b2obo4bo3b2o2b
o2bo2b2obo2bob3o2bo$59bo2b2obo2bo2b2o5bo4bobo5b2o$59bobobobobo2b2o4b2o
4b2obo2bo2bo$60b2obobo2bobo12bobobobobo$62bobobobobobo8bobobo2bo2b2o$
62bobob2o3b2o6b3obobo3bobo$63bo14bo3bob2o2b2obo$79bo2bob2o2bo2b2o$80bo
bo6b2o$81bobo6bo$82bo3bo3bobo$83b5o3b2o$81bobo$80bobo2b3o$80bo2b2o2bo$
81b2o2b2o$83bobo2bo$83bobo$81b2obo3bo$82bo2b2o$80bo2bobo$80b2obobobo$
83bob2obo$83bo4bo$81bobob2obob2o$80bobo4bobobo$80bo2b2o2bobo$81bobo3bo
bo$82bo2bob2o$83b2obo$86bo$86b2o!
Then it goes on to the next row, has another hit, another ~12m to find the same min-pop completion, another ~7m to find the same best-right-clearance completion, etc.
I don't think I'm gonna leave this running or worry too much about trying to optimize these branches in general, this is just to demonstrate what it can do. In a context where each hit is valuable and worth waiting for (as opposed to optimizing known hits) it might be okay.
EDIT: I looked over the algo and it makes no sense. The results it produces are fine but it is insanely wasteful. I've rewritten it and now it's running in the ~1s range per hit. There is still ~30s on the first hit where it has to stop and compute best clearances for the entire DB but that's only the first hit.
It's still painful enough sorting through the flood of duplicated output (it keeps finding the same results on each row) that I'm probably not going to try for any further optimization of the wick stretcher.