Thread for your script-related questions

For scripts to aid with computation or simulation in cellular automata.
ENDW
Posts: 17
Joined: September 14th, 2026, 8:00 am

Re: Thread for your script-related questions

Post by ENDW »

Is there any script about the new p120 construction arm here? I want to reduce my pattern, but I didn't know where is it.
Edit:
russellsprouts wrote: September 20th, 2026, 9:55 am
ENDW wrote: September 20th, 2026, 8:24 am Is there any script about the new p120 construction arm here? I want to reduce my pattern, but I didn't know where is it.
See https://conwaylife.com/forums/viewtopic ... 89#p235089 and let me know if you have any questions!

I should probably make a dedicated thread for it as well
OK, thank you
Last edited by ENDW on September 20th, 2026, 10:19 am, edited 1 time in total.

Code: Select all

x = 22, y = 5, rule = B3/S23
3obo3bob3o2bo3bobo$o3b2o2bobo2bobobobobo$3obobobobo2bobobobobo$o3bo2b
2obo2bobobobo$3obo3bob3o3bobo2bo!
russellsprouts
Posts: 69
Joined: January 28th, 2026, 10:04 am

Re: Thread for your script-related questions

Post by russellsprouts »

ENDW wrote: September 20th, 2026, 8:24 am Is there any script about the new p120 construction arm here? I want to reduce my pattern, but I didn't know where is it.
See https://conwaylife.com/forums/viewtopic ... 89#p235089 and let me know if you have any questions!

I should probably make a dedicated thread for it as well
User avatar
I6_I6
Posts: 1082
Joined: July 26th, 2025, 8:44 pm
Location: Here, there, somewhere, anywhere, everywhere.
Contact:

Re: Thread for your script-related questions

Post by I6_I6 »

When searching for mealworm spaceships, instead of searching for them with an ordinary spaceship search program, would it be faster using a custom tool that searches using the 1D CA emulated inside the mealworm and its interactions with the ends of the mealworm? I have no idea how fast the current search programs are, so I don't know how helpful this strategy might be.

Code: Select all

#C [[ THEME Golly ]]
x = 27, y = 15, rule = LifeHistory
8.A$A6.A.A$3A4.BA2B.B2D$3.A4.2B.2B2DB$2.2A2.3B.6B2.3B$2.20B$4.19B$4.2B
C10BD4B$4.2B2C10BD4B$4.B2C11B2D3B$4.13B2D4B$5.12BD3B.B2A$6.13B3.BA.A$
6.3B.B3.B10.A$25.2A!
RuleEdit: A .rule file editing tool
ENDW
Posts: 17
Joined: September 14th, 2026, 8:00 am

Re: Thread for your script-related questions

Post by ENDW »

russellsprouts wrote: September 20th, 2026, 9:55 am
ENDW wrote: September 20th, 2026, 8:24 am Is there any script about the new p120 construction arm here? I want to reduce my pattern, but I didn't know where is it.
See https://conwaylife.com/forums/viewtopic ... 89#p235089 and let me know if you have any questions!

I should probably make a dedicated thread for it as well
My program reported errors when it was running. How can I solve this problem?
File "C:\uv-x86_64-pc-windows-msvc\shorter-snarkmaker-search\compile_p120_fast.py", line 294
rec_desc = f'let {rec.symbol}(d{rec.offset + int(args.direction == 'SW')}) = {recipe_parity}, {', '.join(map(str, recipe_rest))}, swim {rec.consumed}, ({rec.min_follow}) in'
^^
SyntaxError: f-string: unmatched '('
Traceback (most recent call last):
File "C:\uv-x86_64-pc-windows-msvc\shorter-snarkmaker-search\compile_p120_fast2.py", line 14, in <module>
from recipe_intermediates import RecipeDag
File "C:\uv-x86_64-pc-windows-msvc\shorter-snarkmaker-search\recipe_intermediates.py", line 475
result += f'{glider} -> {{{' '.join(map(str, non_periodic))}}}\n'
^
SyntaxError: f-string: expecting '}'

Code: Select all

x = 22, y = 5, rule = B3/S23
3obo3bob3o2bo3bobo$o3b2o2bobo2bobobobobo$3obobobobo2bobobobobo$o3bo2b
2obo2bobobobo$3obo3bob3o3bobo2bo!
russellsprouts
Posts: 69
Joined: January 28th, 2026, 10:04 am

Re: Thread for your script-related questions

Post by russellsprouts »

ENDW wrote: September 24th, 2026, 8:53 pm
russellsprouts wrote: September 20th, 2026, 9:55 am
ENDW wrote: September 20th, 2026, 8:24 am Is there any script about the new p120 construction arm here? I want to reduce my pattern, but I didn't know where is it.
See https://conwaylife.com/forums/viewtopic ... 89#p235089 and let me know if you have any questions!

I should probably make a dedicated thread for it as well
My program reported errors when it was running. How can I solve this problem?
File "C:\uv-x86_64-pc-windows-msvc\shorter-snarkmaker-search\compile_p120_fast.py", line 294
rec_desc = f'let {rec.symbol}(d{rec.offset + int(args.direction == 'SW')}) = {recipe_parity}, {', '.join(map(str, recipe_rest))}, swim {rec.consumed}, ({rec.min_follow}) in'
^^
SyntaxError: f-string: unmatched '('
Traceback (most recent call last):
File "C:\uv-x86_64-pc-windows-msvc\shorter-snarkmaker-search\compile_p120_fast2.py", line 14, in <module>
from recipe_intermediates import RecipeDag
File "C:\uv-x86_64-pc-windows-msvc\shorter-snarkmaker-search\recipe_intermediates.py", line 475
result += f'{glider} -> {{{' '.join(map(str, non_periodic))}}}\n'
^
SyntaxError: f-string: expecting '}'
It looks like an issue with an older Python version. I use Python 3.14 -- in older versions (3.11 and earlier), you couldn't re-use quotes inside of the brackets of an f'string'. I recommend using `uv` to run the Python code -- it will automatically install the dependencies and Python version when you run it. However, you might be able to fix it by replacing the outer quote marks with double quotes:

Code: Select all

rec_desc = f"let {rec.symbol}(d{rec.offset + int(args.direction == 'SW')}) = {recipe_parity}, {', '.join(map(str, recipe_rest))}, swim {rec.consumed}, ({rec.min_follow}) in"
I haven't tested in earlier Python versions, and some of the scripts in the repo definitely rely on 3.14 features, but it might work for compile_p120_fast.py with that quick fix.
ENDW
Posts: 17
Joined: September 14th, 2026, 8:00 am

Re: Thread for your script-related questions

Post by ENDW »

russellsprouts wrote: September 25th, 2026, 12:42 am It looks like an issue with an older Python version. I use Python 3.14 -- in older versions (3.11 and earlier), you couldn't re-use quotes inside of the brackets of an f'string'. I recommend using `uv` to run the Python code -- it will automatically install the dependencies and Python version when you run it. However, you might be able to fix it by replacing the outer quote marks with double quotes:

Code: Select all

rec_desc = f"let {rec.symbol}(d{rec.offset + int(args.direction == 'SW')}) = {recipe_parity}, {', '.join(map(str, recipe_rest))}, swim {rec.consumed}, ({rec.min_follow}) in"
I haven't tested in earlier Python versions, and some of the scripts in the repo definitely rely on 3.14 features, but it might work for compile_p120_fast.py with that quick fix.
I use 3.14 now, but it looks also repored an error. Why?
Traceback (most recent call last):
File "/cygdrive/c/uv-x86_64-pc-windows-msvc/lifelib/pythlib/lowlevel.py", line 247, in <module>
remote_load()
File "/cygdrive/c/uv-x86_64-pc-windows-msvc/lifelib/pythlib/lowlevel.py", line 160, in remote_load
obj = pickle.load(stdin)
^^^^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named 'numpy'
Traceback (most recent call last):
File "C:\uv-x86_64-pc-windows-msvc\compile_p120_fast2.py", line 148, in <module>
dag = RecipeDag(recipe, starting_block, keep_order=True, max_gens=args.max_stabilization_gens)
File "C:\uv-x86_64-pc-windows-msvc\recipe_intermediates.py", line 29, in __init__
for c in coords(starting_block):
~~~~~~^^^^^^^^^^^^^^^^
File "C:\uv-x86_64-pc-windows-msvc\recipe_intermediates.py", line 27, in coords
return map(lambda c: (int(c[0]), int(c[1])), patt.coords())
~~~~~~~~~~~^^
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\pattern.py", line 716, in coords
y = self.lifelib('GetCoords', self.ptr, y)
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\lowlevel.py", line 206, in __call__
retval = pickle.load(self.the_library.stdout)
EOFError: Ran out of input
Exception ignored in atexit callback <function cleanup_sessions at 0x000001BFC875B110>:
Traceback (most recent call last):
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\session.py", line 197, in cleanup_sessions
sess.lifelib('DeletePattern', ptr)
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\lowlevel.py", line 205, in __call__
self.the_library.stdin.flush()
OSError: [Errno 22] Invalid argument
Exception ignored while calling deallocator <function Pattern.__del__ at 0x000001BFC87EE4B0>:
Traceback (most recent call last):
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\pattern.py", line 93, in __del__
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\lowlevel.py", line 205, in __call__
OSError: [Errno 22] Invalid argument
Exception ignored while calling deallocator <function Pattern.__del__ at 0x000001BFC87EE4B0>:
Traceback (most recent call last):
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\pattern.py", line 93, in __del__
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\lowlevel.py", line 205, in __call__
OSError: [Errno 22] Invalid argument
Exception ignored while calling deallocator <function Pattern.__del__ at 0x000001BFC87EE4B0>:
Traceback (most recent call last):
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\pattern.py", line 93, in __del__
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\lowlevel.py", line 205, in __call__
OSError: [Errno 22] Invalid argument
Exception ignored while calling deallocator <function Pattern.__del__ at 0x000001BFC87EE4B0>:
Traceback (most recent call last):
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\pattern.py", line 93, in __del__
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\lowlevel.py", line 205, in __call__
OSError: [Errno 22] Invalid argument
Exception ignored while calling deallocator <function Pattern.__del__ at 0x000001BFC87EE4B0>:
Traceback (most recent call last):
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\pattern.py", line 93, in __del__
File "C:\uv-x86_64-pc-windows-msvc\lifelib\pythlib\lowlevel.py", line 205, in __call__
OSError: [Errno 22] Invalid argument
Traceback (most recent call last):
File "/cygdrive/c/uv-x86_64-pc-windows-msvc/lifelib/pythlib/lowlevel.py", line 247, in <module>
remote_load()
File "/cygdrive/c/uv-x86_64-pc-windows-msvc/lifelib/pythlib/lowlevel.py", line 160, in remote_load
obj = pickle.load(stdin)
^^^^^^^^^^^^^^^^^^
EOFError: Ran out of input
Please forgive me for pasted so much, because I don't know what went wrong.

Code: Select all

x = 22, y = 5, rule = B3/S23
3obo3bob3o2bo3bobo$o3b2o2bobo2bobobobobo$3obobobobo2bobobobobo$o3bo2b
2obo2bobobobo$3obo3bob3o3bobo2bo!
russellsprouts
Posts: 69
Joined: January 28th, 2026, 10:04 am

Re: Thread for your script-related questions

Post by russellsprouts »

ENDW wrote: September 26th, 2026, 3:16 am I use 3.14 now, but it looks also repored an error. Why?
Traceback (most recent call last):
File "/cygdrive/c/uv-x86_64-pc-windows-msvc/lifelib/pythlib/lowlevel.py", line 247, in <module>
remote_load()
File "/cygdrive/c/uv-x86_64-pc-windows-msvc/lifelib/pythlib/lowlevel.py", line 160, in remote_load
obj = pickle.load(stdin)
^^^^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named 'numpy'
...
What command are you using to run the script? I see that you have `uv` installed, so it should work if you run `uv.exe run compile_p120_fast.py` in command prompt/PowerShell in order to run the script. I haven't tested on Windows, so if that doesn't work, you could install Linux in WSL (I use Ubuntu 24.04 or 26.04), then run

Code: Select all

$ sudo snap install astral-uv
$ cd path/to/shorter-snarkmaker-search
$ uv run compile_p120_fast.py path/to/salvo --color=1 --parity=0 --direction=SW
ENDW
Posts: 17
Joined: September 14th, 2026, 8:00 am

Re: Thread for your script-related questions

Post by ENDW »

I solved all the problem mentioned earlier, but what can I do now?
error:
Traceback (most recent call last):
File "C:\cygwin64\home\(my name)\shorter-snarkmaker-search\compile_p120_fast2.py", line 148, in <module>
dag = RecipeDag(recipe, starting_block, keep_order=True, max_gens=args.max_stabilization_gens)
File "C:\cygwin64\home\(my name)\shorter-snarkmaker-search\recipe_intermediates.py", line 58, in __init__
raise Exception(f"Slow salvo didn't stabilize in {max_gens} gens!")
Exception: Slow salvo didn't stabilize in 2048 gens!
Last edited by ENDW on October 1st, 2026, 1:08 am, edited 2 times in total.

