Sokwe wrote: ↑April 7th, 2023, 4:33 pm
Is there a trick to LLSSS branching? Is it just spotting a split in a partial result and setting up a new search manually or is there some more automated aspect to it?
The available options and the balance of how relevant each is to most work I've done has changed over the history of the program. Right now there are:
(*) Spot split by eyeball in partials, most often in "random" partials. This was the only option originally and despite my best efforts is still quite relevant.
(*) "Seam ripper V1". Configured with a fixed column, usually the center-most and will output the "deepest" split in that column after completing each W row. This tends to find very "thin, deep" splits, and can of course only find them in the configured column. This was my first automated attempt and definitely works but the restriction that it must be a chosen column is very painful and I suspect this misses a lot of good possibilities because of it. Also its notion of best is strictly deepest, no matter how wide or weird each side is.
(*) "Seam ripper V2". Just written about a week ago. Configured with two fixed W lookback distances and tries to find splits looking only at that cross-section of the pattern. Its notion of "best" is "smallest bigger side" which is definitely better, but I'm not quite sure what to use for W lookback distances. The more rows "below" the lookback the more extension viability you're requiring and the more rows in the lookback range the longer you're requiring the split have been maintained for. I tested it a bit on a few random searches and have been using a lookback corresponding to 2 Y rows to 4 Y rows (so require the split have happened for 2 Y rows but then also be extensible another 2 Y rows below that, but not necessarily still split).
In all cases it's copy over into a new search manually (usually vim block mode copy/paste each generation into the original input file and adjust where the question marks are).
All three of these are a tragedy of usability. I just have no idea how to encode "split viability" in an objective, computer-adjudicable sense. Even my human eyeball sense is crummy as what really matters is not thinness of arms, but rather their viability to be extended (for which thinness is an extremely approximate proxy).
Also seam ripper V1 doesn't work with recentering and while seam ripper V2 does, it is extremely slow (taking up much more than 50% of total run time when included) so it's still pretty much only usable for fixed-board searches or if you're really desperate.
Sokwe wrote: ↑April 7th, 2023, 4:33 pm
amling wrote: ↑April 7th, 2023, 1:52 pm
Every single branch completion here was found by matching a slice found in jslife-moving.
Is this done automatically?
Sort of. LLSSS can parse a directory of RLE files, but it is a little slow and it is very picky. I've manually stripped all the things it doesn't understand (incomplete partials, ephemeral number markers that don't actually make ships, any kind of stretcher, etc.) out of jslife-moving files in the copy I point it at. I also occasionally dump more ships in there when I see them on the forum (e.g. I think that west-most sparker in this waveguide was from something you made recently).
Sokwe wrote: ↑April 7th, 2023, 4:33 pm
By the way, here are smaller sparking ships capable of supporting your c/5 diagonal waveguide:
Code: Select all
x = 133, y = 156, rule = B3/S23
124bo$123bo2bo$122bo3bo$122bo$122bo2b2ob3o$125bo3bobo$131bo$127bo$127b
2o$125b3o4bo$124b2o3bobo$124bo2bo$125b2o2bo$121b3o5bo$120bo2bo$119b2o
2bo$122bo$117bo$116b2o$115bo$115bob4o$116b3o$112b2o$111bob2o$111bo2bo$
111b2o$109b4o$108b4o$106b2o2b2o$106b5o2$103b2o$103b2o$102bo3bo$102bo3b
o$103bo$99b3o2bo$98bo2bo$97b2o2bo$100bo$95bo$94b2o$93bo$93bob4o$94b3o$
90b2o$89bob2o$89bo2bo$89b2o$87b4o$86b4o$84b2o2b2o$84b5o2$81b2o$81b2o$
80bo3bo$80bo3bo$81bo$77b3o2bo$76bo2bo$75b2o2bo$78bo$73bo$72b2o$71bo$
71bob4o$72b3o$68b2o$67bob2o$67bo2bo$67b2o$65b4o$64b4o$62b2o2b2o$62b5o
2$59b2o$59b2o$58bo3bo$58bo3bo$59bo$55b3o2bo$54bo2bo$52b2o2b2o2$54bo$
50bo2bo$49bob2o2b2o$48b2obo2b3o$48bo2b5o$50bo3bo$46bo6bo$46bo2b2o$45bo
2bo3bo$40b3o2b3o$39bo7bo$38bo3b5o$38bo2bo3b5o$37b2obo6bo$37bo2bo6b3o$
38bobo$60b2obo3b4o$38bo10b3o7bo2b3ob2ob5o$36bo4bo16bo3b2o2b2obo2bobo$
35b4obo8bobo6bo$35bo14bo7bo3bo5bo3bo$50bo3b2o7bo4bo$34bobo14b2o2bo4b2o
10b2o2b2o$34bo3bo13bo2b2obo4b2o6b2ob2o2bo2bo$36bobo19bo4bobo10b5obo$
29b3o4b3o31bo4b2o5bo$29bo2b2o36bobobo$31b4o4bo31bo$28b2o4b2ob2o$5b2o
26bo2b4o$5b2o25bo6bo$4bo2bo24bo$2b2obo3bo26bo$2b2obo3bo22b2ob2o$bo4bo
3b2o19bo5bo$3o4b2ob2o18bo2bo2bo$bobo3b2obo20bobo2bo$b4o5bobo18b2o3bo$
2bo2bo4bob3o15b4ob2o$5b2o7b2o12b2o4bob3o$11b2obo16bo2b2obo2bo$11b2o2bo
14bo7bobo$12bo18bo6bobo$11bo3bo14bo$11b4o3b2o11bo5b2o$11bobo2b3obo15bo
bo$12b2o2b2obo16bobo$12b2o21bo2bo$13bo21bobo$15bo21bob2o$14bo19b4o$15b
obo17bob2o2bo$17bo4b2o12bo3bo$17bobob2o12bob3o$21bo14bob2o$19b2o18b2o
2$20bo15b2ob2o$20bo2b2o8b2ob2o$19bo5bo7bo2bo$19bo15bo$20bob2obo10bo$
24b2o12bo$24b3o11bo$37bobo$24bobo4b2o4b2o$24bo6b2ob2ob3o$25bo2bo2b2o5b
2o$26bo2bo3bo5bo$27b2o!
Nice. Even with all of the completions dumped into the log it can be hard to sort through them and figure out which of them is smallest while still clearing whatever surrounding obstacles there are. Also I usually greedily take the first found batch of results as long as its clearance for the rest of the search is decent, rather than waiting to see if the same search is gonna cough something better/smaller up a few rows later.