DroneBetter wrote: December 15th, 2025, 9:25 am
I [want] a c/4d in Day & Night's chequerboard dual (containing a bubble of ordinary Day & Night universe inside it, so I can begin searching for wallcrawlers which grow and shrink the width ...)
That goal is definitely up my alley and there are a few things you might try with LLSSS here. Unfortunately a lot of searches are going to have problems getting gummed up on tunnels as once a search has found one it's generally going to be inexhaustible. I'll start with your suggested search ideas and add my own thoughts at the end...
DroneBetter wrote: December 15th, 2025, 9:25 am
...[set] up an LLSSS search whose end is not an agar but a specific slice...
This is absolutely something LLSSS can do, although the exact mechanics all have their own drawbacks and I'm not 100% convinced you're likely to get lucky and reach any part of that b2f partial.
Key for this is deciding combination of geometry and symmetry. c4d-down and c4d-f2b asymmetric will look similar and can use ingest-1gp and the "slices" ends which is going to be much easier to set up. c4d-f2b odd isn't as nice as unfortunately none of that code is ready for symmetry and so we'd need to use something like regex ends which is quite tedious and error-prone to configure. In my experience LLSSS has been quite a bit slower with diagaonal oriented W (f2b as opposed to down which has W=Y), but of course if you want to benefit from symmetry it has to be f2b.
For the slices version, step one is to ingest the back partial as slices. Unfortunately the current cut of ingest-1gp with default configuration does awfully with diagonal geometries, both for c4d-down and c4d-f2b.
For c4d-down it can be convinced to cut it properly with "--left-x-pad 30". So...
Code: Select all
$ cat back-nw.rle
x = 125, y = 125, rule = B1e2cn3acjkr4cny5einqy6ei7c/S01e2-ei3acjkr4-ejr5einqy6-cn7c8
12bo$11bo$12bo$11b3o$10b7o$5bo2bobobobo2bo$9bobob3o2bo$7b2obobo2bo3bo$
5bobobobob3o4bo$6bobo2bob3obobobo$4b2obo4bobo4b2obo$bob2obob2ob4obobo
2bobo$ob4obo2b2o3bobo4bobo$3b2obob2obo2bobobob2obobo$4b3ob4obo2bo5b2o
2bo$4bob4o2bo4bobob2o2bobo$4bo6bob2obobob2o3b2obo$5bo3bo2bo2bobobobobo
3bobo$6bo4bobo2bobobobobo3bobo$7bob2o4bobobobobo5bobo$8bobo2bo2bobobob
ob2ob2obobo$9bobobob3obobobo2bob4obo$10bobob2o2bobobobo2bo2b3obo$11bob
2o2bobobobob2obobo2bobo$12bo5bobobobo4bob2obobo$13bob2o3bo2bobob2obobo
2bobo$14bobo4bobo2bobo2bo2bobobo$15bobo2bobo2bo4bobo4bobo$16bobob2obob
2ob2obobob2obobo$17bobobo2bo3b2ob2obob2obobo$18bob4obobo2b2obo3bo2bobo
$19bob2obobob6ob2ob2obobo$20bobob2obobob6ob2obo2bo$21bobo4bob3o2bo2b2o
bobobo$22bobobo2bo2bo2b2obo2b2obobo$23bobo2bo2b4obob3o2bobobo$24bobob
2ob2ob2ob3ob2ob3obo$25bobob2o5bo3b4obobobo$26bobo2b6obobo2b3o2bobo$27b
obob3ob2o2bo2b2o5bobo$28bobo4bob2ob2o4bobobobo$29bob4ob2o2b2obobob3obo
bo$30bo3bob2obo3bo3bo3b2obo$31bobobob3ob3obo4b4obo$32bobobobo5bobobobo
3bobo$33bob4o2bobobobobo3bobobo$34bobo3bo3bobobo2b2ob3obo$35bobo3b2o2b
obo2bob3obo2bo$36bobob2o2bobobo2b2o2bob2obo$37bobobo3bo3bob2obobobo2bo
$38bobo2b2o2bo2b4obobo2bobo$39bob3o2bob9obobo2bo$40bob2o2b6o2bob2obob
2obo$41bobobobo2b2o2b3obob3o2bo$42bobob2obob3obob5o2bobo$43bob2obob2ob
3o3b4ob2obo$44bob2obob3o2bo3bo2b2obobo$45bo2bobobobo2b2o4b5obo$46bob2o
bob2o2bo2bo5bobobo$47bo4bob2o3bob4ob3o2bo$48bob2ob4obobobo2bobob2obo$
49bo2b4o3bobobob2obo4bo$50bob2obo3b2obobo2bobob2obo$51bo4b2obobobo2bob
o2bobobo$52bob4obo2bobo2bo2bobobobo$53bobobo2b2o3b3o2b2obobobo$54bob4o
bobobo6bobobobo$55bobob2obob2o2bob4obobobo$56bob2obobo3bo3bo2b3obobo$
57bo2bobo6b3ob2o2bobobo$58bobo3b2obob2obo2b2obobobo$59bo2b2obob3o6bo3b
2obo$60bobobob2o2bo4bob3o2bobo$61bobobobobo4b3ob6obo$62bobobob2o3bob2o
b2obo2bobo$63bobob2obob3o2b4o2b3obo$64bobobob2ob2o2b3ob2o2bo2bo$65bobo
bo2bo2b2obobo4b3obo$66bobobob6obo2bo2bob2obo$67bobo2b5obobob5o2bobo$
68bob2obobobobobob3o2bobobo$69bobob2obo3bobob3o2bobobo$70bob2o2bob2obo
bo2bo2b3o2bo$71bobobo3b2ob3ob2o3b3obo$72bob2o3b3ob2o2bo2bobobobo$73bob
7o3bob2ob2o3bobo$74bo2bobob3o2b2ob4o2bo2bo$75bob2o4b6obob6obo$76bobobo
4bobobob3obo2bobo$77bobob2o3bobobob2ob3obobo$78bobobob4obob2o3b2o2bobo
$79bob3ob2obobo2bo2bo2bobobo$80bo2b2ob5ob4obob2obobo$81bobo3b3ob2o5bo
2bobobo$82bobo2bo4bobob2obo2bobobo$83bob5o2bo2b2o2bob3obobo$84bo2bob3o
2b2ob2obobobobobo$85bobob2obobob5ob2obobobo$86bobo4bo2b2o6bobobobo$87b
obob2ob2obobob2o4bobobo$88bobobo3b2o2bobo2bo2bobobo$89bobobobo3bo2b2o
4bob2obo$90bobob4ob5o2b4obo2bo$91bobobobo3b2ob5obob2obo$92bobobobo4bo
2b2obobob2obo$93bobobo2bo2bobob4ob2obobo$94bobobo3b3ob2o2b4o2bobo$95bo
bobo2b6obobobo2bo2bo$96bobob4obo2bob3o3b3ob2o$97bobo2bob2obo3b3obobobo
bo$98bob2obob2obo3bobobobobo$99bob2obob4o3b3obobo2bo$100bo2bob2ob3o3bo
bobobob2o$101bob5obobo4b2obo2b3o$102bobo5b3o7bo2b2o$103bobo3bobo4bob3o
$104bob3obob2obo3b2o$105bo2b2obobo$106bobobobo2bo$107bobobobob2o$108bo
bobob3o$108b2o$111b3o$112b3o$113b2o!
$ rlife slices-tool ingest-1gp --rule 'B1e2cn3acjkr4cny5einqy6ei7c/S01e2-ei3acjkr4-ejr5einqy6-cn7c8' c4d-down --left-x-pad 30 --w-cuts ALL back-nw.rle back-nw-down.slices
...
20251216 10:23:00 [INFO] Total of 109 slices.
20251216 10:23:00 [INFO] Saved to "back-nw-down.slices".
$
For c4d-f2b a great deal of trial and error eventually cut it correctly with 200 pad on each side. The problem is it looks for biggest area UW rectangle (a diamond in XY space) and considers all the edges of the square shape of the pattern corrupt so it takes something like a diamond whose vertices are the midpoints. To get this to reasonably cover the actual relevant parts requires expanding the square considerably and then the biggest area algorithm is quite slow (cubic in pattern size). I may try to rethink the algorithm and see if I can figure out some other way to do this all, both for speed, and for avoiding this mess of guessing pads to convince it to not be silly. Over here this ultimately takes ~15s which is glacial for how little data this is:
Code: Select all
$ rlife slices-tool ingest-1gp --rule 'B1e2cn3acjkr4cny5einqy6ei7c/S01e2-ei3acjkr4-ejr5einqy6-cn7c8' c4d-f2b --left-x-pad 200 --right-x-pad 200 --top-y-pad 200 --bottom-y-pad 200 --shift-idxs ALL --w-cuts ALL back-nw.rle back-nw-f2b.slices
...
20251216 10:29:24 [INFO] Total of 853 slices.
20251216 10:29:24 [INFO] Saved to "back-nw-f2b.slices".
$
Note that in both cases I've specified "--w-cuts ALL" to take every slice and hopefully find any match as early as possible, but also allow a match as late as possible. In the latter case I've also specified "--shift-idxs ALL" to allow both subtile alignments of the pattern.
Now to run a search with this you'd include "--ends slices:<whatever>". Include "bg," if you want to find results that reach the back agar as well (as specifying "--ends" overrides that default "--ends bg").
Code: Select all
$ rlife llsss-recentering-wao --rule 'B1e2cn3acjkr4cny5einqy6ei7c/S01e2-ei3acjkr4-ejr5einqy6-cn7c8' c4d-down '@bg' --ends bg,slices:back-nw-down.slices 10
...
20251216 10:32:49 [INFO] Start: compile step LlsssEndsSlices
20251216 10:32:49 [INFO] LlsssEndsSlices: 3087 NFA states
20251216 10:32:49 [INFO] LlsssEndsSlices: 2616 DFA states
20251216 10:32:49 [INFO] Finish: compile step LlsssEndsSlices -> took 4.69835ms (26.768ms user, 890µs sys)
...
$ rlife llsss-recentering-wao --rule 'B1e2cn3acjkr4cny5einqy6ei7c/S01e2-ei3acjkr4-ejr5einqy6-cn7c8' c4d-f2b '@bg' --ends bg,slices:back-nw-f2b.slices 05
...
20251216 10:33:17 [INFO] Start: compile step LlsssEndsSlices
20251216 10:33:17 [INFO] LlsssEndsSlices: 14520 NFA states
20251216 10:33:17 [INFO] LlsssEndsSlices: 12316 DFA states
20251216 10:33:17 [INFO] Finish: compile step LlsssEndsSlices -> took 20.736431ms (64.934ms user, 4.067ms sys)
...
Now for the c4d-f2b odd search with "regex" ends. I picked this random slice out of the ingest-1gp output above:
Code: Select all
| | R | . | R. |
| .. | R.. | ... | R... |
| .... | u.... | *... | u*... |
| .*.. | u.*.. | *.*. | u*.*. |
| .*.* | u.*.* | *.*. | u*.*. |
| *..* | u...* | *.** | u..** |
| .**. | u***. | ...* | u*.** |
| .*.* | u.*.* | *.*. | u*.** |
| .*.* | u.*.* | *.*. | u*.*. |
| .*.* | u.*.* | *.*. | u*.*. |
| .*.* | u.*.* | ..*. | u*.*. |
| .*.* | u**.* | *.*. | u..*. |
| **.* | u.*.* | *... | u*.** |
| ..** | u..** | *.** | u*.** |
| .*.. | u.*.. | *.** | u*.** |
| .*.* | L.*.* | ..*. | L..*. |
| ...* | L...* | .... | L.... |
| .... | .... | ... | ... |
| .. | .. | . | . |
Marking a center diagonal with "o" and feeding through to-uwi c4d-f2b we get:
Code: Select all
| LLuuuuuuuuuuuuuRR | LLuuuuuuuuuuuuuRR |
| .....*......*.... | ..****.*o*.****.. |
| ......*....*..... | ..***.*****.***.. |
| ................. | ..**.*******.**.. |
| ................. | ..**.*******.**.. |
| .....*......*.... | ..***.*****.***.. |
| .....*......*.... | ..*************.. |
| ....**......**... | ..**.*******.**.. |
| ....***....***... | ..**.*******.**.. |
That center diagonal is aligned as the left odd edge will expect (of the two "--shift-idx" values one is right for this and one is not). Cutting to the center and re-annotating as regex:
Code: Select all
| uuuuuuu(Z)* | uuuuuuu(Z)* |
| ....*.._.__ | **.****_.__ |
| ...*..._.__ | ***.***_.__ |
| ......._.__ | ****.**_.__ |
| ......._.__ | ****.**_.__ |
| ....*.._.__ | ***.***_.__ |
| ....*.._.__ | *******_.__ |
| ....**._.__ | ****.**_.__ |
| ...***._.__ | ****.**_.__ |
Now back through from-uwi:
Code: Select all
$ cat back-nw-f2b-odd.re
| | | | |
| | | * | _ |
| *_ | __ | )__ | ___ |
| )___ | ____ | Z____ | .___ |
| Z.___ | ..__ | (..__ | _.._ |
| (_.._ | __.. | u__.. | *__. |
| u*__. | .*__ | u.*__ | *.*_ |
| u*.*_ | .*.* | u.*.* | *.*. |
| u*.*. | *..* | u...* | *.** |
| u..** | .**. | u***. | ...* |
| u*.** | .*.* | u.*.* | *.*. |
| u*.** | .*.* | u.*.* | *.*. |
| u*.*. | .*.* | .*.* | .*. |
| .*. | .* | .* | . |
| . | | | |
And this can finally be used with "--ends regex:...":
Code: Select all
rlife llsss-recentering-wao --rule 'B1e2cn3acjkr4cny5einqy6ei7c/S01e2-ei3acjkr4-ejr5einqy6-cn7c8' c4d-f2b '@bg' --left-edge odd --wao-left-edge-errors --ends bg,regex:back-nw-f2b-odd.re 05
...
20251216 10:44:26 [INFO] Start: compile step LlsssEndsRegex
20251216 10:44:26 [INFO] LlsssEndsRegex: 141 NFA states
20251216 10:44:26 [INFO] LlsssEndsRegex: 129 DFA states
20251216 10:44:26 [INFO] LlsssEndsRegex: bit depth 0 -> 10 table size 9 * 2^10 = 9216
20251216 10:44:26 [INFO] LlsssEndsRegex: bit depth 10 -> 16 table size 8 * 2^6 = 512
20251216 10:44:26 [INFO] Finish: compile step LlsssEndsRegex -> took 639.532µs (1.746ms user, 0ns sys)
...
This regex workflow is error-prone enough that it's probably worth verifying we got it right. E.g. here is a search from the slice one W row above it finding it:
Code: Select all
$ cat x1.in
| | | R | . |
| R. | .. | R.. | ... |
| R... | .... | R.... | .... |
| R.... | .... | u.... | *... |
| u*... | .*.. | u.*.. | ..*. |
| u*.*. | **.* | u**.* | ***. |
| u..*. | *..* | u**.* | ..*. |
| u.**. | ..*. | u**.. | ..*. |
| u.... | ...* | u.*** | *... |
| u*.*. | .*.* | u.*.* | *.*. |
| u*.*. | .*.* | .*.* | .*. |
| .*. | .* | .* | . |
| . | | | |
$ rlife llsss-recentering --rule 'B1e2cn3acjkr4cny5einqy6ei7c/S01e2-ei3acjkr4-ejr5einqy6-cn7c8' c4d-f2b x1.in --left-edge odd --llsss-env LLSSS_HALT_ON_ENDS=true --ends regex:back-nw-f2b-odd.re XX
...
20251216 10:47:35 [INFO] End [thinnest] ("LlsssEndsRegex", "back-nw-f2b-odd.re"):
20251216 10:47:35 [INFO] | | R | . | R. |
20251216 10:47:35 [INFO] | .. | R.. | ... | R... |
20251216 10:47:35 [INFO] | .... | u.... | *.... | u*.... |
20251216 10:47:35 [INFO] | .*.... | u.*.... | ..*... | u*.*... |
20251216 10:47:35 [INFO] | **.*.. | u**.*.. | ***.*. | u..*.*. |
20251216 10:47:35 [INFO] | *..*.* | u**.*.* | ..*.*. | u.**.*. |
20251216 10:47:35 [INFO] | ..*..* | u**...* | ..*.** | u....** |
20251216 10:47:35 [INFO] | ...**. | u.****. | *....* | u*.*.** |
20251216 10:47:35 [INFO] | .*.*.* | u.*.*.* | *.*.*. | u*.*.** |
20251216 10:47:35 [INFO] | .*.*.* | .*.*.* | .*.*. | .*.*. |
20251216 10:47:35 [INFO] | .*.* | .*.* | .*. | .*. |
20251216 10:47:35 [INFO] | .* | .* | . | . |
...
DroneBetter wrote: December 15th, 2025, 9:25 am
alternatively, would LLSSS c/4d b2f from a seed backend be powerful enough to complete it?
Uncertain. Similar considerations apply about choosing between up, b2f, and b2f odd. Presumably include "s_periodic:0:0:1" ends either way to find any still life wicks (e.g. tunnel).
E.g. I fished the back-most slice out of the "ingest-1gp" output, reoriented it travelling SE, and cut it in half for odd symmetry:
Code: Select all
$ cat x2.in
| | | | |
| R. | . | R | |
| R... | ... | R.. | .. |
| R.... | .... | R.... | .... |
| u.... | .... | u.... | .... |
| u.... | .... | u.... | .... |
| u...* | .... | u.... | .... |
| u.... | .... | u...* | .... |
| u.... | .... | u.... | .... |
| u.... | .... | u.... | .... |
| u.... | .... | u.... | .... |
| ... | ... | .... | .... |
| . | . | .. | .. |
$ rlife llsss-recentering --rule 'B1e2cn3acjkr4cny5einqy6ei7c/S01e2-ei3acjkr4-ejr5einqy6-cn7c8' c4d-b2f x2.in --left-edge odd --ends bg,s_periodic:0:0:1 05
...
You could also just start from scratch with WAO:
Code: Select all
$ rlife llsss-recentering --rule 'B1e2cn3acjkr4cny5einqy6ei7c/S01e2-ei3acjkr4-ejr5einqy6-cn7c8' c4d-b2f '@bg' --left-edge odd --ends bg,s_periodic:0:0:1 05
...
The most important major search idea of my own that I would add is to try for a back of variable size in f2b-like direction. For this you'd want to know what widths were useful, i.e. can be made by combining edge crawlers. Ideally this would be some small minimum width and a GCD of 2 HD (the smallest difference between tunnels anyway). Then you'd run a WAO search, f2b-like (i.e. down, f2b, or f2b odd), to start with every legal-sized tunnel searching for strict agar ends. As an example, let's imagine we had found edge growers/shrinkers that would allow us to create 7 HD or wider tunnels (i.e. min 7 HD, step 2 HD). I'll sketch the input file for "c4d-down" since I think it will be easiest to understand, but similar principles apply for f2b or f2b odd (modulo having to double f2b odd for center diagonal on versus center diagaonal off). For down I'd use an input file like this:
Code: Select all
$ cat x3.in
| LLLuuuuuuABABuRRR | LLLuuuuuuABABuRRR | LLLuuuuuuABABuRRR | LLLuuuuuuABABuRRR |
| ...*.*.*.*.*..... | ...*.*.*.*.*..... | ...*.*.*.*.*..... | ...*.*.*.*.*..... |
| ....*.*.*.*.*.... | ....*.*.*.*.*.... | ....*.*.*.*.*.... | ....*.*.*.*.*.... |
| .....*.*.*.*.*... | .....*.*.*.*.*... | .....*.*.*.*.*... | .....*.*.*.*.*... |
The resulting 3-grams are recombinable as low as LLuuuuuuABuRR which is a 7 HD tunnel, but can also make LLuuuuuuABABuRR (9 HD), LLuuuuuuABABABuRR (11 HD), etc.
Code: Select all
$ rlife llsss-recentering-wao --rule 'B1e2cn3acjkr4cny5einqy6ei7c/S01e2-ei3acjkr4-ejr5einqy6-cn7c8' c4d-down x3.in 14
...
20251216 11:18:13 [INFO] Thinnest partial:
20251216 11:18:13 [INFO] | LLuuuuuuABuRRR | LLuuuuuuABuRRR | LLuuuuuuABuRRR | LLuuuuuuABuRRR |
20251216 11:18:13 [INFO] | ..*.*.*.*..... | ..*.*.*.*..... | ..*.*.*.*..... | ..*.*.*.*..... |
20251216 11:18:13 [INFO] | ...*.*.*.*.... | ...*.*.*.*.... | ...*.*.*.*.... | ...*.*.*.*.... |
20251216 11:18:13 [INFO] | ....*.*.*.*... | ....*.*.*.*... | ....*.*...*... | ....*.*.*.*... |
20251216 11:18:13 [INFO] | .....*.**..*.. | .....*..*..*.. | .....*.....*.. | .....**.*..*.. |
20251216 11:18:13 [INFO] | .........*.*.. | ......**.*.*.. | .......*.*.*.. | .........***.. |
20251216 11:18:13 [INFO] | ....***.*.*... | ....**....*... | ......***.**.. | ...*.*..**.*.. |
20251216 11:18:13 [INFO] | ...*..*.**.... | | | |
20251216 11:18:13 [INFO] Random[ish] partial:
20251216 11:18:13 [INFO] | SS | SS | SS | SS |
20251216 11:18:13 [INFO] | LLuuuuuuABABuRRRRR | LLuuuuuuABABuRRRRR | LLuuuuuuABABuRRRRR | LLuuuuuuABABuRRRRR |
20251216 11:18:13 [INFO] | ..*.*.*.*.*....... | ..*.*.*.*.*....... | ..*.*.*.*.*....... | ..*.*.*.*.*....... |
20251216 11:18:13 [INFO] | ...*.*.*.*.*...... | ...*.*.*.*.*...... | ...*.*.*.*.*...... | ...*.*.*.*.*...... |
20251216 11:18:13 [INFO] | ....*.*.*.*.*..... | ....*.*...*.*..... | ....*.*.*.*.*..... | ....*.*.*.*.*..... |
20251216 11:18:13 [INFO] | .....*..*..*.*.... | .....**.**.*.*.... | ......***..*.*.... | ......*.*....*.... |
20251216 11:18:13 [INFO] | .......**...*.*... | .......****.*.*... | .....*****.*..*... | ...*...*.*..*.*... |
20251216 11:18:13 [INFO] | ....****.*.*...*.. | ....*.*****.*..*.. | ...*..*....*...*.. | ...**..*.**....*.. |
20251216 11:18:13 [INFO] | ....**...*...*.*.. | | | |
...
I've not included s_periodic:0:0:1 as we don't actually want another tunnel, although we might prefer to know if one has been found as the search is then inexhaustible.
You could also try looking for backs via two-side symmetry searches. These would likely be WAO c4d-f2b searches with a start of checkerboard agar (i.e. D&N bubble), end of bg agar (i.e. checkerboard), and both edges set to odd symmetry (is there also a gse-and-toggle symmetry possible here? I might need to think about it, but there certainly isn't yet one in the code). Due to horrible alignment issues with symmetry edges you'd only be able to find certain widths. If sufficiently unhelpful patterns exist you might switch to c4d-b2f (and reverse start/end). Ultimately you'd hope to find a very short result, some sort of tunnel expander, and then finally separate back corners to connect everything up. This is all much harder than the above ideas, although it would allow for a level back. Perhaps let's call this plan B.
Hopefully that's enough to get you started. Unless/until released I will do my best to restrain myself from rushing in and trying to solve this, as interesting a problem as it is. Please do let me know how it goes if you try any of this.