Code: Select all

x = 22, y = 5, rule = B3/S23
3obo3bob3o2bo3bobo$o3b2o2bobo2bobobobobo$3obobobobo2bobobobobo$o3bo2b
2obo2bobobobo$3obo3bob3o3bobo2bo!
User avatar
NNlk05
Posts: 754
Joined: January 14th, 2026, 8:42 pm
Location: Exploring in the Jungle of the INT Rulespace
Contact:

Re: Thread for your script-related questions

Post by NNlk05 »

ENDW wrote: September 26th, 2026, 11:18 pm I solved all the problem mentioned earlier, but what can I do now?
error:
Traceback (most recent call last):
File "C:\cygwin64\home\(my name)\shorter-snarkmaker-search\compile_p120_fast2.py", line 148, in <module>
dag = RecipeDag(recipe, starting_block, keep_order=True, max_gens=args.max_stabilization_gens)
File "C:\cygwin64\home\(my name)\shorter-snarkmaker-search\recipe_intermediates.py", line 58, in __init__
raise Exception(f"Slow salvo didn't stabilize in {max_gens} gens!")
Exception: Slow salvo didn't stabilize in 2048 gens!
This just means the slow salvo didn't stabilize in 2048 gens. Nothing to worry about.
Feci quod potui, faciant meliora potentes.

Code: Select all

x = 10, y = 3, rule = B34twz/S23
b2o4b2o$obo4bobo$2bo4bo!
[[ AUTOSTART AUTOHIDEGUI TRACK 0 -47/270 ZOOM 4 GPS 45 STEP 3 THEME BOOK ]]
https://nnlk05.github.io

=3
User avatar
ThePlayzr
Posts: 849
Joined: April 19th, 2025, 1:33 am
Location: Australia
Contact:

Re: Thread for your script-related questions

Post by ThePlayzr »

ThePlayzr wrote: September 23rd, 2026, 4:17 am So, the search will be 15x11.
For this search, which would be:

Code: Select all

python3 lls -c -b 15 11 -s p3 x0 y0 -r B3/S23-a5 -p ">0" -p "<=14"
Or a 15x11 search for p3s in B3/S23-a5 with 14 or less cells; what would be faster? LLS or RLS?
Please visit my rules (found on my wiki page) and contribute!
User:ThePlayzr
I have LLS and qfind.
I manage the Travelling Ts pattern collection. It can be found on the first post in the thread.
User avatar
NNlk05
Posts: 754
Joined: January 14th, 2026, 8:42 pm
Location: Exploring in the Jungle of the INT Rulespace
Contact:

Re: Thread for your script-related questions

Post by NNlk05 »

ThePlayzr wrote: September 27th, 2026, 12:50 am *snip* what would be faster? LLS or RLS?
VLS
Feci quod potui, faciant meliora potentes.

Code: Select all

x = 10, y = 3, rule = B34twz/S23
b2o4b2o$obo4bobo$2bo4bo!
[[ AUTOSTART AUTOHIDEGUI TRACK 0 -47/270 ZOOM 4 GPS 45 STEP 3 THEME BOOK ]]
https://nnlk05.github.io

=3
User avatar
ThePlayzr
Posts: 849
Joined: April 19th, 2025, 1:33 am
Location: Australia
Contact:

Re: Thread for your script-related questions

Post by ThePlayzr »

NNlk05 wrote: September 27th, 2026, 12:51 am
ThePlayzr wrote: September 27th, 2026, 12:50 am *snip* what would be faster? LLS or RLS?
VLS
That wasn't an option. I don't have VLS nor the time to install it right now.
Please visit my rules (found on my wiki page) and contribute!
User:ThePlayzr
I have LLS and qfind.
I manage the Travelling Ts pattern collection. It can be found on the first post in the thread.
User avatar
NNlk05
Posts: 754
Joined: January 14th, 2026, 8:42 pm
Location: Exploring in the Jungle of the INT Rulespace
Contact:

Re: Thread for your script-related questions

Post by NNlk05 »

ThePlayzr wrote: September 27th, 2026, 1:07 am That wasn't an option. I don't have VLS nor the time to install it right now.
Depends... try it and see
Feci quod potui, faciant meliora potentes.

Code: Select all

x = 10, y = 3, rule = B34twz/S23
b2o4b2o$obo4bobo$2bo4bo!
[[ AUTOSTART AUTOHIDEGUI TRACK 0 -47/270 ZOOM 4 GPS 45 STEP 3 THEME BOOK ]]
https://nnlk05.github.io

=3
User avatar
I6_I6
Posts: 1082
Joined: July 26th, 2025, 8:44 pm
Location: Here, there, somewhere, anywhere, everywhere.
Contact:

Re: Thread for your script-related questions

Post by I6_I6 »

I fed this to pslmake:

Code: Select all

x = 351, y = 394, rule = LifeHistory
74.A$73.A.A$73.2A7$67.2A$66.A2.A$66.A.A$67.A2$61.2A$60.A2.A$51.2A2.A
5.A.A$51.2A2.3A4.A$58.A$55.4A$55.A$56.A$49.2A2.4A$49.A3.A$39.2A5.2A.A
6.3A$38.A2.A4.A2.3A3.A3.A12.2A$39.A.A5.2A3.A2.4A12.A2.A$40.A8.4A19.2A
$49.A5.2A4.2A.A.A$50.3A2.A2.A.A.A.2A.A$53.A.A.2A.A.A4.A$48.5A2.A2.A.A
.A4.2A$48.A6.2A4.A$50.A$49.2A8$105.2A$105.A.A$106.A10$.A$A.A$.2A39$
58.A$57.A.A$58.2A46$168.2A$167.A2.A$168.2A95$308.A$307.A.A$308.2A10$
317.2A$316.A2.A$316.A2.A$317.2A3$287.A$286.A.A$287.A.A24.2A$288.2A24.
A$315.3A$317.A11.2A$291.2A36.A.A$290.A2.A37.A$291.2A38.2A2$327.2A$
303.2A3.2A17.A$284.2A16.A2.A2.2A18.3A$283.A2.A16.2A25.A$284.2A2$306.
2A$305.A2.A$305.A2.A$255.A50.2A11.A$255.3A60.A.A$258.A23.2A34.2A$257.
2A22.A.A$282.A30.A$312.A.A15.2A16.2A$311.A2.A14.A2.A5.2A8.A.A$268.2A
12.2A5.A22.2A16.A.A5.2A9.A$268.A.A10.A2.A3.A.A40.A$261.2A7.A11.A.A4.A
.A$260.A2.A6.2A11.A6.2A10.3A8.2A10.2A$260.A2.A49.A.A8.A.A4.2A$261.2A
45.3A4.A9.A4.A.A16.A$314.A15.2A16.A.A$299.2A13.2A31.A2.A$278.2A18.A2.
A3.2A4.A36.2A$278.A.A18.2A5.A3.A.A10.2A$271.2A7.A6.2A14.3A5.2A10.A.A$
270.A2.A6.2A4.A2.A13.A21.A$270.A2.A12.A2.A35.2A$271.2A14.2A12.A$301.A
32.A$301.A3.A27.A.A$295.A8.A.A25.A2.A$294.A.A8.2A26.2A$293.A2.A2.2A$
294.2A3.A2.2A$300.2A.A28.A$332.3A$335.A$290.2A42.2A$289.A.A$290.A83$
285.2D$285.2D!
That big SL at the top left is there so that pslmake will avoid it. However, for some odd reason, pslmake actually attempts to build some of the snark heart, even though it's part of a big strict still life, like this:

Code: Select all

x = 33, y = 42, rule = LifeHistory
15.2A2.A$15.2A2.3A$22.A$19.4A$19.A$20.A$13.2A2.4A$13.A3.A$3.2A5.2A.A6.
3A$2.A2.A4.A2.3A3.A3.A$3.A.A5.2A3.A2.4A$4.A8.4A$13.A5.2A4.2A.A.A$14.3A
2.A2.A.A.A.2A.A$17.A.A.2A.A.A4.A$14.3A2.A2.A.A.A4.2A$13.A5.2A4.A$2.2A
3.2A4.2A$.A.A2.A.A$A.A4.A$.A19$27.2A$27.A.A$27.A!
And it isn't like it's impossible to get the loaf there without using that component, so I have no clue what's going on.

Code: Select all

#C [[ THEME Golly ]]
x = 27, y = 15, rule = LifeHistory
8.A$A6.A.A$3A4.BA2B.B2D$3.A4.2B.2B2DB$2.2A2.3B.6B2.3B$2.20B$4.19B$4.2B
C10BD4B$4.2B2C10BD4B$4.B2C11B2D3B$4.13B2D4B$5.12BD3B.B2A$6.13B3.BA.A$
6.3B.B3.B10.A$25.2A!
RuleEdit: A .rule file editing tool
User avatar
Goldtiger997
Posts: 814
Joined: June 21st, 2016, 8:00 am

Re: Thread for your script-related questions

Post by Goldtiger997 »

My guess is that the object separation code used for detection of (32+)-bit still-lifes isn't perfect. In the infile you provided, the snark heart would be stable on its own, so I suspect pslmake thinks it is something you want built. I tried connecting up the snark heart more directly to the rest of the still-life to avoid this. Pslmake was able to build the following infile for me:

Code: Select all

x = 287, y = 394, rule = LifeHistory
74.A$73.A.A$73.2A7$67.2A$66.A2.A$66.A.A$67.A2$61.2A$60.A2.A$51.2A2.A
5.A.A$51.2A2.3A4.A$58.A$55.4A$55.A$56.A$49.2A2.4A$49.A3.A$39.2A5.2A.A
6.3A$38.A2.A4.A2.3A3.A3.A12.2A$39.A.A5.2A3.A2.4A.A10.A2.A$40.A8.4A7.A
2.A8.2A$49.A5.4A.A.A.A.A$50.6A2.A.A.A.2A.A$58.A.A.A4.A$48.11A.A.A4.2A
$48.A12.A$50.A2.4A$49.2A2.A2.A8$105.2A$105.A.A$106.A10$.A$A.A$.2A39$
58.A$57.A.A$58.2A46$168.2A$167.A2.A$168.2A247$285.2D$285.2D!
ENDW
Posts: 17
Joined: September 14th, 2026, 8:00 am

Re: Thread for your script-related questions

Post by ENDW »

ENDW wrote: September 26th, 2026, 11:18 pm I solved all the problem mentioned earlier, but what can I do now?
error:
Traceback (most recent call last):
File "C:\cygwin64\home\(my name)\shorter-snarkmaker-search\compile_p120_fast2.py", line 148, in <module>
dag = RecipeDag(recipe, starting_block, keep_order=True, max_gens=args.max_stabilization_gens)
File "C:\cygwin64\home\(my name)\shorter-snarkmaker-search\recipe_intermediates.py", line 58, in __init__
raise Exception(f"Slow salvo didn't stabilize in {max_gens} gens!")
Exception: Slow salvo didn't stabilize in 2048 gens!
My pattern has stabilized, but it still reported this. Why?

Code: Select all

x = 22, y = 5, rule = B3/S23
3obo3bob3o2bo3bobo$o3b2o2bobo2bobobobobo$3obobobobo2bobobobobo$o3bo2b
2obo2bobobobo$3obo3bob3o3bobo2bo!
User avatar
Hippo.69
Posts: 696
Joined: July 14th, 2020, 7:35 pm
Contact:

Re: Thread for your script-related questions

Post by Hippo.69 »

I6_I6 wrote: September 27th, 2026, 5:18 am I fed this to pslmake:

Code: Select all

x = 351, y = 394, rule = LifeHistory
74.A$73.A.A$73.2A7$67.2A$66.A2.A$66.A.A$67.A2$61.2A$60.A2.A$51.2A2.A
5.A.A$51.2A2.3A4.A$58.A$55.4A$55.A$56.A$49.2A2.4A$49.A3.A$39.2A5.2A.A
6.3A$38.A2.A4.A2.3A3.A3.A12.2A$39.A.A5.2A3.A2.4A12.A2.A$40.A8.4A19.2A
$49.A5.2A4.2A.A.A$50.3A2.A2.A.A.A.2A.A$53.A.A.2A.A.A4.A$48.5A2.A2.A.A
.A4.2A$48.A6.2A4.A$50.A$49.2A8$105.2A$105.A.A$106.A10$.A$A.A$.2A39$
58.A$57.A.A$58.2A46$168.2A$167.A2.A$168.2A95$308.A$307.A.A$308.2A10$
317.2A$316.A2.A$316.A2.A$317.2A3$287.A$286.A.A$287.A.A24.2A$288.2A24.
A$315.3A$317.A11.2A$291.2A36.A.A$290.A2.A37.A$291.2A38.2A2$327.2A$
303.2A3.2A17.A$284.2A16.A2.A2.2A18.3A$283.A2.A16.2A25.A$284.2A2$306.
2A$305.A2.A$305.A2.A$255.A50.2A11.A$255.3A60.A.A$258.A23.2A34.2A$257.
2A22.A.A$282.A30.A$312.A.A15.2A16.2A$311.A2.A14.A2.A5.2A8.A.A$268.2A
12.2A5.A22.2A16.A.A5.2A9.A$268.A.A10.A2.A3.A.A40.A$261.2A7.A11.A.A4.A
.A$260.A2.A6.2A11.A6.2A10.3A8.2A10.2A$260.A2.A49.A.A8.A.A4.2A$261.2A
45.3A4.A9.A4.A.A16.A$314.A15.2A16.A.A$299.2A13.2A31.A2.A$278.2A18.A2.
A3.2A4.A36.2A$278.A.A18.2A5.A3.A.A10.2A$271.2A7.A6.2A14.3A5.2A10.A.A$
270.A2.A6.2A4.A2.A13.A21.A$270.A2.A12.A2.A35.2A$271.2A14.2A12.A$301.A
32.A$301.A3.A27.A.A$295.A8.A.A25.A2.A$294.A.A8.2A26.2A$293.A2.A2.2A$
294.2A3.A2.2A$300.2A.A28.A$332.3A$335.A$290.2A42.2A$289.A.A$290.A83$
285.2D$285.2D!
That big SL at the top left is there so that pslmake will avoid it. However, for some odd reason, pslmake actually attempts to build some of the snark heart, even though it's part of a big strict still life, like this:

Code: Select all

x = 33, y = 42, rule = LifeHistory
15.2A2.A$15.2A2.3A$22.A$19.4A$19.A$20.A$13.2A2.4A$13.A3.A$3.2A5.2A.A6.
3A$2.A2.A4.A2.3A3.A3.A$3.A.A5.2A3.A2.4A$4.A8.4A$13.A5.2A4.2A.A.A$14.3A
2.A2.A.A.A.2A.A$17.A.A.2A.A.A4.A$14.3A2.A2.A.A.A4.2A$13.A5.2A4.A$2.2A
3.2A4.2A$.A.A2.A.A$A.A4.A$.A19$27.2A$27.A.A$27.A!
And it isn't like it's impossible to get the loaf there without using that component, so I have no clue what's going on.
Goldtiger997 wrote: September 27th, 2026, 6:37 am My guess is that the object separation code used for detection of (32+)-bit still-lifes isn't perfect. In the infile you provided, the snark heart would be stable on its own, so I suspect pslmake thinks it is something you want built. I tried connecting up the snark heart more directly to the rest of the still-life to avoid this. Pslmake was able to build the following infile for me:
I bet the snarkheart is identified as a bespoke object and pslmake wants to (convert it to given configuration of common objects and given salvo) (it works backwards so ... to build it from the smaller objects.) But it has no space to do it ... I have not counted if the rest have big enough size to become "barrier". Simple solution would be to use bespoke set not containing the snarkheart. (/data/bespoke/none.dat). (in the case you use the version from the defragUI branch).

... defrag from that version would produce packed salvo so there will probably be no problem with lifeviewer presentation here. ... it also simplifies manual postediting to have the salvo packed.
User avatar
Hippo.69
Posts: 696
Joined: July 14th, 2020, 7:35 pm
Contact:

Re: Thread for your script-related questions

Post by Hippo.69 »

I6_I6 wrote: September 14th, 2026, 9:35 am
russellsprouts wrote: September 13th, 2026, 8:33 pm [...]
Is there a simple way to figure out which target position is optimal (because the target can be positioned anywhere along the lane)?
I have missed a lot of questions here ... I usually call pslmake without origin what starts the construction from the natural position of the origin block.
Then when I have starting target somewhere else I either use pslmake with pattern to construct containing only the block ... with origin provided.
Or I compute the transition manually using movetables generated from the stdxl.dat for example 272x270 push I was doing recently I have combined somehow from -15, -43; -11,-47; -28,-35 and -31,-32 pushes (maybe flipped x,y). I got 2 gliders better solution than pslmake would find.
pslmake is not perfect in long pushes, but it is good enough for most purposes ... and when it can choose from several configurations, it could be hard to beat.

If you can chose sevaral positions of origin, you can let pslmake save entire beam close to the found solution without origin and then run several searches with the same output file and specified origin. The pslmake would start from the beam of the highest generations and would concentrate only on solving the origin problem. As origin calculation starts after the reduction of the patern to only one cluster, running the computation for each origin from scratch would just repeat the same reduction over and over.
Before you want to start change for the new origin, you can delete the progres files generated during the search for previous origin.
Actually there is a parametr letting you ignore progress files of too new generations so you can let it ignore them (rather to deleting them).
(I have used this technique when I was optimizing corderships of corderfleets in RCT15 project ... the cordership portion beam was precomputed and the origin positioning was recomputed with several 8,8 differences in offset to find the one needing less gliders ... )
User avatar
Hippo.69
Posts: 696
Joined: July 14th, 2020, 7:35 pm
Contact:

Re: Thread for your script-related questions

Post by Hippo.69 »

ENDW wrote: September 20th, 2026, 8:24 am Is there any script about the new p120 construction arm here? I want to reduce my pattern, but I didn't know where is it.
Edit:
russellsprouts wrote: September 20th, 2026, 9:55 am
ENDW wrote: September 20th, 2026, 8:24 am Is there any script about the new p120 construction arm here? I want to reduce my pattern, but I didn't know where is it.
See https://conwaylife.com/forums/viewtopic ... 89#p235089 and let me know if you have any questions!

I should probably make a dedicated thread for it as well
OK, thank you
You alternatively could look at method used in 0e0p metacell project ... it would be headache to translate the slow salvas to individual emissions ... and to optimize it ... we use compiler there which optimizes translations of agnosticized slow salvas (generated by defrag and slightly edited).
You can add wX in a slow salvo file to wait X simkin gliders if some "slow gliders" are actually too fast and should be separated.
Hippo.69 wrote: September 23rd, 2026, 5:00 am
User avatar
Hippo.69
Posts: 696
Joined: July 14th, 2020, 7:35 pm
Contact:

Re: Thread for your script-related questions

Post by Hippo.69 »

I6_I6 wrote: September 17th, 2026, 12:29 am target.rle:
Saved as I6_i6.mc...
I would start with ../pslmake/defrag.exe I6_I6.mc I6_I6.rle qd=512 le=16384 ofm=130 ols=0 > I6_I6.txt
It would generate text output containing following section (agnosticized)

Code: Select all

% b-143 % b-146|b-141 % o-146 e-157 o-138 o-123 o-120 % b-117 % o-122 b-114 e-118 o-115 o-101 b-104 e-95 %
b-83|b-82|b-81|b-80|b-79|b-78 % b-50 % b-53|b-48 % o-53 e-42|e-41|o-46|o-45 o-40 o-60 o-24|o-17 e-6
o-18 % b-18 % b-10 % o-18 o-30 % e-43 o-29 e-29 % b-28 % b-38 % o-41 o-49 b-32|b-31|b-30|b-29|b-28 o-30 % b-51 %
b-54 % b-56 % b-67 % b-69|b-64 % b-57 % o-72 o-80 % b-78 % b-87 % o-90 e-97 e-88 % b-136|b-135|b-132|b-125 %
b-128|b-127|b-124 % b-106 % b-119 % o-122 e-128 % b-106 % b-121 % b-100|b-99|b-98|b-97|b-96|b-95 % b-93 % b-101 % b-101 % b-91 %
b-89 % b-88 % b-88 % b-83 % o-79 o-79 e-86 e-81|e-80|o-77|o-76 o-76 o-77 o-94 e-85 % b-74 % o-78 o-86 o-77
b-66 b-78|b-74 e-84 o-81 o-96 e-94|e-93 % b-89 % o-86 o-88 o-82 o-71 e-68 e-75|o-74|o-73|o-72 o-87 %
b-85 % o-88 e-98 e-80 o-88 e-98 o-98 % b-89 % b-81 % b-95 % b-93 % b-86 % b-84 % o-103 e-92 o-79 o-81 % b-89 % b-97 %
b-99 % o-80 e-91 o-96 % b-101 % b-103|b-102|b-101|b-100|b-99 % b-96 % b-116 % o-120 e-123|e-122|o-127|o-126 e-117 e-117
e-119 % b-113 % b-116 % b-127 % b-137|b-136|b-133 % o-124 o-119 o-120 % o-127 e-123 % b-120 % o-119 o-129 % b-132 % o-120 o-117 % b-122 %
b-125|b-120 % o-125 e-125 o-112 e-128 % b-118 % o-107 e-99 o-102|o-101 % b-97 % o-98 e-90|e-89|o-86|o-85 o-98 e-93 %
b-108|b-97 % b-97 % b-97 % o-94 o-96 b-109|b-98 b-99 o-103 e-111 o-105 o-100 o-113 o-98 b-110|o-109|o-108|o-107
b-91 b-94|b-89 o-89 e-97 e-96 b-89 b-90|b-89 o-96 b-100|b-96 b-105 b-17 b-6 b-8 b-41 b-41 b-33
o-45 e-40 o-41 e-53 e-55 b-54 b-47 b-61 e-53 e-69 e-69 e-59 b-61 o-65 e-68|e-67|o-72|o-71 o-73
o-63 o-52 e-51 o-73 e-71 b-69 b-64|b-61|b-60 b-60 o-64 e-53 o-76 b-56 b-49 b-49 b-66|b-65|b-62
b-66 b-60 b-57 b-55 b-45 b-35 b-48 b-49 o-61 o-65 o-71 b-43 o-39 e-29 e-44 e-46 e-33 b-41 b-43
o-47 e-55 o-57 e-44 o-50 e-56 e-46 e-52 o-39 b-71 o-71 o-65 e-65 o-55 e-64 b-73 o-72 e-88 e-75
e-88 b-72|b-71 o-72 e-73 b-66 b-69|b-64 o-64 e-73 b-71 b-61 b-69 o-57 o-64 o-60 e-50 e-61 e-58
b-55 b-55 b-65|b-64|b-61 b-60 o-55 b-28 b-28 b-31|b-26 o-26 o-41 o-44 b-41 b-35 e-22 o-35 b-23
o-19 e-34|o-43 b-27 o-23 b-16|b-9|b-6|b-5 e-13 o-28 b-38|b-27 b-28 e-11 e-26 e-12 b-30
b-33|b-28 b-35 b-29 b-39 b-42 o-38 e-36|e-35|o-32|o-31 o-46 o-38 b-33 o-37 e-47 o-38 e-59 o-38
b-31|b-29 e-47 b-54 o-53 e-72 o-68 o-52 o-57 o-64 o-68 e-65 b-74|b-72|b-69 b-42 b-45|b-40 b-52
b-41 b-30 b-29 b-29 b-22 b-20 o-39 e-28 e-22 b-20 b-38 b-27 b-29|b-24 o-24 e-38 e-27 b-41 o-31
e-25 b-38 b-38 b-40|b-35 o-37 o-31 b-4 b14 o17 e24 e15 b32 b51 o54 e61 e52 b69 b88
o91 e98 e89 b106 b125 b117 o129 e137 e129 o130 b115|b122|b125|b126 b147 b144|b149 b151 b150
b153 b161|b162|b163|b164|b165|b166 b173 o168 o188 b194|b195|b196 o195 b197 b197 o201 o201 e205
b205 b201 b200|b201|b202|b203|b204|b205 b183 b192 o195 o217 b224 o220 o217 o222 o218
b226|b227|b228|b229|b230|b231 e235 b236|b239 b225 b225 b225 o224 b220 b218 o234 b226
b220|b221|b222|b223|b224 b217 o226 o230 b229 o226 o218 o227 e213 o218 o210 o212 o205 b196 b191
o179 o189 b182 b172 b175 o179 b164 b162|b167 o169 b174|b175|b178|b185 b197 b195|b200 o197 o195
o186 o191 b190|b194|b195|b197|b200 e233 e232 b233 b222 b234 o230 o238 b239|b240|b243 e220 e225
b204 b210 o210 e212 o210 o199 e196 b257 b248 o252 e260 e266 o257 e253 o253 e243 b234 o237 o237
e249 b258 o261 e269 e275 o266 e262 b265 e252 e247 o237 o223 o223 b226 b229 b221 o238 b238 o233
e234 o235 o232 e230 o196 b199|b200|b201|b202|b203 b183 o180 e179|e180|o183|o184 e184 b196 e185
b201 b196 b203 b214|b215|b216|b217|b218|b219 b205 o194 b186 b195 e207 b211 b189 o189 o174 e179
e188 o169 e172 b189|b190 e192 e182 b154|b155|b158|b165 b139 o139 o130 b122 o139 o137 b167 b167
o166 e165 b168|b169 e176 b175 b167 b183 b177 b170 b168|b173 o168 e168 b161 e176 e168
e173|e174|o175|o176 e178
and

Code: Select all

x = 6067, y = 6392, rule = LifeHistory
2A$2A5$.3A$.A$2.A10$11.3A$11.A18.A$12.A16.2A$29.A.A$20.3A$20.A$21.A
22$36.3A$36.A$37.A10$33.3A$33.A$34.A4$36.3A$36.A$37.A50$85.3A$85.A$
86.A8$100.3A$100.A$101.A32$126.3A$126.A$127.A7$141.A$140.2A$140.A.A
13$151.3A$151.A$152.A8$147.3A$147.A$148.A11$165.A$164.2A$164.A.A36$
194.A$193.2A$193.A.A66$250.A$249.2A$249.A.A20$237.3A$237.A$238.A10$
247.3A$247.A$248.A2$256.3A$256.A$257.A8$273.3A$257.A15.A$256.2A16.A$
256.A.A3$259.3A$259.A$260.A68$306.3A$306.A$307.A7$306.A$305.2A10.3A$
305.A.A9.A$318.A24$343.3A$343.A$344.A14$351.3A5.3A$351.A7.A$352.A7.A
34$407.3A$407.A$408.A7$431.A$430.2A$430.A.A35$452.3A$452.A$453.A67$
523.A$522.2A$522.A.A12$536.A$535.2A$535.A.A11$557.3A$557.A$558.A8$
570.3A$570.A$571.A6$586.3A$586.A$587.A10$581.3A$581.A$582.A4$585.3A$
585.A$586.A3$613.A$612.2A$612.A.A3.A$617.2A$617.A.A4$626.A$625.2A$
625.A.A14$651.3A$651.A$652.A8$663.3A$663.A$664.A4$672.3A$672.A$673.A
2$661.3A$661.A$662.A6$692.3A$692.A$693.A8$700.3A6.3A$700.A8.A$701.A8.
A8$722.3A$722.A$723.A5$738.A$737.2A$737.A.A8$787.A$786.2A$786.A.A17$
796.3A$759.A36.A$758.2A37.A$758.A.A11$788.3A$788.A$789.A22$825.3A$
825.A$826.A8$838.3A$838.A$839.A5$853.A$852.2A$852.A.A12$845.A$844.2A
13.3A$844.A.A12.A$860.A14$849.3A$849.A$850.A12$861.3A$861.A$862.A6$
877.3A$877.A$878.A4$883.3A$883.A$884.A8$883.3A$883.A$884.A14$897.3A$
897.A$898.A10$908.3A$908.A$909.A6$916.3A$916.A$917.A7$920.3A$920.A$
921.A12$930.3A$930.A$931.A9$950.A$942.3A4.2A$942.A6.A.A$943.A24$966.
3A$966.A$967.A4$971.3A$971.A$972.A18.3A$991.A$976.3A13.A$976.A$977.A
5$993.A$992.2A$992.A.A21$1003.3A$1003.A$1004.A8$1017.3A$1017.A$1018.A
6$1033.3A$1033.A$1034.A6$1032.3A$1032.A$1033.A15$1040.A17.A$1039.2A6.
3A7.2A$1039.A.A5.A9.A.A$1048.A4$1060.3A$1060.A$1061.A4$1081.3A$1081.A
$1082.A7$1089.A$1088.2A$1088.A.A9$1094.3A$1094.A$1095.A12$1105.3A$
1105.A$1106.A8$1117.3A$1117.A$1118.A12$1125.3A$1125.A$1126.A10$1126.
3A$1126.A$1127.A3$1130.A$1129.2A$1129.A.A14$1153.A$1152.2A10.3A$1152.
A.A9.A$1165.A6$1170.3A$1170.A$1171.A8$1183.3A$1183.A$1184.A3$1200.A$
1199.2A$1199.A.A10$1194.A$1193.2A$1193.A.A4$1218.A$1217.2A$1217.A.A$
1209.3A$1209.A$1210.A2$1223.3A$1223.A$1224.A14$1230.3A$1230.A$1231.A
10$1248.3A$1248.A$1249.A2$1238.3A$1238.A$1239.A2$1254.3A$1254.A$1255.
A18$1267.3A14.3A$1267.A16.A$1268.A16.A4$1271.3A$1271.A$1272.A$1284.A$
1283.2A$1283.A.A31$1302.3A$1302.A$1303.A2$1308.3A$1308.A$1309.A14$
1332.3A$1332.A$1333.A6$1348.3A$1348.A$1349.A2$1354.3A$1354.A$1355.A9$
1359.A$1358.2A$1358.A.A$1349.3A$1349.A$1350.A22$1389.3A$1389.A$1390.A
5.3A$1396.A$1397.A8$1404.3A$1404.A$1405.A4$1407.3A$1407.A$1408.A91$
1520.3A$1520.A$1521.A8$1534.3A$1534.A$1535.A7$1547.A$1546.2A$1546.A.A
4$1548.A$1547.2A$1547.A.A2$1552.A$1551.2A$1551.A.A8$1564.A$1563.2A$
1563.A.A5$1563.3A$1563.A$1564.A$1571.A$1570.2A9.3A$1570.A.A8.A$1582.A
2$1595.3A$1595.A$1596.A8$1592.3A$1592.A$1593.A16$1605.3A$1605.A$1606.
A2$1610.3A$1610.A$1611.A10$1629.3A$1629.A$1630.A3$1632.A$1631.2A$
1631.A.A5$1634.3A$1634.A$1635.A10$1645.3A$1645.A$1646.A14$1671.3A$
1671.A$1672.A8$1684.3A$1684.A$1685.A8$1682.3A$1682.A$1683.A4$1685.3A$
1685.A$1686.A$1693.3A$1693.A$1694.A8$1706.3A$1706.A$1707.A6$1714.3A$
1714.A$1715.A3$1721.A$1720.2A$1720.A.A4$1730.A$1729.2A$1729.A.A3$
1717.3A$1717.A$1718.A28$1753.3A$1753.A$1754.A8$1752.3A$1752.A$1753.A
5$1753.A$1752.2A$1752.A.A5$1760.3A$1760.A$1761.A10$1768.3A$1768.A$
1769.A10$1781.3A$1781.A$1782.A23$1800.A$1799.2A6.3A$1799.A.A5.A$1808.
A3$1809.A$1808.2A$1808.A.A7$1820.3A$1820.A$1821.A2$1824.3A$1824.A$
1825.A2$1828.3A$1828.A$1829.A12$1839.3A$1839.A$1840.A7$1865.A$1851.3A
10.2A$1851.A12.A.A$1852.A10$1866.3A$1866.A$1867.A8$1880.3A$1880.A$
1881.A5$1897.A$1896.2A$1896.A.A5$1896.3A$1896.A$1897.A4$1910.3A$1910.
A$1899.3A9.A$1899.A$1900.A8$1907.3A$1907.A$1908.A9$1932.A$1931.2A$
1931.A.A12$1925.3A$1925.A$1926.A10$1935.3A$1935.A$1936.A6$1943.3A$
1943.A10.A$1944.A8.2A$1953.A.A4$1959.A$1958.2A$1958.A.A7$1959.3A$
1959.A$1960.A4$1965.3A4.3A$1965.A6.A$1966.A6.A8$1986.3A$1986.A$1987.A
5.3A$1993.A$1994.A46$1953.3A$1953.A$1954.A14$1958.3A$1958.A$1959.A2$
1997.3A$1997.A$1998.A3$2002.3A$2002.A$2003.A5$1976.3A$1976.A$1977.A5$
2020.3A$2020.A$2010.3A8.A$2010.A$2011.A5$2026.A$2025.2A$2025.A.A13.A$
2040.2A$2040.A.A$2030.3A$2030.A$2031.A$2049.A$2048.2A$2048.A.A9$2059.
A$2058.2A$2058.A.A10$2078.A$2077.2A$2077.A.A2$2068.A$2067.2A$2067.A.A
4$2080.A$2079.2A$2079.A.A16$2114.A$2113.2A$2113.A.A6$2122.A$2121.2A$
2121.A.A52$2166.A$2165.2A$2165.A.A27$2195.3A$2195.A$2196.A8$2209.3A$
2209.A$2210.A7$2222.A$2221.2A4.3A$2221.A.A3.A$2228.A8$2227.3A$2227.A$
2228.A10$2228.3A$2228.A$2229.A4$2255.3A$2255.A$2256.A3$2260.A$2259.2A
$2242.A16.A.A$2241.2A$2241.A.A19$2279.3A$2279.A$2280.A14$2286.3A$
2286.A$2287.A2$2290.3A$2290.A$2291.A4.3A$2296.A$2297.A16$2326.3A$
2326.A$2327.A5$2312.A$2311.2A$2311.A.A25$2340.3A$2340.A$2341.A14$
2349.3A$2349.A$2350.A17.3A$2368.A$2369.A2$2355.3A14.3A$2355.A16.A$
2356.A16.A6$2374.3A$2374.A$2375.A4$2377.3A$2377.A$2378.A26$2403.3A$
2403.A$2404.A7$2402.3A$2402.A$2403.A14$2408.3A$2408.A$2409.A10$2433.
3A$2433.A$2434.A13.3A$2448.A$2438.3A8.A$2438.A$2439.A42$2498.3A3.3A$
2498.A5.A$2499.A5.A18$2496.3A$2496.A$2497.A12$2506.3A$2506.A$2507.A9$
2524.A$2523.2A$2523.A.A2$2513.A$2512.2A$2512.A.A8$2540.A$2539.2A$
2539.A.A50$2579.A$2578.2A$2578.A.A3$2590.3A$2590.A$2591.A$2595.3A$
2595.A$2596.A8$2609.3A$2609.A$2610.A5$2626.A$2625.2A$2625.A.A3$2631.
3A$2631.A$2632.A7$2629.A$2628.2A$2628.A.A$2636.3A$2636.A$2637.A5$
2651.A$2650.2A$2650.A.A6$2649.A$2648.2A$2648.A.A46$2703.A$2702.2A$
2702.A.A9$2699.3A$2699.A$2700.A16$2749.3A$2749.A$2750.A10$2761.3A$
2761.A$2762.A22$2779.3A$2779.A$2780.A$2784.A$2783.2A$2783.A.A9$2783.
3A$2783.A$2784.A3$2799.A$2798.2A$2798.A.A5$2813.3A$2813.A$2814.A10$
2824.3A$2824.A$2825.A9$2853.A$2852.2A$2852.A.A6$2861.A$2860.2A$2850.A
9.A.A$2849.2A$2849.A.A11$2857.3A$2857.A$2858.A2$2862.3A$2862.A$2863.A
$2868.A$2867.2A$2867.A.A7$2868.3A$2868.A$2869.A10$2878.3A$2878.A$
2879.A6$2886.3A$2886.A11.A$2887.A9.2A$2897.A.A13$2909.3A$2909.A$2910.
A37$2938.3A$2938.A$2939.A6$2954.3A$2954.A$2955.A8$2952.3A$2952.A$
2953.A2$2963.3A$2963.A$2964.A4$2965.3A$2965.A$2966.A7$2977.A$2976.2A$
2968.A7.A.A$2967.2A$2967.A.A2$2980.A$2979.2A$2979.A.A28$3007.A$3006.
2A$3006.A.A4$3011.3A$3011.A$3012.A2$3025.3A$3025.A$3026.A6$3028.3A$
3028.A$3029.A14$3039.3A$3039.A$3040.A20$3034.3A$3034.A$3035.A13$3049.
3A$3049.A$3050.A8$3062.3A$3062.A$3063.A4$3078.3A$3078.A$3065.3A11.A3.
3A$3065.A17.A$3066.A17.A13$3097.A$3096.2A$3096.A.A24$3117.A$3116.2A$
3116.A.A8$3114.A$3113.2A$3113.A.A17$3144.3A$3144.A$3145.A18$3152.3A$
3152.A$3153.A12$3162.3A$3162.A$3163.A23$3204.A$3203.2A$3203.A.A49$
3246.3A$3246.A$3247.A12$3256.3A$3256.A$3257.A6$3257.3A$3257.A$3258.A
2$3273.3A$3273.A$3274.A$3263.A24.A$3262.2A23.2A$3262.A.A22.A.A7$3285.
3A$3285.A$3286.A15$3287.A$3286.2A$3286.A.A10$3314.A$3313.2A$3313.A.A
8$3310.A$3309.2A$3309.A.A6$3334.3A$3334.A$3335.A10$3344.3A$3344.A$
3345.A7.3A$3353.A$3354.A12$3371.3A$3371.A$3363.3A6.A$3363.A$3364.A$
3379.3A$3379.A$3380.A12$3389.3A$3389.A$3390.A8$3407.3A$3400.A6.A$
3399.2A7.A$3399.A.A13$3415.3A$3415.A$3416.A5$3417.3A$3417.A$3418.A8$
3431.3A$3431.A$3432.A3$3448.A$3447.2A$3447.A.A7$3446.3A$3446.A23.A$
3447.A21.2A$3469.A.A29$3478.3A$3478.A$3479.A9$3500.A$3499.2A5.3A$
3499.A.A4.A$3507.A2$3485.3A$3485.A45.A$3486.A43.2A$3530.A.A5$3517.3A$
3517.A$3518.A12$3546.3A$3546.A$3547.A10$3542.3A$3542.A$3543.A8$3557.
3A$3557.A$3558.A10$3576.3A$3576.A$3577.A4.3A$3582.A$3583.A3$3586.A$
3585.2A$3585.A.A3$3593.3A$3593.A$3594.A16$3584.3A$3584.A$3585.A10$
3594.3A$3594.A$3595.A4$3612.3A$3612.A$3613.A8$3611.3A$3611.A$3612.A8$
3610.3A$3610.A$3611.A4$3615.3A$3615.A$3616.A3$3620.3A$3620.A$3621.A
14$3629.3A14.3A$3629.A16.A$3630.A16.A4$3633.3A$3633.A$3634.A$3646.A$
3645.2A$3645.A.A30$3672.A$3671.2A$3671.A.A19$3707.3A$3707.A$3708.A4$
3695.3A$3695.A$3696.A7$3711.3A$3711.A$3712.A8$3723.3A$3723.A$3724.A3$
3739.A$3738.2A$3738.A.A$3726.3A$3726.A$3727.A2$3747.3A$3747.A$3748.A$
3738.A$3737.2A$3737.A.A5$3747.3A$3747.A$3748.A10$3766.3A$3756.A9.A$
3755.2A10.A$3755.A.A2$3771.3A$3771.A$3772.A8$3783.3A$3783.A$3784.A6$
3788.3A$3788.A$3789.A4$3788.3A$3788.A$3789.A16$3779.3A$3779.A$3780.A
11$3774.3A$3774.A$3775.A12$3785.3A$3785.A$3786.A13$3795.A$3794.2A$
3794.A.A18$3824.A$3823.2A$3823.A.A27$3834.3A$3834.A$3835.A22$3839.3A$
3839.A$3840.A12$3850.3A$3850.A$3851.A13$3860.A$3859.2A$3859.A.A18$
3889.A$3888.2A$3888.A.A27$3899.3A$3899.A$3900.A22$3904.3A$3904.A$
3905.A12$3915.3A$3915.A$3916.A13$3925.A$3924.2A$3924.A.A18$3954.A$
3953.2A$3953.A.A27$3964.3A$3964.A$3965.A22$3969.3A$3969.A$3970.A6$
3985.3A$3985.A$3986.A8$3983.3A$3983.A$3984.A5$3984.A$3983.2A$3983.A.A
2$3996.A$3995.2A$3995.A.A25$4020.3A$4020.A$4021.A25$4053.A$4052.2A$
4052.A.A13$4045.3A$4045.A$4046.A10$4055.3A$4055.A$4056.A6$4061.3A$
4061.A$4062.A10$4074.3A$4074.A$4075.A22$4095.3A$4095.A$4096.A54$4143.
3A$4143.A$4144.A9$4142.3A$4142.A$4143.A8$4157.3A$4157.A$4158.A42$
4181.3A$4181.A$4182.A66$4243.3A$4243.A$4244.A4$4248.3A$4248.A$4249.A
52$4300.3A$4300.A$4301.A3$4305.3A$4305.A$4306.A12$4315.3A$4315.A$
4316.A10$4327.3A$4327.A$4328.A3$4330.A$4329.2A$4329.A.A6$4338.A$4337.
2A$4337.A.A6$4350.A$4349.2A$4349.A.A18$4388.A$4387.2A$4387.A.A2$4375.
A$4374.2A$4374.A.A7$4390.3A$4390.A$4391.A12$4401.3A$4401.A$4402.A13$
4394.3A$4394.A$4395.A6$4395.3A$4395.A$4396.A8$4409.3A$4409.A$4410.A8$
4422.3A$4422.A$4423.A4$4423.3A$4423.A$4424.A16$4445.3A$4445.A$4446.A
63$4499.A$4498.2A$4498.A.A12$4509.A$4508.2A$4508.A.A6$4527.A$4526.2A$
4518.A7.A.A$4517.2A$4517.A.A2$4533.A$4532.2A$4532.A.A4$4537.3A$4537.A
$4538.A10$4550.3A$4550.A$4551.A14$4570.3A$4570.A$4571.A8$4582.3A$
4582.A$4583.A10$4578.3A$4578.A$4579.A6$4594.3A$4594.A$4595.A6$4608.3A
$4608.A$4609.A10$4623.3A$4623.A$4624.A6$4622.3A$4622.A$4623.A18$4638.
3A$4638.A$4639.A7$4648.3A$4648.A$4649.A8$4661.3A$4661.A$4662.A6$4677.
3A$4677.A$4678.A6$4676.3A$4676.A16.A$4677.A14.2A$4692.A.A5$4693.3A$
4693.A$4694.A2$4705.3A$4705.A$4706.A31$4743.3A$4737.3A3.A$4737.A6.A$
4738.A23$4778.3A$4778.A$4779.A4$4789.3A$4789.A$4790.A18$4821.3A$4821.
A$4822.A16$4829.3A$4829.A7.3A$4830.A6.A$4838.A4$4853.3A$4853.A$4854.A
17$4869.3A$4869.A$4870.A12$4879.3A$4879.A$4880.A2$4898.3A$4898.A$
4899.A12$4909.3A$4909.A$4910.A6$4915.3A$4915.A$4916.A82$4983.3A$4983.
A$4984.A9$4982.3A$4982.A$4983.A12$4993.3A$4993.A$4994.A2$5000.3A$
5000.A$5001.A$5014.3A$5006.3A5.A$5006.A8.A$5007.A25$5037.3A$5037.A$
5038.A38$5068.3A$5068.A$5069.A18$5057.A$5056.2A$5056.A.A14$5074.A$
5073.2A$5073.A.A8$5081.3A$5081.A$5082.A4$5098.3A$5098.A$5099.A23$
5111.3A$5111.A$5112.A8$5125.3A$5125.A$5126.A14$5133.3A$5133.A$5134.A$
5156.A$5155.2A$5155.A.A6$5141.A17.A$5140.2A16.2A$5140.A.A15.A.A7$
5187.3A$5187.A$5188.A7$5190.3A$5190.A$5191.A10$5202.3A$5202.A$5203.A
17$5221.A$5220.2A$5220.A.A$5235.3A$5235.A$5226.3A7.A$5226.A16.A$5227.
A14.2A$5242.A.A33$5215.3A$5215.A9.3A$5216.A8.A$5226.A12$5235.3A$5235.
A$5236.A13$5244.A$5243.2A$5243.A.A4$5244.A$5243.2A$5243.A.A$5254.3A$
5254.A6.A$5255.A4.2A$5260.A.A26$5299.A6.3A$5298.2A6.A$5298.A.A6.A$
5290.3A$5290.A$5291.A9$5317.3A$5317.A$5318.A10$5329.3A$5329.A$5330.A
8$5329.A$5328.2A$5328.A.A12$5332.3A$5332.A$5333.A12$5343.3A$5343.A$
5344.A13$5352.A$5351.2A$5351.A.A4$5352.A$5351.2A$5351.A.A$5362.3A$
5362.A6.A$5363.A4.2A$5368.A.A26$5407.A$5406.2A13.3A$5406.A.A5.A6.A$
5395.3A15.2A7.A14.3A$5395.A17.A.A21.A$5396.A41.A4$5443.3A$5443.A$
5444.A3$5447.A$5446.2A$5446.A.A5$5449.3A$5449.A$5450.A6$5465.3A$5465.
A$5466.A10$5460.3A$5460.A$5461.A2$5464.3A$5464.A$5465.A5.3A$5471.A$
5472.A3$5477.A$5476.2A$5476.A.A9$5524.3A$5524.A$5525.A4$5491.3A$5491.
A$5492.A2$5498.3A$5498.A$5499.A$5505.A$5504.2A$5504.A.A31$5583.3A$
5583.A$5584.A4$5569.3A$5569.A$5570.A2$5596.3A$5596.A$5597.A9$5609.A$
5608.2A$5608.A.A6$5613.A$5612.2A$5612.A.A6$5620.A$5619.2A$5611.A7.A.A
$5610.2A$5610.A.A34$5642.A$5641.2A$5641.A.A$5648.3A$5648.A$5649.A14$
5657.3A$5657.A$5658.A8$5656.3A$5656.A$5657.A2$5680.3A$5680.A10.A$
5671.3A7.A8.2A$5671.A18.A.A$5672.A5$5690.A$5689.2A$5689.A.A10$5690.A$
5689.2A16.3A$5689.A.A15.A$5708.A3$5692.A$5691.2A$5691.A.A5$5719.3A$
5719.A$5720.A12$5748.3A$5748.A$5749.A3$5750.A$5749.2A$5749.A.A3$5763.
3A$5763.A$5764.A3$5751.A$5750.2A$5750.A.A4$5773.A$5772.2A$5772.A.A10$
5768.A$5767.2A$5767.A.A2$5820.3A$5820.A$5771.A49.A$5770.2A$5770.A.A
36.3A$5809.A$5810.A6$5791.A40.3A$5790.2A40.A$5790.A.A40.A14$5857.3A5.
3A$5857.A7.A$5858.A7.A10$5860.3A$5860.A$5861.A2$5866.3A$5866.A$5867.A
40$5878.3A$5878.A$5879.A3$5883.3A$5883.A$5884.A10$5896.3A$5896.A$
5897.A17$5918.A$5917.2A$5917.A.A5$5920.3A$5920.A$5921.A5$5921.A$5920.
2A$5920.A.A4$5928.A$5927.2A$5927.A.A30$5968.A$5967.2A$5967.A.A12$
5966.A$5965.2A$5965.A.A4$5978.A$5977.2A$5977.A.A13$5998.3A$5998.A$
5999.A8$6010.3A$6010.A$6011.A6$6018.3A$6018.A$6019.A3$6025.A6.A$6024.
2A5.2A$6024.A.A4.A.A10$6029.A7.A$6028.2A6.2A$6028.A.A5.A.A30$6064.A$
6063.2A$6063.A.A4$6065.A$6064.2A$6064.A.A!
as .rle in /defrag subdirectory
There will be progress files in the /defrag/I6_I6 subdirectory as well (you have to delete them if you want to defrag another input to the same output).
I usually defrag twice ... 2nd defrag starts with the progress files and as they are .rle, they are naturaly "recentered".

Second pass started with %b5 ... so now are the coordinates stable ... and we know the required shift ...

You start by hitting the block from left to create a honefarm ... it is exactly what is in crab2.mc, compiled from source starting by

Code: Select all

l b-16 -- 
(l unnecessary is default)

So I would use ../pslmake/defrag.exe I6_I6.mc I6_I6.rle qd=512 le=16384 ofm=130 ols=-21 > I6_I6.txt to get the program with correct offset of lanes. (we can interrupt the second dafragmentation after seeing offset of the first salvo in the output...)
So we obtained

Code: Select all

% b-16 % b-19|b-14 % o-19 e-30 o-11 o4 o7 % b10 % o5 b13 e9 o12 o26 b23 e32 %
b44|b45|b46|b47|b48|b49 % b77 % b74|b79 % o74 e85|e86|o81|o82 o87 o67 o103|o110 e121
o109 % b109 % b117 % o109 o97 % e84 o98 e98 % b99 % b89 % o86 o78 b95|b96|b97|b98|b99 o97 % b76 %
b73 % b71 % b60 % b58|b63 % b70 % o55 o47 % b49 % b40 % o37 e30 e39 % b-9|b-8|b-5|b2 %
b-1|b0|b3 % b21 % b8 % o5 e-1 % b21 % b6 % b27|b28|b29|b30|b31|b32 % b34 % b26 % b26 % b36 %
b38 % b39 % b39 % b44 % o48 o48 e41 e46|e47|o50|o51 o51 o50 o33 e42 % b53 % o49 o41 o50
b61 b49|b53 e43 o46 o31 e33|e34 % b38 % o41 o39 o45 o56 e59 e52|o53|o54|o55 o40 %
b42 % o39 e29 e47 o39 e29 o29 % b38 % b46 % b32 % b34 % b41 % b43 % o24 e35 o48 o46 % b38 % b30 %
b28 % o47 e36 o31 % b26 % b24|b25|b26|b27|b28 % b31 % b11 % o7 e4|e5|o0|o1 e10 e10
e8 % b14 % b11 % b0 % b-10|b-9|b-6 % o3 o8 o7 % o0 e4 % b7 % o8 o-2 % b-5 % o7 o10 % b5 %
b2|b7 % o2 e2 o15 e-1 % b9 % o20 e28 o25|o26 % b30 % o29 e37|e38|o41|o42 o29 e34 %
b19|b30 % b30 % b30 % o33 o31 b18|b29 b28 o24 e16 o22 o27 o14 o29 b17|o18|o19|o20
b36 b33|b38 o38 e30 e31 b38 b37|b38 o31 b27|b31 b22 b110 b121 b119 b86 b86 b94
o82 e87 o86 e74 e72 b73 b80 b66 e74 e58 e58 e68 b66 o62 e59|e60|o55|o56 o54
o64 o75 e76 o54 e56 b58 b63|b66|b67 b67 o63 e74 o51 b71 b78 b78 b61|b62|b65
b61 b67 b70 b72 b82 b92 b79 b78 o66 o62 o56 b84 o88 e98 e83 e81 e94 b86 b84
o80 e72 o70 e83 o77 e71 e81 e75 o88 b56 o56 o62 e62 o72 e63 b54 o55 e39 e52
e39 b55|b56 o55 e54 b61 b58|b63 o63 e54 b56 b66 b58 o70 o63 o67 e77 e66 e69
b72 b72 b62|b63|b66 b67 o72 b99 b99 b96|b101 o101 o86 o83 b86 b92 e105 o92 b104
o108 e93|o84 b100 o104 b111|b118|b121|b122 e114 o99 b89|b100 b99 e116 e101 e115 b97
b94|b99 b92 b98 b88 b85 o89 e91|e92|o95|o96 o81 o89 b94 o90 e80 o89 e68 o89
b96|b98 e80 b73 o74 e55 o59 o75 o70 o63 o59 e62 b53|b55|b58 b85 b82|b87 b75
b86 b97 b98 b98 b105 b107 o88 e99 e105 b107 b89 b100 b98|b103 o103 e89 e100 b86 o96
e102 b89 b89 b87|b92 o90 o96 b123 b141 o144 e151 e142 b159 b178 o181 e188 e179 b196 b215
o218 e225 e216 b233 b252 b244 o256 e264 e256 o257 b242|b249|b252|b253 b274 b271|b276 b278 b277
b280 b288|b289|b290|b291|b292|b293 b300 o295 o315 b321|b322|b323 o322 b324 b324 o328 o328 e332
b332 b328 b327|b328|b329|b330|b331|b332 b310 b319 o322 o344 b351 o347 o344 o349 o345
b353|b354|b355|b356|b357|b358 e362 b363|b366 b352 b352 b352 o351 b347 b345 o361 b353
b347|b348|b349|b350|b351 b344 o353 o357 b356 o353 o345 o354 e340 o345 o337 o339 o332 b323 b318
o306 o316 b309 b299 b302 o306 b291 b289|b294 o296 b301|b302|b305|b312 b324 b322|b327 o324 o322
o313 o318 b317|b321|b322|b324|b327 e360 e359 b360 b349 b361 o357 o365 b366|b367|b370 e347 e352
b331 b337 o337 e339 o337 o326 e323 b384 b375 o379 e387 e393 o384 e380 o380 e370 b361 o364 o364
e376 b385 o388 e396 e402 o393 e389 b392 e379 e374 o364 o350 o350 b353 b356 b348 o365 b365 o360
e361 o362 o359 e357 o323 b326|b327|b328|b329|b330 b310 o307 e306|e307|o310|o311 e311 b323 e312
b328 b323 b330 b341|b342|b343|b344|b345|b346 b332 o321 b313 b322 e334 b338 b316 o316 o301 e306
e315 o296 e299 b316|b317 e319 e309 b281|b282|b285|b292 b266 o266 o257 b249 o266 o264 b294 b294
o293 e292 b295|b296 e303 b302 b294 b310 b304 b297 b295|b300 o295 e295 b288 e303 e295
e300|e301|o302|o303 e305
What I would save to 0degree_single_lane_arm/salvos/lanephase/I6_I6.txt for editing ... I would replace all "% b" with "b" (even accross ends of lanes), then I would replace remaining "%" with "--\n".

I would actually recheck the final pattern for non p1 parts and split the salvo at the places where the non p1 parts are created (deleting them)
(I would remove prefixes of the salvas from the patterns and I would defragment them such that the ends of the salvas would end at the same lanes, then I would manually union the portions together (removing duplicated suffixes) ... it is just to find -- positions detecting sections where the phase could be flipped ... I would comment which parts cannot be flipped as they create nonp1 parts of the final pattern)
... if you do not want to optimize ... you can easily skip this portion (and you can remove all -- as well)
... if you want to optimize https://cryptii.com/pipes/alphabetical-substitution/ could be handy for switching o<->e in between --)

here is the subresult:

Code: Select all

b-16 b-19|b-14 --
o-19 e-30 o-11 o4 o7 b10 --
o5 b13 e9 o12 o26 b23 e32 b44|b45|b46|b47|b48|b49 b77 b74|b79 --
o74 e85|e86|o81|o82 o87 o67 o103|o110 e121
o109 b109 b117 --
o109 o97 --
e84 o98 e98 b99 b89 --
o86 o78 b95|b96|b97|b98|b99 o97 b76 b73 b71 b60 b58|b63 b70 --
o55 o47 b49 b40 --
o37 e30 e39 b-9|b-8|b-5|b2 b-1|b0|b3 b21 b8 --
o5 e-1 b21 b6 b27|b28|b29|b30|b31|b32 b34 b26 b26 b36 b38 b39 b39 b44 --
o48 o48 e41 e46|e47|o50|o51 o51 o50 o33 e42 b53 --
o49 o41 o50
b61 b49|b53 e43 o46 o31 e33|e34 b38 --
o41 o39 o45 o56 e59 e52|o53|o54|o55 o40 b42 --
o39 e29 e47 o39 e29 o29 b38 b46 b32 b34 b41 b43 --
o24 e35 o48 o46 b38 b30 b28 --
o47 e36 o31 b26 b24|b25|b26|b27|b28 b31 b11 --
o7 e4|e5|o0|o1 e10 e10
e8 b14 b11 b0 b-10|b-9|b-6 --
o3 o8 o7 --
o0 e4 b7 --
o8 o-2 b-5 --
o7 o10 b5 b2|b7 --
o2 e2 o15 e-1 b9 --
o20 e28 o25|o26 b30 --
o29 e37|e38|o41|o42 o29 e34 b19|b30 b30 b30 --
o33 o31 b18|b29 b28 o24 e16 o22 o27 o14 o29 b17|o18|o19|o20
b36 b33|b38 o38 e30 e31 b38 b37|b38 o31 b27|b31 b22 b110 b121 b119 b86 b86 b94
o82 e87 o86 e74 e72 b73 b80 b66 e74 e58 e58 e68 b66 o62 e59|e60|o55|o56 o54
o64 o75 e76 o54 e56 b58 b63|b66|b67 b67 o63 e74 o51 b71 b78 b78 b61|b62|b65
b61 b67 b70 b72 b82 b92 b79 b78 o66 o62 o56 b84 o88 e98 e83 e81 e94 b86 b84
o80 e72 o70 e83 o77 e71 e81 e75 o88 b56 o56 o62 e62 o72 e63 b54 o55 e39 e52
e39 b55|b56 o55 e54 b61 b58|b63 o63 e54 b56 b66 b58 o70 o63 o67 e77 e66 e69
b72 b72 b62|b63|b66 b67 o72 b99 b99 b96|b101 o101 o86 o83 b86 b92 e105 o92 b104
o108 e93|o84 b100 o104 b111|b118|b121|b122 e114 o99 b89|b100 b99 e116 e101 e115 b97
b94|b99 b92 b98 b88 b85 o89 e91|e92|o95|o96 o81 o89 b94 o90 e80 o89 e68 o89
b96|b98 e80 b73 o74 e55 o59 o75 o70 o63 o59 e62 b53|b55|b58 b85 b82|b87 b75
b86 b97 b98 b98 b105 b107 o88 e99 e105 b107 b89 b100 b98|b103 o103 e89 e100 b86 o96
e102 b89 b89 b87|b92 o90 o96 b123 b141 o144 e151 e142 b159 b178 o181 e188 e179 b196 b215
o218 e225 e216 b233 b252 b244 o256 e264 e256 o257 b242|b249|b252|b253 b274 b271|b276 b278 b277
b280 b288|b289|b290|b291|b292|b293 b300 o295 o315 b321|b322|b323 o322 b324 b324 o328 o328 e332
b332 b328 b327|b328|b329|b330|b331|b332 b310 b319 o322 o344 b351 o347 o344 o349 o345
b353|b354|b355|b356|b357|b358 e362 b363|b366 b352 b352 b352 o351 b347 b345 o361 b353
b347|b348|b349|b350|b351 b344 o353 o357 b356 o353 o345 o354 e340 o345 o337 o339 o332 b323 b318
o306 o316 b309 b299 b302 o306 b291 b289|b294 o296 b301|b302|b305|b312 b324 b322|b327 o324 o322
o313 o318 b317|b321|b322|b324|b327 e360 e359 b360 b349 b361 o357 o365 b366|b367|b370 e347 e352
b331 b337 o337 e339 o337 o326 e323 b384 b375 o379 e387 e393 o384 e380 o380 e370 b361 o364 o364
e376 b385 o388 e396 e402 o393 e389 b392 e379 e374 o364 o350 o350 b353 b356 b348 o365 b365 o360
e361 o362 o359 e357 o323 b326|b327|b328|b329|b330 b310 o307 e306|e307|o310|o311 e311 b323 e312
b328 b323 b330 b341|b342|b343|b344|b345|b346 b332 o321 b313 b322 e334 b338 b316 o316 o301 e306
e315 o296 e299 b316|b317 e319 e309 b281|b282|b285|b292 b266 o266 o257 b249 o266 o264 b294 b294
o293 e292 b295|b296 e303 b302 b294 b310 b304 b297 b295|b300 o295 e295 b288 e303 e295
e300|e301|o302|o303 e305
-- not to cut and of the program
using

Code: Select all

from SimkinECCA import *

simkinecca = SimkinECCAp2compiler()
simkinecca.build_with_block()
with open('salvos/lanephase/I6_I6.txt','r') as f:
    uncommented = ""
    for line in f:
        uncommented += line.split("--")[0].strip()+" "
    uncommented = uncommented[0:-2]
    print ()
    print (uncommented)
    print ()
    compiled = simkinecca.compile(uncommented)
compiled = compiled[0][4:].split("(")[0]
with open('salvos/timedelta/I6_I6.txt','w') as f:
    f.write(compiled)
called from

Code: Select all

#!/bin/bash

python I6_I6.py > I6_I6.txt
grep finally I6_I6.txt
./salvo2mc.exe salvos/timedelta/I6_I6.txt salvos/mc/I6_I6
I get

Code: Select all

126 102 100 195 90 91 95 98 105 90 101 141 94 159 92 146 99 90 152 139 144 92 161 131 116 101 114 111 112 93 127 98 102 114 107 157 90 90 90 91 91 243 113 139 108 95 127 121 99 257 144 94 218 148 226 111 119 100 95 91 138 289 221 91 99 196 147 147 304 138 125 111 96 143 130 129 138 125 197 92 134 106 138 137 221 96 138 161 219 118 100 137 115 160 92 134 190 92 134 93 109 138 161 221 204 92 134 226 138 137 219 134 92 134 122 138 125 121 138 125 94 163 138 125 241 138 201 219 93 93 138 125 97 138 161 219 94 92 163 165 138 125 103 96 143 130 149 92 134 112 185 129 152 138 125 111 96 92 147 119 92 134 102 92 134 162 138 125 117 92 163 169 92 134 93 109 138 121 219 110 92 134 106 138 153 221 91 97 92 163 181 138 137 219 96 185 129 136 138 125 103 196 128 142 144 132 107 94 111 92 134 122 138 217 219 102 92 134 94 92 163 173 144 132 107 201 138 125 92 105 92 134 178 138 153 221 124 92 134 134 92 134 174 92 134 142 92 134 98 138 125 97 138 145 221 172 92 134 134 92 134 93 113 100 137 115 184 92 134 98 138 125 133 92 134 95 171 138 161 221 160 138 125 93 92 163 181 138 125 173 92 134 150 92 163 165 138 125 93 100 137 115 160 92 134 95 179 138 137 219 174 92 134 106 138 125 101 92 163 237 138 125 181 92 134 90 144 132 107 103 185 129 140 92 134 142 92 134 94 92 163 157 144 132 107 169 144 132 107 93 92 163 157 144 132 107 113 138 161 221 188 92 134 93 105 92 134 142 92 134 122 138 137 219 93 105 92 134 122 144 132 107 205 92 134 126 92 134 102 92 134 102 92 134 126 92 134 170 138 125 92 99 185 129 128 138 125 117 92 134 120 196 152 108 112 96 92 147 90 105 138 125 92 101 138 161 221 134 185 129 158 185 129 212 92 134 94 92 163 185 96 224 96 300 138 125 157 92 134 90 138 125 109 92 134 128 185 129 160 138 125 117 96 224 96 236 138 125 145 138 125 149 92 134 93 101 138 137 219 134 92 134 112 185 129 212 92 163 169 100 137 115 148 138 125 181 92 134 144 185 129 136 138 145 221 112 138 161 219 93 109 138 145 221 140 92 134 134 92 134 134 92 134 106 138 125 101 92 163 205 138 121 221 140 92 134 96 196 128 186 92 134 114 138 125 92 113 92 134 166 92 163 165 138 201 221 104 138 125 157 92 134 96 196 128 110 144 132 107 181 92 134 90 138 125 92 101 138 129 219 118 92 134 486 92 134 138 138 121 219 95 167 92 134 134 92 134 166 92 134 93 113 92 134 98 144 132 107 149 92 134 104 96 143 130 92 91 185 129 152 138 153 221 100 92 134 144 185 129 102 185 129 166 185 129 206 185 129 180 92 134 94 96 240 96 280 92 134 174 92 134 138 138 129 221 91 97 92 134 136 196 147 147 344 138 145 219 98 138 169 221 93 171 138 125 177 138 153 221 156 92 134 95 171 138 129 219 138 138 137 221 164 92 134 174 92 134 152 185 129 96 138 121 221 108 92 134 94 96 240 96 400 92 134 150 92 134 152 185 129 108 100 137 115 120 100 137 115 178 185 129 156 92 134 126 92 134 118 92 134 96 196 128 154 92 134 130 144 132 107 101 92 163 173 144 132 107 137 144 132 107 109 100 137 115 200 92 134 95 151 92 134 134 92 134 158 92 134 112 185 129 228 92 134 93 105 100 137 115 112 92 134 110 92 163 169 100 137 115 178 185 129 116 100 137 115 172 138 125 97 138 121 221 144 138 137 219 114 138 125 95 196 147 147 404 92 134 102 92 134 182 92 134 93 93 138 125 113 138 169 219 104 196 128 118 144 132 107 165 92 134 112 185 129 112 138 145 219 174 92 134 202 138 125 97 138 137 219 114 138 125 92 105 92 134 93 109 138 137 221 174 196 146 130 254 92 134 182 92 134 150 92 134 95 183 92 134 198 92 134 150 92 134 122 138 137 221 93 203 138 129 221 112 138 193 221 91 105 100 137 115 148 144 132 107 94 187 138 137 219 126 92 134 134 96 224 96 236 138 125 113 138 137 219 93 101 138 125 129 138 145 221 140 92 134 112 96 143 130 101 92 163 163 196 128 206 138 153 221 91 115 196 136 211 279 92 134 95 147 144 132 107 129 138 125 161 138 125 117 92 134 93 93 138 125 92 109 138 137 221 140 92 134 202 138 137 219 93 93 138 169 221 160 138 129 221 156 92 134 122 138 137 219 93 105 92 134 122 144 132 107 121 144 132 107 121 138 125 94 171 138 169 221 148 92 134 126 92 163 177 100 137 115 170 185 129 132 92 134 174 92 134 136 185 129 96 138 125 97 138 121 219 166 92 134 158 92 134 202 138 201 219 166 92 134 106 144 132 107 95 185 129 216 138 201 221 128 138 153 221 100 100 137 115 216 92 134 170 138 125 149 92 134 106 144 132 107 95 185 129 216 138 201 221 124 92 134 182 92 134 144 185 129 134 185 129 152 138 125 92 93 138 225 221 104 138 153 221 112 138 137 221 152 138 169 221 96 138 125 177 138 153 219 158 92 134 142 92 134 134 92 134 150 92 134 134 92 134 128 185 129 188 92 134 112 196 147 147 284 92 134 130 138 125 149 92 134 222 92 134 122 138 125 93 92 163 241 92 134 114 138 125 93 92 163 245 138 161 221 120 138 125 93 92 134 134 92 134 134 92 134 90 138 125 92 109 138 121 219 178 138 125 92 93 138 121 219 126 92 134 130 138 125 113 138 121 221 104 138 125 92 93 138 125 173 92 134 96 96 143 130 92 101 138 125 92 93 138 125 105 138 125 109 92 134 112 96 92 147 111 92 134 93 113 92 134 174 92 134 93 105 92 163 173 138 137 221 172 92 134 95 179 138 121 219 182 92 134 114 138 217 221 148 92 134 142 92 134 126 92 134 112 96 92 147 151 92 134 90 138 297 221 96 144 132 107 135 185 129 104 138 177 219 98 138 125 129 138 129 221 93 171 144 132 107 151 185 129 91 93 138 153 219 114 138 137 219 106 138 125 93 92 134 102 100 137 115 392 92 134 112 96 92 147 107 138 161 219 122 144 132 107 117 92 134 96 185 129 188 92 134 93 99 185 129 112 138 125 149 92 134 134 92 134 160 185 129 184 138 125 149 92 134 144 185 129 190 185 129 112 138 125 101 100 137 115 138 185 129 116 100 137 115 106 185 129 148 92 134 93 105 92 134 134 92 134 106 138 137 221 124 92 134 162 138 129 219 134 92 134 118 100 137 115 152 92 134 93 109 138 121 219 95 123 138 137 221 92 92 134 94 92 163 229 138 129 219 162 138 125 111 96 143 130 157 92 134 93 101 138 153 221 180 96 224 96 204 138 125 92 93 138 161 221 182 185 129 182 185 129 100 92 134 134 92 134 95 179 138 145 221 136 144 132 107 92 105 92 134 90 144 132 107 185 138 137 219 94 100 137 115 105 131 138 125 92 105 92 134 134 92 134 112 96 92 147 113 96 92 147 199 92 134 126 92 134 254 92 134 134 92 134 90 138 121 221 128 138 161 219 150 92 134 102 92 134 174 96 240 96 220 138 121 219 114 138 129 219 126 92 134 138 144 132 107 101 100 137 115 146 185 129 93 96 96 96 96 96 96 97 185 129 
in 0degree_single_lane_arm\salvos\timedelta\I6_I6.txt

and
I6_I6.mc
original version
(27.03 KiB) Downloaded 10 times
in 0degree_single_lane_arm\salvos\mc\I6_I6.mc

(The console output will be used in debugging ... to select the optimal variants of individual inbeteen -- sections.)

You can see we have a problem somewhere around generation 180000 ... it could be a fast glider If I would not be sure I would use transparency in golly with the alligned salvo and I would search for the differences to locate the problem.

... I would use a script translating the selected glider to its lane coordinate (and few neighboring gliders) to locate the guilty glider in the lanephase\ file ... and I would add required w1 or w2 in front of it... to finish the construction

and the problem is o296 b301|b302|b305|b312 b324 (chosen different option to destroy the beehive then in the original, but the speed is the problem. (we can try to remove b301 option, or convert it to o301/e301 to avoid the particullar option but we can see from the packed salvo, there should be rather big gap between gliders so we would need some wait in all cases ... o296 w1 b301|b302|b305|b312 solves the problem. And we get
I6_I6.mc
w1 and final comments added
(26.9 KiB) Downloaded 14 times
... you definitely can use translation of timedelta to mc from ruslesprouts macros ... salvos2mc can be obtained from

Code: Select all

#include "structures.hpp"

namespace sl {

    void process_hippo69(std::string hippo_69, std::string mc_filename, apg::lifetree<uint32_t, 1> &lt) {
        try {
            sl0salvo salvo = sl::from_hippo_69(hippo_69);
            pattern2mc(salvo.to_pattern(lt), mc_filename);
        }
        catch (sl::slParseException &e) {
            //std::cerr << hippo_69 << std::endl << " not parsed " << e.what() << std::endl;
        }
        catch (std::exception &e) {
            //std::cerr << hippo_69 << std::endl << " not parsed " << e.what() << std::endl;
        }
    }

    void process_deltafile(std::string td_filename, std::string mc_filename, apg::lifetree<uint32_t, 1> &lt) {
        try {
            std::vector<uint32_t> time_deltas;
            std::ifstream src(td_filename);
            std::string line;
            if (src.is_open()) {
                while (std::getline(src, line)) {
                    size_t comment_pos = line.find("--");
                    if (comment_pos!=std::string::npos) {
                        std::cout << line.substr(comment_pos,line.length()-comment_pos) << std::endl;
                        line = line.substr(0,comment_pos);
                    }
                    std::stringstream ss(line+" ");
                    std::string sdelta;
                    try {
                        while (getline(ss, sdelta, ' ')) {
                            uint32_t idelta = stoi(sdelta);
                            time_deltas.push_back(idelta);
                        }
                    }
                    catch (sl::slParseException &e) {
                        //std::cerr << sdelta << std::endl << " not parsed " << e.what() << std::endl;
                    }
                    catch (std::exception &e) {
                        //std::cerr << sdelta << std::endl << " not parsed " << e.what() << std::endl;
                    }
                }
                src.close();
            } else {
                std::cerr << "Unable to open file!" << td_filename << std::endl;
            }

            pattern2mc(to_pattern(lt, time_deltas), mc_filename);
        }
        catch (slParseException &e) {
            //std::cerr << td_filename << std::endl << " not parsed " << e.what() << std::endl;
        }
        catch (std::exception &e) {
            //std::cerr << td_filename << std::endl << " not parsed " << e.what() << std::endl;
        }
    }

} // namespace sl

int main(int argc, char* argv[]) {
    if (argc>2) {
        apg::lifetree<uint32_t, 1> lt(100);
        try {
            sl::process_hippo69(argv[1], argv[2], lt);
        }
        catch (std::exception &e) {}
        try {
            sl::process_deltafile(argv[1], argv[2], lt);
        }
        catch (std::exception &e) {}
    }
}

with structures

Code: Select all

#pragma once
#include <vector>
#include <exception>
#include "lifelib/pattern2.h"
namespace sl {

// the goal is to convert slow salvo (relative to a given lane) to a fast given lane salvo in the same direction
// the timing of outgoing gliders could be decided at arbitrary modulo, but I expect only parity would be required

class slParseException: public std::exception {
private:
    std::string message = "Parse exception: ";
public:
    slParseException(const std::string &msg = "") {
        this->message += msg;
    }
    const char *what() {
        return (this->message).c_str();
    }
};

void pattern2mc(apg::pattern pattern, std::string file_name) {
   std::ofstream out(file_name+".mc");
   pattern.write_macrocell(out);
   out.close();
}

struct time_gap {
    int32_t time_delta; // to next glider
    int32_t meaning_flag;
    // current salvos use values around 320 to encode at least but does not specify the minimal value
    // meaning_flag=0 ... exact
    // meaning_flag=1 ... at least any parity
    // meaning_flag=2 ... at least, same parity
    // meaning_flag=4 ... independent on previous flags (not with 8) ... issued glider has phase %2 equal to current glider and this is first glider in the salvo the issued glider is dependent on
    // meaning_flag=8 ... independent on previous flags (not with 4) ... issued glider has phase %2 different to current glider and this is first glider in the salvo the issued glider is dependent on
    // last time_gap in salvo has meaning_flag = 1 (unless there are p2 SPEBOEs)
    // some gliders in salvo could often be in other parity, but parity dependency over more gaps would be hard to pack so we rather fixed its parity
    // meaning_flag=16 ... the timing works, the &3 holds in infinity, but there is gap where it does not work ... (case &3 != 0 just does not know about the gap)
    // meaning_flag=32 ... the exact timing is relative to glider at the gap start

    time_gap() {}

    time_gap(int32_t delta,int32_t flag) {
        time_delta=delta;
        meaning_flag=flag;
    }

    time_gap(std::string gap) {
        std::size_t open = gap.find("(");
        if (open==std::string::npos) {
            throw slParseException(gap+" not containing (");
        }
        std::size_t close = gap.find(")",open);
        if (close==std::string::npos) {
            throw slParseException(gap+" not containing (*)");
        }
        try {
            time_delta=stoi(gap.substr(0,open));
            meaning_flag=stoi(gap.substr(open+1,close-open-1));
        } catch (std::exception &e) {
            throw slParseException(gap + " " + e.what());
        }
    }

    /* definition by dvgrn string */
    time_gap(std::string dvgrn, uint32_t gap_no) {
        std::stringstream ss(dvgrn+",");
        std::string sdist;
        if (!getline(ss, sdist, ',')) {
            throw slParseException("number of gaps exceeded");
        }
        while (gap_no>0) {
            if (!getline(ss, sdist, ',')) {
                throw slParseException("number of gaps exceeded");
            }
            --gap_no;
        }
        std::size_t plus_pos = sdist.find("+");
        meaning_flag=0;
        if  (plus_pos!=std::string::npos) {
            std::size_t N_pos = sdist.find("N", plus_pos);
            if (N_pos==std::string::npos) {
                throw slParseException("+ without N");
            }
            meaning_flag = N_pos-plus_pos;// there have to be "2" there ...
            sdist = sdist.substr(0, plus_pos);
        }
        time_delta = stoi(sdist);
    }
};

struct sl0salvo {// have to start on single SPEBOE and end in single SPEBOE as well have to issue glider in the direction of the salvo lane (0 degree)

    std::vector<sl::time_gap> time_gaps; //distance to the next glider in the salvo
    int32_t direction; // 0, 90, 180, 270, 360 ... angle relative to incomming glides (for even arm_pos) odd arm pos changes 90<->270, 360 means no output glider

    // move only salvos would have direction == 360

    int32_t arm_delta; // how much the SPEBOE was pushed in HD by the move (negative if pulled) odd means the SPEBOE switches sides of the salvo lane
    int32_t fire_lane; // relaive to salvo lane, positive is the side not containing the starting SPEBOE
    int32_t final_SPEBOE; //-1 SPEBOE empty, 0 block, 1 beehive, 2 pond, 3 boat, 4 ship, 5 glider ... (for the arm repositioning ... to know object to destroy)
    // for the glider SPEBOE the final time_gap would be (0) corresponding to maximal arm_pos. Arm_pos could be pulled by 2N hd increasing the final gap by 8N
    // if there is incompatible timing restriction (or wrong side), using glider delayed 8N+1 and another glider 90 later allows 90(1) later at arm position pulled by 2N-3 (the other side)
    // arm destroy salvos would have final_SPEBOE == -1 (one with direction == 360 but other directions could be helpfull as well]

    // 180_4 with final SPEBOE=-1 could be interpreted as 360 with SPEBOE=5.
    // 180_4 with final SPEBOE>=0 could be interpreted as 360 with SPEBOE=5 and "SPEBOE trash" created

    //int32_t ori_arm_delta; // for arm duplicator (180_+/-4) to allow compatible format 360 with final_SPEBOE=5
    //int32_t ori_SPEBOE;    // for arm duplicator (180_+/-4) to allow compatible format 360 with final_SPEBOE=5

    int32_t min_time_delta; // minimal time delta required in salvo
    int32_t compactness; // for shortest gaps >= 90 when cut by 1024 ticks in the most sparse part, what is number of gliders fitting to the window (apprxmaton for useflness for state codding n 0e0p metacell)
    int32_t relative_delay; // delay relative to glider at start of delay marked & 32.
    int32_t nonstretched_delay; // delay relative to first glider in the case, no gap prolonging occurs
    int32_t sum_gaps; // sum for all gaps at least 90
    // we start with unknown arm_delta and fire_lane (set to 0) and time_gap s with all meaning_flagS == 0 classification finds arm_delta, fire_lane and sets the flags
    // final time_gap must be added by classfier as well
    std::string dvgrn; //dvgrn decomposition to compare with (not required)

    sl0salvo () {
        final_SPEBOE=255;// so far invalid salvo
        min_time_delta=compactness=sum_gaps=relative_delay=nonstretched_delay=arm_delta=fire_lane=0;
        dvgrn="";
    }

    sl0salvo salvo_from_dvgrn(std::string dvgrn){
        //std::cerr << dvgrn << std::endl;
        sl0salvo salvo;
        try {
            uint32_t i=0;
            while (true) {
                salvo.time_gaps.push_back(time_gap(dvgrn,i++));
            }
        }
        catch (slParseException &e) {//the exception is expected to end the loop ...
        }
        return salvo;
    }

    void outSalvo() {
        std::cout << "ad=" << arm_delta << ",dir=" << direction << ",fl=" << fire_lane << ",fs=" << final_SPEBOE << ",md="
            << min_time_delta << ",c=" << compactness << ",nd=" << nonstretched_delay << ",rd=" << relative_delay << ",sg=" << sum_gaps << ",\"(";
        for(uint64_t j=0;j<time_gaps.size();++j) {
            std::cout << time_gaps[j].time_delta << "(" << time_gaps[j].meaning_flag << ")" << (j+1<time_gaps.size() ? ", ":")\"");
        }
        std::cout << std::endl;
        //cl.show_salvo(salvo).write_rle(std::cout);
        //std::cout << std::endl;
    }

    /**
        Using time_gaps like there are no possible delays
    */
    apg::pattern to_pattern(apg::lifetree<uint32_t, 1> &lt) {
        //apg::pattern salvo_patt(&lt, "2o2b2o$2o2bobo$4bo!", "b3s23"); salvo_patt=salvo_patt.shift(-4,0);
        apg::pattern salvo_patt(&lt, "bo$obo2b2o$obo2bobo$bo3bo!", "b3s23"); salvo_patt=salvo_patt.shift(-5,-1);
        apg::pattern glider(&lt, "2o$obo$o!", "b3s23");
        int32_t ticks=0;
        for(uint32_t i=0;i<time_gaps.size();++i) {
            ticks=ticks+time_gaps[i].time_delta;
            salvo_patt = salvo_patt + glider[-ticks];
        }
        return salvo_patt;
    }

    /**
        Expects classified salvo
        Increases time_gaps to be at least ticks_lower_bound while preserving correctness
        Returns false if it is not possible (some small gap cannot be prolonged without affecting functionality)
        Recipes were probably searched with ticks_lower_bound=90 and it is usually compatible with the needs
        so it would be almost always fine not to use slowDown at all.
        Salvo had to be discarded if false is returned. meaning_flagS do not require change, just the time_gaps are adjusted
    */
    /*
    void slowDown(int32_t ticks_lower_bound) {
        //TODO absolte delay ... but betterr way is to recompute gaps from scratch considering new ticks_lower bound
        if (min_time_delta < ticks_lower_bound) {
            throw slParseException("cannot be slowed down");
        }
        sum_gaps=0;
        for(uint32_t i=0;i<time_gaps.size();++i) {
            if (time_gaps[i].time_delta < ticks_lower_bound) {
                if ((time_gaps[i].meaning_flag & 3) == 0) {
                    throw slParseException("cannot be slowed down, min_time_delta is incorrect");
                }
                int32_t delta = ticks_lower_bound - time_gaps[i].time_delta;
                time_gaps[i].time_delta = ticks_lower_bound;
                if ((delta % 2 == 1) && ((time_gaps[i].meaning_flag & 3) == 2)) {//parity changed
                    ++time_gaps[i].time_delta;
                }
            }
            sum_gaps += time_gaps[i].time_delta;
        }
    }*/

    bool corrected() {
        for(uint32_t i=0;i<time_gaps.size();++i) {
             if (time_gaps[i].meaning_flag & 16) {
                 return true;
             }
         }
         return false;
    }

};

apg::pattern to_pattern(apg::lifetree<uint32_t, 1> &lt, std::vector<uint32_t> time_deltas) {
    //apg::pattern salvo_patt(&lt, "2o2b2o$2o2bobo$4bo!", "b3s23"); salvo_patt=salvo_patt.shift(-4,0);
    apg::pattern salvo_patt(&lt, "bo$obo2b2o$obo2bobo$bo3bo!", "b3s23"); salvo_patt=salvo_patt.shift(-5,-1);
    apg::pattern glider(&lt, "2o$obo$o!", "b3s23");
    int32_t ticks=0;
    for(uint32_t i=0;i<time_deltas.size();++i) {
        ticks=ticks+time_deltas[i];
        salvo_patt = salvo_patt + glider[-ticks];
    }
    return salvo_patt;
}

/*
* saves the bonus dvgrn format to later compare results with
*/
std::string from_dvgrn(std::string line) {
    std::size_t start = line.find("[0,");
    if (start==std::string::npos) {
        throw slParseException("not a dvgrn recipe [");
    }
    std::size_t end = line.find("]");
    if (end==std::string::npos) {
        throw slParseException("not a dvgrn recipe ]");
    }
    return line.substr(start+3,end-start-3);
}

/*
 reads 0 degree firing salvo to be classified (and extended by the final gap) later
*/
sl0salvo from_simeks(std::string line) {
    //if (line.find(", gl="+std::to_string(gl)+",")!=std::string::npos) {// only given degree glider firing recipes (gl=1 0, gl=3 180
        std::size_t start = line.find("{");
        std::size_t end = line.find("}");
        if ((start!=std::string::npos)&&(end!=std::string::npos)) {
            sl0salvo salvo;
            salvo.arm_delta=0;salvo.fire_lane=0;salvo.final_SPEBOE=255;salvo.min_time_delta=0;
            salvo.time_gaps.clear();
            int32_t ticks=0;
            // Create a stringstream object to str
            std::stringstream ss(line.substr(start+1,end-start-1));
            std::string sdist;
            getline(ss, sdist, ',');  //ignore first
            while (getline(ss, sdist, ',')) {
                int32_t idist = std::stoi(sdist);
                if (idist<0) {
                    break;
                }
                if (idist<2) {
                    idist+=1024;
                }
                if (ticks % 2 == 1) {
                    --idist;
                }
                ticks+=idist;
                time_gap tg(idist,0);
                salvo.time_gaps.push_back(tg);
            }
            return salvo;
        } else {
            throw slParseException("not a recipe");
        }
    //} else {
    //    throw slParseException("not 0 degree");
    //}
     //return false;
}

int32_t get_name_equal(std::string line,std::string name) {
    std::size_t name_start = line.find(name+"=");
    if (name_start==std::string::npos) {
        throw slParseException("not containing "+name);
    }
    std::size_t name_end = line.find(",",name_start);
    if (name_end==std::string::npos) {
        throw slParseException("not comma terminated");
    }
    int32_t len=name_end-name_start-name.length()-1;
    return std::stoi(line.substr(name_end-len,len));
}

sl0salvo from_hippo_69(std::string line) {
    sl0salvo salvo;
    salvo.arm_delta = get_name_equal(line,"ad");
    salvo.direction = get_name_equal(line,"dir");
    salvo.fire_lane = get_name_equal(line,"fl");
    salvo.final_SPEBOE = get_name_equal(line,"fs");
    salvo.min_time_delta = get_name_equal(line,"md");
    salvo.compactness = get_name_equal(line,"c");
    salvo.sum_gaps = get_name_equal(line,"sg");
    salvo.relative_delay = get_name_equal(line,"rd");
    salvo.nonstretched_delay = get_name_equal(line,"nd");
    std::size_t start = line.find(",\"(");
    if (start==std::string::npos) {
        throw slParseException(line+" not containing ,\"(");
    }
    std::size_t end = line.find(")\"", start);
    if (end==std::string::npos) {
        throw slParseException(line+" not containing )\"");
    }
    std::stringstream time_dists(line.substr(start+3,end-start-3)+",");
    std::string gap;
    while (getline(time_dists, gap, ',')) {
        salvo.time_gaps.push_back(time_gap(gap));
    }
    return salvo;
}
}
Oh I actually detect parities switched so it would be better to start with the original salvo at generation 1 or to use e<->o globally in the lanephase file.
User avatar
LaundryPizza03
Posts: 2639
Joined: December 15th, 2017, 12:05 am
Location: Unidentified location "https://en.wikipedia.org/wiki/Texas"

Re: Thread for your script-related questions

Post by LaundryPizza03 »

I want to weld together an XOR replicator push and pull mechanism to make a spaceship that moves 3 units every 75 units of time. (This replicator is 4c/13o, so the total speed will be 12c/975o.) I came up with the following mechanism to move these mechanisms:

Code: Select all

x = 211, y = 97, rule = MAPAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASuper
2.T16.T.2T7.T.3T.3T.3T$.T13.2T.2T3.T6.T.T.T3.T.T$10T.T.T5.T2.T2.2T2.T
2.3T2.T2.2T2.3T$.T9.T.T.2T2.T.T3.T2.T5.T2.T4.T.T.T$2.T9.T6.T.3T.2T.T
3.3T2.T2.2T2.3T6$5.R71JR52.R77LR$5.R71JR52.R77LR$5.R71JR52.R77LR$5.R
71JR52.R77LR2$5.A.A9.A19.A3.A.A3.A.A.A5.A3.A3.A5.A3.A.A52.A.A.A.A3.A.
A3.A5.A7.A3.A.A.A3.A3.A.A.A.A5.A9.A7.A.A$3.HF204.FH3$206.F.F$3.JF200.
F5$206.D.D$209.FJ4$209.FL$2.LF206.L$4.F205.L$210.L$210.L$210.L$210.L$
3.F.F204.L$210.L$210.L$210.L$198.D.D3.D3.D.L$209.FL$208.F6$206.FH$.NF
.F202.H$207.H$207.H$207.H$4.F202.H$207.H$207.H$207.H$4.F202.H$5.F201.
H$207.H$207.H$207.H$207.H$207.H$207.H$207.H$207.H$207.H$207.H$207.H$
207.H$207.H$PF.F203.H$207.H$3.F203.H$207.H$207.H$6.F200.H$207.H$207.H
$207.H$207.H$3.F203.H$207.H$207.H$207.H$207.H$207.H$207.H$207.H$HF
204.FH2$2.R71JR52.R77LR$2.R71JR52.R77LR$2.R71JR52.R77LR$2.R71JR52.R
77LR!
What's a fast script for welding these components together?

Code: Select all

x = 4, y = 3, rule = B3-q4z5y/S234k5j
2b2o$b2o$2o!
LaundryPizza03 at Wikipedia
Post Reply