Lightcone

For scripts to aid with computation or simulation in cellular automata.
User avatar
Tawal
Posts: 849
Joined: October 8th, 2023, 7:20 am
Location: Mælar

Re: Lightcone

Post by Tawal » May 10th, 2025, 2:07 pm

The [[filter]] parameter works fine.
But it seems that it doesn't care about no-interacting cells around the filter pattern.
I tried to add red cells around, like Barrister's filter, but it doesn't seem to work.

Another improvement : A max-junk parameter would be welcome ;)

However, LightCone is a very nice and fast conduit's search program Image

Edit:
I also add this two catalysts (Beehive with tail and the big Snark's catalyst) :

Code: Select all

# Beehive with tail
[[catalyst]]
rle = "2o$bo$bob2o$2bo2bo$3b2o!"
recovery-range = [ 3, 6,]
required = "4D$D2CD$2DC4D$.DCD2CD$.2DC2.C$4.2A!"
approaches = [ "3D$D2AD$2DA4D$.DAD2A2D$2.DA2DA2D$3.D2A4D$4.3DCDC$6.DC2D$6.DCDC$6.3D!",]
summary = ".2A$2.A$2.A.2A$3.A2.A$4.2A15$4D$D2CD$2DC4D$.DCD2CD$.2DC2.C$4.2A!"
soup = "2o$bo$bob2o$2bo2bo$3b2o$8b2o$7b3ob3o$8b2o$15bo2$11b4o$10b5o!"

# Snark big catalyst
[[catalyst]]
rle = "8bo$4b2obobo$3bobobobo$o2bobobobob2o$4ob2o2bo2bo$4bo4b2o$2bobo$2b2o!"
recovery-range = [4, 10]
required = "9.2D$9.C2D$5.2A.ADCD$3D.A.A.ADC4D$DC2DADADCDCD2CD$D4CD2C2DC2DCD$5DC4D2C3D$2.DCDCD2.4D$2.D2C2D$2.4D!"
approaches = [ "2.D3C3D$.3DC4D$.7DA$.3D2ADA.A$.2DADADA.A$A2DADA.A.A.2A$4A.2A2.A2.A$4.A4.2A$2.A.A$2.2A!", ]
summary = "9.A$5.2A.A.A$4.A.A.A.A$.A2.A.A.A.A.2A$.4A.2A2.A2.A$5.A4.2A$3.A.A$3.2A12$9.2D$9.C2D$5.2A.ADCD$3D.A.A.ADC4D$DC2DADADCDCD2CD$D4CD2C2DC2DCD$5DC4D2C3D$2.DCDCD2.4D$2.D2C2D$2.4D10$3.D3C3D$2.3DC4D$2.7DA$2.3D2ADA.A$2.2DADADA.A$.A2DADA.A.A.2A$.4A.2A2.A2.A$5.A4.2A$3.A.A$3.2A!"
soup = "10bo$8b3o$o6bo$b2o4b2o$2o7$4b2o$4b2o3$9bo$5b2obobo$4bobobobo$bo2bobobobob2o$b4ob2o2bo2bo$5bo4b2o$3bobo$3b2o!"
With these, LightCone is able to rediscover Snark and Syringe.
Alone we go faster … Together we go further …
Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ

mvr
Posts: 132
Joined: November 8th, 2009, 4:58 am

Re: Lightcone

Post by mvr » May 12th, 2025, 8:10 am

That's strange, I thought I did it in a way that would make the red cells work. Could you post a file that's not working?

Actually, those Snark and Syringe files might be good ones to add to the repo as examples. Could you post them too?

User avatar
Tawal
Posts: 849
Joined: October 8th, 2023, 7:20 am
Location: Mælar

Re: Lightcone

Post by Tawal » May 12th, 2025, 12:21 pm

I must have made a mistake placing the filter with the red cell because it works for me now.
Sorry for the inconvenience :oops:

However, the filter-range parameter doesn't seem to be working.
Does the max-stationary-count parameter play the role of max-junks ?

Here is the files for Snark and Syringe rediscovery.
The input pattern is simply a Glider hitting a Block at generation 89 in both case (HF for Snark and Pi for Syringe).
The filter is just the Block that I want to be present at the end.
Say I don't know about the outputs …

Snark.toml

Code: Select all

first-active-range = [89, 140]
active-window-range = [0, 60]

min-stable-time = 40

use-bloom-filter = true

pattern-center = [25, 25]
pattern = """
x = 50, y = 50, rule = LifeHistory
.A$2.A$3A2$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.
46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B
$4.46B$4.46B$4.18B2A26B$4.18B2A26B$4.46B$4.46B$4.46B$4.46B$4.46B$4.
46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B
$4.46B$4.46B$4.46B$4.46B!
"""


[[filter]]
filter-gen = 126
filter-pos = [-3, 2]
filter-type = 'EXACT'
filter = '2C$2C!'


# Eater1
[[catalyst]]
rle = "2b2o$bobo$bo$2o!"
recovery-range = [ 2, 10,]
required = "2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D!"
approaches = [ "2.3DC$2.3DC$2.2A2D$.ADA2D$.A4D$2A!",]
forbidden = [ "4.3D$4.DC3D$4.DCDCD$4.D2C2D$2.2A4D$.A.A$.A$2A!", "5.3D$4.2DCD$4.DC3D$4.D3CD$2.2A5D$.A.A$.A$2A!",]
summary = "3.2A$2.A.A$2.A$.2A16$2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D14$3.3DC$3.3DC$3.2A2D$2.ADA2D$2.A4D$.2A13$5.3D18.3D$5.DC3D15.2DCD$5.DCDCD15.DC3D$5.D2C2D15.D3CD$3.2A4D14.2A5D$2.A.A17.A.A$2.A19.A$.2A18.2A!"
soup = "6b2obobo$6b2ob4o$7b2o3b2o$6b2o5bo$6bo3bob2o$10b4o$6b3obo2bo$6b3ob2obo3$2b2o$bobo$bo$2o!"

[[catalyst]]
rle = "2b2o$bobo$bo$2o!"
recovery-range = [ 1, 1,]
required = "2.4D$.2D2CD$.DCDCD$2DC3D$D2CD$.3D!"
approaches = [ "4.2A$3.A.A$3DA$2D2A$C3D$C3D$3.D!",]
forbidden = [ "7.2A$6.A.A$.3D2.A$.DC2D2A$3DCD$D3CD$5D!", "7.2A$6.A.A$6.A$.4D2A$2D2CD$DCDCD$3DCD$2.3D!", "7.2A$6.A.A$6.A$5D2A$D3CD$3DCD$.DC2D$.3D!",]
summary = "7.2A$6.A.A$6.A$5.2A16$6.4D$5.2D2CD$5.DCDCD$4.2DC3D$4.D2CD$5.3D16$7.2A$6.A.A$3.3DA$3.2D2A$3.C3D$3.C3D$6.D14$7.2A18.2A18.2A$6.A.A17.A.A17.A.A$.3D2.A19.A19.A$.DC2D2A14.4D2A13.5D2A$3DCD15.2D2CD15.D3CD$D3CD15.DCDCD15.3DCD$5D15.3DCD16.DC2D$22.3D16.3D!"
soup = "12b2o$11bobo$11bo$5bobo2b2o$3bobo2$4o2bo$2o3b2o$2obob2o$2b3ob2o$bobo!"


# Snark Big Catalyst
[[catalyst]]
rle = "8bo$4b2obobo$3bobobobo$o2bobobobob2o$4ob2o2bo2bo$4bo4b2o$2bobo$2b2o!"
recovery-range = [4, 10]
required = "9.2D$9.C2D$5.2A.ADCD$3D.A.A.ADC4D$DC2DADADCDCD2CD$D4CD2C2DC2DCD$5DC4D2C3D$2.DCDCD2.4D$2.D2C2D$2.4D!"
approaches = [ "2.D3C3D$.3DC4D$.7DA$.3D2ADA.A$.2DADADA.A$A2DADA.A.A.2A$4A.2A2.A2.A$4.A4.2A$2.A.A$2.2A!", ]
summary = "9.A$5.2A.A.A$4.A.A.A.A$.A2.A.A.A.A.2A$.4A.2A2.A2.A$5.A4.2A$3.A.A$3.2A12$9.2D$9.C2D$5.2A.ADCD$3D.A.A.ADC4D$DC2DADADCDCD2CD$D4CD2C2DC2DCD$5DC4D2C3D$2.DCDCD2.4D$2.D2C2D$2.4D10$3.D3C3D$2.3DC4D$2.7DA$2.3D2ADA.A$2.2DADADA.A$.A2DADA.A.A.2A$.4A.2A2.A2.A$5.A4.2A$3.A.A$3.2A!"
soup = "10bo$8b3o$o6bo$b2o4b2o$2o7$4b2o$4b2o3$9bo$5b2obobo$4bobobobo$bo2bobobobob2o$b4ob2o2bo2bo$5bo4b2o$3bobo$3b2o!"
Results :

Code: Select all

x = 0, y = 0, rule = Life
bo106bo99bo99bo99bo$2bo106bo99bo99bo99bo$3o104b3o97b3o97b3o97b3o14$28b
o$26b3o$25bo$25b2o111b2o98b2o98b2o98b2o$138bo99bo99bo99bo$136bobo97bob
o97bobo97bobo$136b2o98b2o98b2o98b2o4$15b2o105b2o98b2o98b2o98b2o$14bobo
5b2o97bobo5b2o90bobo5b2o90bobo5b2o90bobo5b2o$14bo7b2o97bo7b2o90bo7b2o
90bo7b2o90bo7b2o$13b2o105b2o98b2o98b2o98b2o2$27bo$23b2obobo307b2o99b2o
$22bobobobo307bobo98bobo$19bo2bobobobob2o197b2o98b2o7bo90b2o8bo$19b4ob
2o2bo2bo198bo99bo7b2o90bo8b2o$23bo4b2o197b3o97b3o97b3o$21bobo203bo99bo
99bo$21b2o36$bo106bo99bo99bo99bo$2bo106bo99bo99bo99bo$3o104b3o97b3o97b
3o97b3o17$31b2o105b2o98b2o98b2o98b2o$31bo106bo99bo99bo99bo$29bobo104bo
bo97bobo97bobo97bobo$29b2o105b2o98b2o98b2o98b2o4$15b2o105b2o98b2o98b2o
98b2o$14bobo5b2o97bobo5b2o90bobo5b2o90bobo5b2o90bobo5b2o$14bo7b2o97bo
7b2o90bo7b2o90bo7b2o90bo7b2o$13b2o105b2o98b2o98b2o98b2o3$29b2o105b2o
199b2o98b2o$29bobo104bobo198bobo97bobo$31bo106bo200bo99bo$31b2o96b2o7b
2o89b2o98b2o8b2o98b2o$130bo99bo99bo$127b3o97b3o97b3o$127bo99bo99bo36$b
o$2bo$3o17$31b2o$31bo$29bobo$29b2o4$15b2o$14bobo5b2o$14bo7b2o$13b2o6$
27b2o$27bo$28b3o$30bo!
Snark is the top leftmost result ;)


Syringe.toml

Code: Select all

first-active-range = [89, 170]
active-window-range = [0, 80]

min-stable-time = 40

max-catalysts = 4

use-bloom-filter = true

pattern-center = [25, 25]
pattern = """
x = 50, y = 50, rule = LifeHistory
.A$2.A$3A2$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.
46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B
$4.46B$4.46B$4.19B2A25B$4.19B2A25B$4.46B$4.46B$4.46B$4.46B$4.46B$4.
46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B
$4.46B$4.46B$4.46B$4.46B!
"""


[[filter]]
filter-gen = 170
filter-pos = [-2, 2]
filter-type = 'EXACT'
filter = '2C$2C!'




# Eater1
[[catalyst]]
rle = "2b2o$bobo$bo$2o!"
recovery-range = [ 2, 10,]
required = "2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D!"
approaches = [ "2.3DC$2.3DC$2.2A2D$.ADA2D$.A4D$2A!",]
forbidden = [ "4.3D$4.DC3D$4.DCDCD$4.D2C2D$2.2A4D$.A.A$.A$2A!", "5.3D$4.2DCD$4.DC3D$4.D3CD$2.2A5D$.A.A$.A$2A!",]
summary = "3.2A$2.A.A$2.A$.2A16$2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D14$3.3DC$3.3DC$3.2A2D$2.ADA2D$2.A4D$.2A13$5.3D18.3D$5.DC3D15.2DCD$5.DCDCD15.DC3D$5.D2C2D15.D3CD$3.2A4D14.2A5D$2.A.A17.A.A$2.A19.A$.2A18.2A!"
soup = "6b2obobo$6b2ob4o$7b2o3b2o$6b2o5bo$6bo3bob2o$10b4o$6b3obo2bo$6b3ob2obo3$2b2o$bobo$bo$2o!"

[[catalyst]]
rle = "2b2o$bobo$bo$2o!"
recovery-range = [ 1, 1,]
required = "2.4D$.2D2CD$.DCDCD$2DC3D$D2CD$.3D!"
approaches = [ "4.2A$3.A.A$3DA$2D2A$C3D$C3D$3.D!",]
forbidden = [ "7.2A$6.A.A$.3D2.A$.DC2D2A$3DCD$D3CD$5D!", "7.2A$6.A.A$6.A$.4D2A$2D2CD$DCDCD$3DCD$2.3D!", "7.2A$6.A.A$6.A$5D2A$D3CD$3DCD$.DC2D$.3D!",]
summary = "7.2A$6.A.A$6.A$5.2A16$6.4D$5.2D2CD$5.DCDCD$4.2DC3D$4.D2CD$5.3D16$7.2A$6.A.A$3.3DA$3.2D2A$3.C3D$3.C3D$6.D14$7.2A18.2A18.2A$6.A.A17.A.A17.A.A$.3D2.A19.A19.A$.DC2D2A14.4D2A13.5D2A$3DCD15.2D2CD15.D3CD$D3CD15.DCDCD15.3DCD$5D15.3DCD16.DC2D$22.3D16.3D!"
soup = "12b2o$11bobo$11bo$5bobo2b2o$3bobo2$4o2bo$2o3b2o$2obob2o$2b3ob2o$bobo!"


# Eater 2
[[catalyst]]
rle = "3bob2o$b3ob2o$o$b3ob2o$3bobo$3bobo$4bo!"
recovery-range = [ 4, 10,]
required = "3.D$.3DCD2A$2D3C.2A$DC4D.2D$2D3CD2CD$.3DCDC2D$3.DCDCD$3.2DC2D$4.3D!"
approaches = [ "4.D$4.3D2C$4.5D$3.AD2A2D$.3AD2A2D$A$.3A.2A$3.A.A$3.A.A$4.A!",]
forbidden = [ "6.3D$6.DC3D$6.DCDCD$6.D2C2D$6.4D$3.A.2A$.3A.2A$A$.3A.2A$3.A.A$3.A.A$4.A!", "7.3D$6.2DCD$6.DC3D$6.D3CD$6.5D$3.A.2A$.3A.2A$A$.3A.2A$3.A.A$3.A.A$4.A!",]
summary = "4.A.2A$2.3A.2A$.A$2.3A.2A$4.A.A$4.A.A$5.A13$3.D$.3DCD2A$2D3C.2A$DC4D.2D$2D3CD2CD$.3DCDC2D$3.DCDCD$3.2DC2D$4.3D10$5.D$5.3D2C$5.5D$4.AD2A2D$2.3AD2A2D$.A$2.3A.2A$4.A.A$4.A.A$5.A9$7.3D18.3D$7.DC3D15.2DCD$7.DCDCD15.DC3D$7.D2C2D15.D3CD$7.4D16.5D$4.A.2A16.A.2A$2.3A.2A14.3A.2A$.A19.A$2.3A.2A14.3A.2A$4.A.A17.A.A$4.A.A17.A.A$5.A19.A!"
soup = "9bo2b2o$7b2ob3obo$7bob4obo$7bob3o$8bo2b4o$9b5o$7b2o2b2obo$9b3o2bo2$3bob2o$b3ob2o$o$b3ob2o$3bobo$3bobo$4bo!"


# Non Transparent Block (external Block of Syringe)   DON'T WORK HERE !
[[catalyst]]
rle = "2o$2o!"
recovery-range = [ 2, 14,]
required = "4D$D2CD$.2A!"
approaches = [ "2D2A2D$2D2A2D$6D$.2DC2D!", "2D2A2D$2D2A2D$6D$2DC2D!",]
summary = "2.2A$2.2A18$.4D$.D2CD$2.2A19$2D2A2D14.2D2A2D$2D2A2D14.2D2A2D$6D14.6D$.2DC2D14.2DC2D!"

[[catalyst]]
rle = "2o$2o!"
recovery-range = [ 3, 6,]
required = ".2A$D2CD$4D!"
approaches = [ ".2D2CD$7D$2D2A3D$2D2A3D!",]
summary = "2.2A$2.2A19$2.2A$.D2CD$.4D16$.2D2CD$7D$2D2A3D$2D2A3D!"


# Beehive with tail
[[catalyst]]
rle = "2o$bo$bob2o$2bo2bo$3b2o!"
recovery-range = [ 3, 6,]
required = "4D$D2CD$2DC4D$.DCD2CD$.2DC2.C$4.2A!"
approaches = [ "3D$D2AD$2DA4D$.DAD2A2D$2.DA2DA2D$3.D2A4D$4.3DCDC$6.DC2D$6.DCDC$6.3D!",]
summary = ".2A$2.A$2.A.2A$3.A2.A$4.2A15$4D$D2CD$2DC4D$.DCD2CD$.2DC2.C$4.2A!"
soup = "2o$bo$bob2o$2bo2bo$3b2o$8b2o$7b3ob3o$8b2o$15bo2$11b4o$10b5o!"
Results:

Code: Select all

x = 445, y = 202, rule = Life
bo106bo99bo99bo99bo$2bo106bo99bo99bo99bo$3o104b3o97b3o97b3o97b3o10$
426bo$426b3o$429bo$428b2o6$30b2o105b2o98b2o98b2o$12b2o16b2o87b2o16b2o
80b2o16b2o80b2o16b2o$12b2o105b2o98b2o98b2o$423b2o$422bobo$422bo$23b2o
105b2o98b2o98b2o89b2o7b2o$23b2o105b2o98b2o98b2o98b2o3$26b2o105b2o98b2o
98b2o$27bo106bo99bo99bo$27bobo104bobo97bobo97bobo$28b2o105b2o98b2o98b
2o2$22b2o105b2obo97b2o$22bo106b2ob3o95bo$23b3o109bo95b3o93b2o$25bo103b
2ob3o98bo93b2o$130bobo$130bobo$131bo36$bo106bo99bo99bo99bo$2bo106bo99b
o99bo99bo$3o104b3o97b3o97b3o97b3o7$18bo106bo99bo99bo99bo$18b3o104b3o
97b3o97b3o97b3o$21bo106bo99bo99bo99bo$20bobo104bobo97bobo97bobo97bobo$
20bobo104bobo97bobo97bobo97bobo$21bo106bo99bo99bo99bo$36b2o$36bo$34bob
o$34b2o6$16b2o105b2o98b2o98b2o98b2o$15bobo104bobo97bobo97bobo97bobo$
15bo106bo99bo99bo99bo$14b2o7b2o96b2o7b2o89b2o7b2o89b2o7b2o89b2o7b2o$
23b2o105b2o98b2o98b2o98b2o2$31b2obo103b2obo96b2obo96b2obo96b2obo$31b2o
b3o101b2ob3o94b2ob3o94b2ob3o94b2ob3o$37bo106bo99bo99bo99bo$31b2ob3o
101b2ob3o94b2ob3o94b2ob3o94b2ob3o$32bobo104bobo97bobo97bobo97bobo$32bo
bo104bobo97bobo83b2o12bobo97bobo$33bo106bo91b2o6bo83bobo13bo99bo$232bo
91bo107b2o$233b3o87b2o107bo$235bo197b3o$435bo36$bo106bo99bo99bo99bo$2b
o106bo99bo99bo99bo$3o104b3o97b3o97b3o97b3o7$18bo106bo99bo99bo99bo$18b
3o104b3o97b3o97b3o97b3o$21bo106bo99bo99bo99bo$20bobo104bobo97bobo97bob
o97bobo$20bobo104bobo97bobo97bobo97bobo$21bo106bo99bo99bo99bo10$16b2o
105b2o98b2o98b2o98b2o$15bobo104bobo97bobo97bobo97bobo$15bo106bo99bo99b
o99bo$14b2o7b2o96b2o7b2o89b2o7b2o89b2o7b2o89b2o7b2o$23b2o105b2o98b2o
98b2o98b2o2$31b2obo103b2obo96b2obo96b2obo96b2obo$31b2ob3o101b2ob3o94b
2ob3o94b2ob3o94b2ob3o$37bo106bo99bo99bo99bo$31b2ob3o101b2ob3o94b2ob3o
94b2ob3o94b2ob3o$32bobo104bobo97bobo97bobo97bobo$32bobo104bobo97bobo
97bobo97bobo$33bo106bo99bo99bo99bo5$20b2o103bob2o103b2obo$21bo101b3ob
2o103b2ob3o$18b3o101bo115bo$18bo104b3ob2o103b2ob3o91b2o$125bobo105bobo
93b2o$125bobo105bobo194b2o$126bo107bo195b2o!
Syringe is the 1rst result on the 2nd row ;)

You can notice that LightCone doesn't find the external Block of Syringe.
It's not the first time I encounter this case.

One more thing, I can't get the Snark and Syringe to work with a Block as transparent SL.
Here is the transparent Block catalyst I used :

Code: Select all

# Block
[[catalyst]]
rle = "2o$2o!"
recovery-range = [4, 80]
transparent = true

Post-scriptum :
On the Snark.toml file, change the filter by this one (red cells around the Block)

Code: Select all

[[filter]]
filter-gen = 130
filter-pos = [-4, 1]
filter-type = 'EXACT'
filter = '4D$D2CD$D2CD$4D!'
and you will get only the Snark as result ;)

Great work Image LightCone is very powerful.



Edit:
Here is the output of my bash script, this gives a look on the performance (my machine is old and busy) :

Code: Select all

$ lightcone Snark.toml
lun.12 at 18:24:30  =>  Loading parameters …
lun.12 at 18:24:36  =>  Searching …
    11 results   -   User entry: any
lun.12 at 18:24:46  =>  End of search.

Results :
    Total    :  11
    Dropped  :  0
    Saved    :  11 in 1 file(s)

Time statistics :
    Loading  :  6s
    Searching:  10s
    Total    :  16s
$
Alone we go faster … Together we go further …
Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ

mvr
Posts: 132
Joined: November 8th, 2009, 4:58 am

Re: Lightcone

Post by mvr » May 13th, 2025, 5:23 am

max-stationary-count relaxes that stationary cell constraint, so max-stationary-count = 4 would allow a block to be left as junk.

For the snark, oops, there was a bug that was throwing away configurations where the block recovers briefly, like it does in the snark (for a single generation). This input file now finds it:

Code: Select all

first-active-range = [92, 93]
active-window-range = [0, 60]

min-stable-time = 10

max-transparent = 1

pattern-center = [25, 25]
pattern = """
x = 50, y = 50, rule = LifeHistory
.A$2.A$3A2$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.
46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B
$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.
46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B
$4.46B$4.46B!
"""

# Block
[[catalyst]]
rle = "2o$2o!"
recovery-range = [4, 80]
transparent = true

# Eater 1
[[catalyst]]
rle = "2b2o$bobo$bo$2o!"
recovery-range = [ 2, 10,]
required = "2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D!"
approaches = [ "2.3DC$2.3DC$2.2A2D$.ADA2D$.A4D$2A!",]
forbidden = [ "4.3D$4.DC3D$4.DCDCD$4.D2C2D$2.2A4D$.A.A$.A$2A!", "5.3D$4.2DCD$4.DC3D$4.D3CD$2.2A5D$.A.A$.A$2A!",]

# Heart of the Snark
[[catalyst]]
rle = "8bo$4b2obobo$3bobobobo$o2bobobobob2o$4ob2o2bo2bo$4bo4b2o$2bobo$2b2o!"
recovery-range = [4, 10]
required = "9.2D$9.C2D$5.2A.ADCD$3D.A.A.ADC4D$DC2DADADCDCD2CD$D4CD2C2DC2DCD$5DC4D2C3D$2.DCDCD2.4D$2.D2C2D$2.4D!"
approaches = [ "2.D3C3D$.3DC4D$.7DA$.3D2ADA.A$.2DADADA.A$A2DADA.A.A.2A$4A.2A2.A2.A$4.A4.2A$2.A.A$2.2A!", ]
For the syringe, the Bloom filter is the reason that you're not getting the version that uses the block. The eater version interacts earlier than the block version, so takes priority. If you disable the Bloom filter you get a LOT more results, but indeed the block version is in there.

User avatar
Tawal
Posts: 849
Joined: October 8th, 2023, 7:20 am
Location: Mælar

Re: Lightcone

Post by Tawal » May 14th, 2025, 12:35 pm

Thanks for your clear explanations.
What about the 'filter-range' parameter ?

I hope I'm not being insistent or boring, but I do have one more request to make :
Is it possible to have a OR filter ?
I mean by this something like this :

Code: Select all

[[filter]]
filter-bool = OR
filter-gen = 150
filter-pos = [x1, y1]
filter-type = 'EXACT'
filter = 'rle1 here'

[[filter]]
filter-bool = OR
filter-gen = 150
filter-pos = [x2, y2]
filter-type = 'EXACT
filter = 'rel2 here'
Actually, if there is 2 '[[filter]]' parameters, a AND is applied.
Alone we go faster … Together we go further …
Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ

mvr
Posts: 132
Joined: November 8th, 2009, 4:58 am

Re: Lightcone

Post by mvr » May 15th, 2025, 1:45 am

Could you post a file using filter-range that isn't working?

Also, what sort of searches do you want the OR filter for? I can add a facility like that in, but I'm still thinking about the least confusing way to set it up. How about something like filter-mode = "ALL" vs filter-mode = "ANY" before you list any filters?

User avatar
Tawal
Posts: 849
Joined: October 8th, 2023, 7:20 am
Location: Mælar

Re: Lightcone

Post by Tawal » May 15th, 2025, 3:57 am

Here is an example where the filter-range parameter doesn't seem to be working.
I use Snark.toml :

Code: Select all

first-active-range = [101, 102]
active-window-range = [0, 60]

min-stable-time = 40

max-catalysts = 3

pattern-center = [25, 25]
pattern = """
x = 50, y = 50, rule = LifeHistory
.A8.40B$2.A7.40B$3A7.40B$10.40B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$
4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.
46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.18B2A26B$4.18B2A26B$4.46B$4.46B$
4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.
46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B$4.46B!
"""

# Filter
[[filter]]
filter-range = [100, 140]
filter-pos = [-4, 1]
filter-type = 'EVER'
filter = '4D$D2CD$D2CD$4D!'

# Eater 1
[[catalyst]]
rle = "2b2o$bobo$bo$2o!"
recovery-range = [ 2, 10,]
required = "2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D!"
approaches = [ "2.3DC$2.3DC$2.2A2D$.ADA2D$.A4D$2A!",]
forbidden = [ "4.3D$4.DC3D$4.DCDCD$4.D2C2D$2.2A4D$.A.A$.A$2A!", "5.3D$4.2DCD$4.DC3D$4.D3CD$2.2A5D$.A.A$.A$2A!",]

# Heart of the Snark
[[catalyst]]
rle = "8bo$4b2obobo$3bobobobo$o2bobobobob2o$4ob2o2bo2bo$4bo4b2o$2bobo$2b2o!"
recovery-range = [4, 10]
required = "9.2D$9.C2D$5.2A.ADCD$3D.A.A.ADC4D$DC2DADADCDCD2CD$D4CD2C2DC2DCD$5DC4D2C3D$2.DCDCD2.4D$2.D2C2D$2.4D!"
approaches = [ "2.D3C3D$.3DC4D$.7DA$.3D2ADA.A$.2DADADA.A$A2DADA.A.A.2A$4A.2A2.A2.A$4.A4.2A$2.A.A$2.2A!", ]
The results :

Code: Select all

x = 441, y = 383, rule = Life
bo106bo99bo99bo99bo$2bo106bo99bo99bo99bo$3o104b3o97b3o97b3o97b3o9$236b
2o$236bo$234bobo$234b2o99bo99bo$333b3o97b3o$28bo303bo99bo$26b3o303b2o
98b2o$25bo$25b2o412b2o$439bo$437bobo$437b2o4$17b2o105b2o10b2o86b2o10b
2o86b2o11b2o85b2o$16bobo3b2o99bobo3b2o5bobo84bobo3b2o5bobo84bobo3b2o6b
obo83bobo3b2o$16bo5b2o99bo5b2o7bo84bo5b2o7bo84bo5b2o8bo83bo5b2o$15b2o
105b2o14b2o82b2o14b2o82b2o15b2o81b2o36$bo106bo99bo99bo99bo$2bo106bo99b
o99bo99bo$3o104b3o97b3o97b3o97b3o12$28bo$26b3o$25bo109bo99bo99bo99bo$
25b2o106b3o97b3o97b3o97b3o$132bo99bo99bo99bo$132b2o98b2o98b2o98b2o$33b
2o$34bo$34bob2o$32b3o2bo$31bo3b2o$31b4o$17b2o15bo287b2o98b2o$16bobo3b
2o7b3o95b2o98b2o90bobo5b2o90bobo5b2o$16bo5b2o6bo98b2o88b2o8b2o90bo7b2o
90bo7b2o$15b2o14b5o184bo99b2o98b2o$35bo96b2o83b3o12b2o$33bo98bo84bo14b
o94b2o103b2o$33b2o98b3o97b3o92bo103bo$135bo99bo89b3o105b3o$325bo109bo
36$bo106bo99bo99bo99bo$2bo106bo99bo99bo99bo$3o104b3o97b3o97b3o97b3o12$
235bo99bo99bo$233b3o97b3o97b3o$28bo203bo99bo99bo$26b3o203b2o98b2o98b2o
$25bo$25b2o7$15b2o106b2o10b2o86b2o10b2o85b2o11b2o98b2o$14bobo5b2o98bob
o4b2o4bobo84bobo4b2o4bobo83bobo5b2o4bobo91b2o4bobo$14bo7b2o98bo6b2o6bo
84bo6b2o6bo83bo7b2o6bo91b2o6bo$13b2o106b2o14b2o82b2o14b2o81b2o15b2o98b
2o2$27bo$23b2obobo$22bobobobo$19bo2bobobobob2o$19b4ob2o2bo2bo$23bo4b2o
$21bobo$21b2o36$bo106bo99bo99bo99bo$2bo106bo99bo99bo99bo$3o104b3o97b3o
97b3o97b3o12$28bo$26b3o108b2o98b2o98b2o$25bo111bo99bo99bo$25b2o108bobo
97bobo97bobo$135b2o98b2o98b2o$437b2o$12b2o202b2o219bo$12bo204bo217bobo
$9b2obo204bobo215b2o$9bo2b3o203b2o$10b2o3bo$12b4o$12bo15b2o105b2o98b2o
98b2o86b2o$13b3o6b2o4bobo98b2o4bobo91b2o4bobo91b2o4bobo84bobo4b2o$16bo
5b2o6bo98b2o6bo91b2o6bo91b2o6bo84bo6b2o$11b5o14b2o105b2o98b2o77b2o19b
2o82b2o$11bo303bobo$13bo301bo116b2o$12b2o300b2o116bo$433b3o$435bo36$bo
106bo99bo99bo99bo$2bo106bo99bo99bo99bo$3o104b3o97b3o97b3o97b3o17$30b2o
105b2o98b2o98b2o98b2o$30bo106bo99bo99bo99bo$28bobo104bobo97bobo97bobo
97bobo$28b2o105b2o98b2o98b2o98b2o3$418b2o$15b2o105b2o293bobo$14bobo5b
2o97bobo5b2o98b2o98b2o86bo11b2o$14bo7b2o97bo7b2o98b2o98b2o85b2o11b2o$
13b2o105b2o$335b2o98b2o$20b2o110b2o98b2o101bobo97bobo$21bo110bo99bo
104bo99bo$18b3o112b3o97b3o101b2o98b2o$18bo116bo99bo36$bo106bo$2bo106bo
$3o104b3o14$7b2o$8bo$8bobo$9b2o19b2o105b2o$30bo106bo$28bobo104bobo$28b
2o105b2o5$22b2o105b2o$22b2o105b2o2$28b2o89b2o14b2o$28bobo89bo14bobo$
30bo86b3o17bo$30b2o85bo19b2o!
(Edit : On the second result 1rst row, it seems that a Block appears at gen.126 without died cells around, so the filter doesn't care about the red cells.)

The OR filter search would be to start with an well known evolutionary sequence (HF,P…) and check for some different SL and placement that could act as bit bait.
Example to be clear.
Launch a search in a single shot to get a Boat in 2 different orientation and placement :

Code: Select all

x = 40, y = 46, rule = LifeHistory
5$2.2A26B$A.3BA26B$2.4BA21B3D2B$A5BA20BD3BDB$.6A19BD5BD$.25BD5BD$3.
23BD5BD$27.D2B2E$28.2DEBE$31.E21$2.2A22B$A4BA22B$2.4BA21B3D$A5BA20BD
3BD$.6A19BD3BEBD$6.20BD2BEBED$6.19B.D2B2EBD$27.D3BD$28.3D!
Actually, I have to launch a search on each orientation/placement of the Boat.
OK, it's a bad example as I'am pretty sure there's no solutions.

Edit : Missing answer.
About your proposition for a 'general' filter-mode parameter, I think it's better than mine.
And as you say, this will avoid some confusing if AND and OR appears in different filter.
So OK for a filter-mode parameter.
Thanks a lot.
Alone we go faster … Together we go further …
Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ

mvr
Posts: 132
Joined: November 8th, 2009, 4:58 am

Re: Lightcone

Post by mvr » May 15th, 2025, 10:01 am

OK: I fixed the filter-range parameter, which is intended to be used with filter-type = 'EXACT'. Right now, filter-type = 'EVER' always ignores filter-gen and filter-range. Maybe I should change that name?

I also added filter-mode = 'ANY'.

User avatar
Tawal
Posts: 849
Joined: October 8th, 2023, 7:20 am
Location: Mælar

Re: Lightcone

Post by Tawal » May 15th, 2025, 2:09 pm

Thanks you very much.
What a reactivity !

I made some fast tests and it seems to be working.
I use Snark.toml and add an impossible filter.
Then I tried the two possibilities of the filter-mode parameter.
With the value 'ANY', I got the Snark as result.
With the value 'ALL', I got nothing.

To be more sure, I ran this file :

Code: Select all

first-active-range = [76, 84]
active-window-range = [0, 40]

min-stable-time = 20

max-catalysts = 5

use-bloom-filter = true

filter-mode = 'ANY'

pattern-center = [20, 20]
pattern = """
x = 40, y = 40, rule = LifeHistory
.A4.34B$2.A3.34B$3A3.34B$6.34B$6.34B$6.34B$6.34B$6.34B$6.34B$6.34B$
40B$40B$40B$40B$40B$40B$40B$21B2A17B$21B2A17B$40B$40B$40B$40B$40B$40B
$40B$40B$40B$40B$40B$40B$40B$40B$40B$40B$40B$40B$40B$40B$40B!
"""


[[filter]]
filter-gen = 130
filter-pos = [0, -4]
filter-type = 'EXACT'
filter = '4D$D2CD$D2CD$4D!'

[[filter]]
filter-gen = 130
filter-pos = [2, -3]
filter-type = 'EXACT'
filter = '4D$D2CD$D2CD$4D!'


[[catalyst]]
rle = "2b2o$bobo$bo$2o!"
recovery-range = [ 2, 10,]
required = "2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D!"
approaches = [ "2.3DC$2.3DC$2.2A2D$.ADA2D$.A4D$2A!",]
forbidden = [ "4.3D$4.DC3D$4.DCDCD$4.D2C2D$2.2A4D$.A.A$.A$2A!", "5.3D$4.2DCD$4.DC3D$4.D3CD$2.2A5D$.A.A$.A$2A!",]
summary = "3.2A$2.A.A$2.A$.2A16$2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D14$3.3DC$3.3DC$3.2A2D$2.ADA2D$2.A4D$.2A13$5.3D18.3D$5.DC3D15.2DCD$5.DCDCD15.DC3D$5.D2C2D15.D3CD$3.2A4D14.2A5D$2.A.A17.A.A$2.A19.A$.2A18.2A!"
soup = "6b2obobo$6b2ob4o$7b2o3b2o$6b2o5bo$6bo3bob2o$10b4o$6b3obo2bo$6b3ob2obo3$2b2o$bobo$bo$2o!"

[[catalyst]]
rle = "2b2o$bobo$bo$2o!"
recovery-range = [ 1, 1,]
required = "2.4D$.2D2CD$.DCDCD$2DC3D$D2CD$.3D!"
approaches = [ "4.2A$3.A.A$3DA$2D2A$C3D$C3D$3.D!",]
forbidden = [ "7.2A$6.A.A$.3D2.A$.DC2D2A$3DCD$D3CD$5D!", "7.2A$6.A.A$6.A$.4D2A$2D2CD$DCDCD$3DCD$2.3D!", "7.2A$6.A.A$6.A$5D2A$D3CD$3DCD$.DC2D$.3D!",]
summary = "7.2A$6.A.A$6.A$5.2A16$6.4D$5.2D2CD$5.DCDCD$4.2DC3D$4.D2CD$5.3D16$7.2A$6.A.A$3.3DA$3.2D2A$3.C3D$3.C3D$6.D14$7.2A18.2A18.2A$6.A.A17.A.A17.A.A$.3D2.A19.A19.A$.DC2D2A14.4D2A13.5D2A$3DCD15.2D2CD15.D3CD$D3CD15.DCDCD15.3DCD$5D15.3DCD16.DC2D$22.3D16.3D!"
soup = "12b2o$11bobo$11bo$5bobo2b2o$3bobo2$4o2bo$2o3b2o$2obob2o$2b3ob2o$bobo!"

[[catalyst]]
rle = "2o$2o!"
recovery-range = [ 2, 14,]
required = "4D$D2CD$.2A!"
approaches = [ "2D2A2D$2D2A2D$6D$.2DC2D!", "2D2A2D$2D2A2D$6D$2DC2D!",]
forbidden = [ "2.2A$2.2A$.3D$2DCD$D2C2D$DCDCD$5D!", ".2A$.2A$.3D$2DCD$D2C2D$DCDCD$5D!", "2.2A$2.2A$.3D$.DC2D$2D2CD$DCDCD$5D!", ".2A$.2A$.3D$.DC2D$2D2CD$DCDCD$5D!",]
summary = "2.2A$2.2A18$.4D$.D2CD$2.2A19$2D2A2D14.2D2A2D$2D2A2D14.2D2A2D$6D14.6D$.2DC2D14.2DC2D17$2.2A18.2A18.2A18.2A$2.2A18.2A18.2A18.2A$.3D18.3D16.3D18.3D$2DCD17.2DCD16.DC2D17.DC2D$D2C2D16.D2C2D14.2D2CD16.2D2CD$DCDCD16.DCDCD14.DCDCD16.DCDCD$5D16.5D14.5D16.5D!"
soup = "2o$2o5$obo$2bobo2$bo2b4o$b2o3b2o$b2obob2o$2ob3o$4bobo!"


[[catalyst]]
rle = "bo$obo$bo!"
recovery-range = [ 3, 3,]
required = ".2D$.C2D$ADCD$.C2D$.2D!"
approaches = [ "4D$3DA$CDADA$C2DA$C3D$2.2D!",]
summary = "3.A$2.A.A$3.A17$3.2D$3.C2D$2.ADCD$3.C2D$3.2D16$4D$3DA$CDADA$C2DA$C3D$2.2D!"
soup = "2b3o$ob3o$bo2bo$3obobo$bo$2b2o2b2o$b4o$bo5bo3$14bo$13bobo$14bo!"

[[catalyst]]
rle = "bo$obo$bo!"
recovery-range = [ 3, 7,]
required = ".2D$2DC$DCDA$2DC$.2D!"
approaches = [ ".A3D$ADA2D$.A2DC$.3DC$.D!",]
forbidden = [ ".A$A.A5D$.A.D3CD$3.DC3D$3.2DCD$4.3D!", ".A2.3D$A.A2DCD$.A.DC3D$3.D3CD$3.5D!", ".A$A.A4D$.A.D2C2D$3.DCDCD$3.DC3D$3.3D!",]
summary = "2.A$.A.A$2.A17$.2D$2DC$DCDA$2DC$.2D17$2.A3D$.ADA2D$2.A2DC$2.3DC$2.D16$2.A19.A2.3D14.A$.A.A5D12.A.A2DCD13.A.A4D$2.A.D3CD13.A.DC3D13.A.D2C2D$4.DC3D15.D3CD15.DCDCD$4.2DCD16.5D15.DC3D$5.3D36.3D!"
soup = "bo$obo$bo7$9bo2b2o$7b2ob3obo$7bob4obo$7bob3o$8bo2b4o$9b5o$7b2o2b2obo$9b3o2bo!"

[[catalyst]]
rle = "bo$obo$bo!"
recovery-range = [ 1, 4,]
required = ".2D$2DCD$DCDCD$2DC2D$.3D!"
approaches = [ ".2D$.3DC$.A2DC$ADA2D$.A3D!",]
forbidden = [ "3.5D$3.D3CD$.A.DC3D$A.A2DCD$.A2.3D!", "3.3D$3.DC3D$3.DCDCD$.A.D2C2D$A.A4D$.A!", "4.3D$3.2DCD$3.DC3D$.A.D3CD$A.A5D$.A!",]
summary = "2.A$.A.A$2.A17$.2D$2DCD$DCDCD$2DC2D$.3D15$2.2D$2.3DC$2.A2DC$.ADA2D$2.A3D15$24.3D18.3D$4.5D15.DC3D15.2DCD$4.D3CD15.DCDCD15.DC3D$2.A.DC3D13.A.D2C2D13.A.D3CD$.A.A2DCD13.A.A4D13.A.A5D$2.A2.3D14.A19.A!"
soup = "4b2obob2o$3bo3b2o$3b3ob3o$4b7o$4b3obobo$3bob2obobo$4bo2bobo$4b3o2bo6$bo$obo$bo!"

# Heart of Snark
[[catalyst]]
rle = "8bo$4b2obobo$3bobobobo$o2bobobobob2o$4ob2o2bo2bo$4bo4b2o$2bobo$2b2o!"
recovery-range = [4, 10]
required = "9.2D$9.C2D$5.2A.ADCD$3D.A.A.ADC4D$DC2DADADCDCD2CD$D4CD2C2DC2DCD$5DC4D2C3D$2.DCDCD2.4D$2.D2C2D$2.4D!"
approaches = [ "2.D3C3D$.3DC4D$.7DA$.3D2ADA.A$.2DADADA.A$A2DADA.A.A.2A$4A.2A2.A2.A$4.A4.2A$2.A.A$2.2A!", ]
It's a G+Block to HF with Eater1, Block, Tub and Heart of Snark as list of catalyst.
I hoped to find Snark [same Block location] and CP_semi_Snark [Block shifted by (2,1)] … I got them 8)
Results :

Code: Select all

x = 245, y = 27, rule = Life
bo111bo99bo$2bo111bo99bo$3o109b3o97b3o6$18b2o115bo93bo$18b2o113b3o92bo
bo$132bo96bo$132b2o$27bo$26bobo$27bo112b2o98b2o$141bo99bo$141bob2o96bo
b2o$21b2o110b2o4b3o2bo88b2o4b3o2bo$21b2o110b2o3bo3b2o89b2o3bo3b2o$138b
4o96b4o$28b2o94b2o15bo82b2o15bo$28bobo92bobo12b3o82bobo12b3o$30bo92bo
13bo85bo13bo$15b2o13b2o90b2o14b5o79b2o14b5o$16bo125bo99bo$13b3o5b2o
117bo99bo$13bo7b2o117b2o98b2o!
You really made a great work Image

Edit:
About, the filter-range parameter, it works fine with one filter, I didn't test it with more.

Edit2:
I tested 2 filters with filter-range parameter.
It works fine :)
I tried with this file (always G+Block=HF and hope Snark and CP_semi_Snark) :

Code: Select all

first-active-range = [76, 84]
active-window-range = [0, 40]

min-stable-time = 20

max-catalysts = 5

use-bloom-filter = true

filter-mode = 'ANY'

pattern-center = [20, 20]
pattern = """
x = 40, y = 40, rule = LifeHistory
.A4.34B$2.A3.34B$3A3.34B$6.34B$6.34B$6.34B$6.34B$6.34B$6.34B$6.34B$
40B$40B$40B$40B$40B$40B$40B$21B2A17B$21B2A17B$40B$40B$40B$40B$40B$40B
$40B$40B$40B$40B$40B$40B$40B$40B$40B$40B$40B$40B$40B$40B$40B!
"""


[[filter]]
filter-range = [95,100]
#filter-gen = 120
filter-pos = [0, -4]
filter-type = 'EXACT'
filter = '4D$D2CD$D2CD$4D!'

[[filter]]
filter-range = [115,120]
#filter-gen = 120
filter-pos = [2, -3]
filter-type = 'EXACT'
filter = '4D$D2CD$D2CD$4D!'


[[catalyst]]
rle = "2b2o$bobo$bo$2o!"
recovery-range = [ 2, 10,]
required = "2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D!"
approaches = [ "2.3DC$2.3DC$2.2A2D$.ADA2D$.A4D$2A!",]
forbidden = [ "4.3D$4.DC3D$4.DCDCD$4.D2C2D$2.2A4D$.A.A$.A$2A!", "5.3D$4.2DCD$4.DC3D$4.D3CD$2.2A5D$.A.A$.A$2A!",]
summary = "3.2A$2.A.A$2.A$.2A16$2.2D$.2DCA$.DCDC$2DC2D$D2CD$4D14$3.3DC$3.3DC$3.2A2D$2.ADA2D$2.A4D$.2A13$5.3D18.3D$5.DC3D15.2DCD$5.DCDCD15.DC3D$5.D2C2D15.D3CD$3.2A4D14.2A5D$2.A.A17.A.A$2.A19.A$.2A18.2A!"
soup = "6b2obobo$6b2ob4o$7b2o3b2o$6b2o5bo$6bo3bob2o$10b4o$6b3obo2bo$6b3ob2obo3$2b2o$bobo$bo$2o!"

[[catalyst]]
rle = "2b2o$bobo$bo$2o!"
recovery-range = [ 1, 1,]
required = "2.4D$.2D2CD$.DCDCD$2DC3D$D2CD$.3D!"
approaches = [ "4.2A$3.A.A$3DA$2D2A$C3D$C3D$3.D!",]
forbidden = [ "7.2A$6.A.A$.3D2.A$.DC2D2A$3DCD$D3CD$5D!", "7.2A$6.A.A$6.A$.4D2A$2D2CD$DCDCD$3DCD$2.3D!", "7.2A$6.A.A$6.A$5D2A$D3CD$3DCD$.DC2D$.3D!",]
summary = "7.2A$6.A.A$6.A$5.2A16$6.4D$5.2D2CD$5.DCDCD$4.2DC3D$4.D2CD$5.3D16$7.2A$6.A.A$3.3DA$3.2D2A$3.C3D$3.C3D$6.D14$7.2A18.2A18.2A$6.A.A17.A.A17.A.A$.3D2.A19.A19.A$.DC2D2A14.4D2A13.5D2A$3DCD15.2D2CD15.D3CD$D3CD15.DCDCD15.3DCD$5D15.3DCD16.DC2D$22.3D16.3D!"
soup = "12b2o$11bobo$11bo$5bobo2b2o$3bobo2$4o2bo$2o3b2o$2obob2o$2b3ob2o$bobo!"

[[catalyst]]
rle = "2o$2o!"
recovery-range = [ 2, 14,]
required = "4D$D2CD$.2A!"
approaches = [ "2D2A2D$2D2A2D$6D$.2DC2D!", "2D2A2D$2D2A2D$6D$2DC2D!",]
forbidden = [ "2.2A$2.2A$.3D$2DCD$D2C2D$DCDCD$5D!", ".2A$.2A$.3D$2DCD$D2C2D$DCDCD$5D!", "2.2A$2.2A$.3D$.DC2D$2D2CD$DCDCD$5D!", ".2A$.2A$.3D$.DC2D$2D2CD$DCDCD$5D!",]
summary = "2.2A$2.2A18$.4D$.D2CD$2.2A19$2D2A2D14.2D2A2D$2D2A2D14.2D2A2D$6D14.6D$.2DC2D14.2DC2D17$2.2A18.2A18.2A18.2A$2.2A18.2A18.2A18.2A$.3D18.3D16.3D18.3D$2DCD17.2DCD16.DC2D17.DC2D$D2C2D16.D2C2D14.2D2CD16.2D2CD$DCDCD16.DCDCD14.DCDCD16.DCDCD$5D16.5D14.5D16.5D!"
soup = "2o$2o5$obo$2bobo2$bo2b4o$b2o3b2o$b2obob2o$2ob3o$4bobo!"


[[catalyst]]
rle = "bo$obo$bo!"
recovery-range = [ 3, 3,]
required = ".2D$.C2D$ADCD$.C2D$.2D!"
approaches = [ "4D$3DA$CDADA$C2DA$C3D$2.2D!",]
summary = "3.A$2.A.A$3.A17$3.2D$3.C2D$2.ADCD$3.C2D$3.2D16$4D$3DA$CDADA$C2DA$C3D$2.2D!"
soup = "2b3o$ob3o$bo2bo$3obobo$bo$2b2o2b2o$b4o$bo5bo3$14bo$13bobo$14bo!"

[[catalyst]]
rle = "bo$obo$bo!"
recovery-range = [ 3, 7,]
required = ".2D$2DC$DCDA$2DC$.2D!"
approaches = [ ".A3D$ADA2D$.A2DC$.3DC$.D!",]
forbidden = [ ".A$A.A5D$.A.D3CD$3.DC3D$3.2DCD$4.3D!", ".A2.3D$A.A2DCD$.A.DC3D$3.D3CD$3.5D!", ".A$A.A4D$.A.D2C2D$3.DCDCD$3.DC3D$3.3D!",]
summary = "2.A$.A.A$2.A17$.2D$2DC$DCDA$2DC$.2D17$2.A3D$.ADA2D$2.A2DC$2.3DC$2.D16$2.A19.A2.3D14.A$.A.A5D12.A.A2DCD13.A.A4D$2.A.D3CD13.A.DC3D13.A.D2C2D$4.DC3D15.D3CD15.DCDCD$4.2DCD16.5D15.DC3D$5.3D36.3D!"
soup = "bo$obo$bo7$9bo2b2o$7b2ob3obo$7bob4obo$7bob3o$8bo2b4o$9b5o$7b2o2b2obo$9b3o2bo!"

[[catalyst]]
rle = "bo$obo$bo!"
recovery-range = [ 1, 4,]
required = ".2D$2DCD$DCDCD$2DC2D$.3D!"
approaches = [ ".2D$.3DC$.A2DC$ADA2D$.A3D!",]
forbidden = [ "3.5D$3.D3CD$.A.DC3D$A.A2DCD$.A2.3D!", "3.3D$3.DC3D$3.DCDCD$.A.D2C2D$A.A4D$.A!", "4.3D$3.2DCD$3.DC3D$.A.D3CD$A.A5D$.A!",]
summary = "2.A$.A.A$2.A17$.2D$2DCD$DCDCD$2DC2D$.3D15$2.2D$2.3DC$2.A2DC$.ADA2D$2.A3D15$24.3D18.3D$4.5D15.DC3D15.2DCD$4.D3CD15.DCDCD15.DC3D$2.A.DC3D13.A.D2C2D13.A.D3CD$.A.A2DCD13.A.A4D13.A.A5D$2.A2.3D14.A19.A!"
soup = "4b2obob2o$3bo3b2o$3b3ob3o$4b7o$4b3obobo$3bob2obobo$4bo2bobo$4b3o2bo6$bo$obo$bo!"

# Heart of Snark
[[catalyst]]
rle = "8bo$4b2obobo$3bobobobo$o2bobobobob2o$4ob2o2bo2bo$4bo4b2o$2bobo$2b2o!"
recovery-range = [4, 10]
required = "9.2D$9.C2D$5.2A.ADCD$3D.A.A.ADC4D$DC2DADADCDCD2CD$D4CD2C2DC2DCD$5DC4D2C3D$2.DCDCD2.4D$2.D2C2D$2.4D!"
approaches = [ "2.D3C3D$.3DC4D$.7DA$.3D2ADA.A$.2DADADA.A$A2DADA.A.A.2A$4A.2A2.A2.A$4.A4.2A$2.A.A$2.2A!", ]
And I got the same results as shown above.

Big Up to you Image
Alone we go faster … Together we go further …
Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ

User avatar
Tawal
Posts: 849
Joined: October 8th, 2023, 7:20 am
Location: Mælar

Re: Lightcone

Post by Tawal » June 16th, 2025, 12:34 pm

First, an idea for an improvement that might be easy to implement:
If I understand the bloom-filter correctly, it acts as soon as a catalyst produces the same reaction.
Perhaps it would be useful to retain the catalyst with the smallest bounding box.
Ok, I also understand that it won't be possible to modify the 1st result, but it would be nice to keep(replace by) the smallest for the rest of the search.

Next, I'm thinking about catalyst welding.
I think your idea of defining catalysts by their active cells is a very good one.
According to a “welding-area” (parameter) and a maximum number of active cells/catalysts in it, run a CompleteStillLife like Barrister.
And/or first try whole catalysts (no welding required).
To do this, introduce the LifeBellman rule to retain the possibility zone.
Basically, this would be a Barrister with active cell pre-proposals.
Alone we go faster … Together we go further …
Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ

User avatar
Tawal
Posts: 849
Joined: October 8th, 2023, 7:20 am
Location: Mælar

Re: Lightcone

Post by Tawal » June 18th, 2025, 8:17 am

Here is some more composed catalysts for LightCone :

Code: Select all

# Eater1 + Tub
[[catalyst]]
rle = "2bo$bobo$2bo4$2o$o$b3o$3bo!"
recovery-range = [3, 5]
required = "4.D$3.C2D$2.ADCD$3.C2D$4.D3$.ACD$DC4D$2D3CD$.3DCD$3.3D!"
approach = ".3DA$C2DA.A$.C2DA$.C2D$2C2D$.3D$2.2A$2.A$3.3A$5.A!"
summary = "4.A$3.A.A$4.A4$2.2A$2.A$3.3A$5.A20$5.D$4.C2D$3.ADCD$4.C2D$5.D3$2.ACD$.DC4D$.2D3CD$2.3DCD$4.3D20$.3DA$C2DA.A$.C2DA$.C2D$2C2D$.3D$2.2A$2.A$3.3A$5.A!"

# Eater1 + Block + Hive (trans)
[[catalyst]]
rle = "o$3o$3bo$2b2o2$5bo$4bobo5b2o$4bobo5b2o$5bo!"
recovery-range = [12, 18]
required = "3D$DC3D$D3C2D$4DCD$2.DCAD2$6.A7.2D$5.A.A5.ACD$5.A.A5.ACD$6.A7.2D!"
approach = "A$3A$3.A$2.2A2$5.A$4.ADA5.2A$4.ADA5.2A$4.DAD$4.4D$4.D3C$4.C2.C!"
summary = ".A$.3A$4.A$3.2A2$6.A$5.A.A5.2A$5.A.A5.2A$6.A21$3D$DC3D$D3C2D$4DCD$2.DCAD2$6.A7.2D$5.A.A5.ACD$5.A.A5.ACD$6.A7.2D22$.A$.3A$4.A$3.2A2$6.A$5.ADA5.2A$5.ADA5.2A$5.DAD$5.4D$5.D3C$5.C2.C!"

# Double Tub
[[catalyst]]
rle = "5bo$bo2bobo$obo2bo$bo!"
recovery-range = [4, 6]
required = "5.3D$.2D3.C2D$2DC2.ADCD$DCDA2.A.D$2DC$.2D!"
approach = "5.A$.A2.ADA$ADA2DAD$.A6D$5.3C!"
summary = "6.A$2.A2.A.A$.A.A2.A$2.A16$5.3D$.2D3.C2D$2DC2.ADCD$DCDA2.A.D$2DC$.2D16$6.A$2.A2.ADA$.ADA2DAD$2.A6D$6.3C!"

# Eater1 + Hive (trans) = Glider
[[catalyst]]
rle = "7bo$6bobo$6bobo$7bo$2b2o$bobo$bo$2o!"
recovery-range = [25, 35]
required = "8.A$7.A.A$7.A.A$2.3D3.A$.2DCA$.DCDC$2DC2D$D2CD$4D!"
approach = "4.3C$4.5D$5.2DAD$6.ADA$6.ADA$7.A$2.2A$.A.A$.A$2A!"
summary = "8.A$7.A.A$7.A.A$8.A$3.2A$2.A.A$2.A$.2A23$8.A$7.A.A$7.A.A$2.3D3.A$.2DCA$.DCDC$2DC2D$D2CD$4D20$5.3C$5.5D$6.2DAD$7.ADA$7.ADA$8.A$3.2A$2.A.A$2.A$.2A!"

# Block + Hive (trans)
[[catalyst]]
rle = "2o$2o4$bo$obo$obo$bo!"
recovery-range = [23, 30]
required = "4D$D2CD$.2A4$2.A$.A.A$.A.A$2.A!"
approach = "2A$2A4$.A$A.A2DC$A.ADC$.A.2DC!"
summary = ".2A$.2A4$2.A$.A.A$.A.A$2.A21$4D$D2CD$.2A4$2.A$.A.A$.A.A$2.A22$.2A$.2A4$2.A$.A.A2DC$.A.ADC$2.A.2DC!"
Summary's Catalysts :

Code: Select all

x = 168, y = 72, rule = LifeHistory
4.A37.A44.A41.A32.2A$3.A.A36.3A38.A2.A.A39.A.A31.2A$4.A40.A36.A.A2.A
40.A.A$44.2A37.A45.A$124.2A$47.A75.A.A37.A$2.2A42.A.A5.2A67.A38.A.A$
2.A43.A.A5.2A66.2A38.A.A$3.3A41.A115.A$5.A10$86.3D$82.2D3.C2D$81.2DC
2.ADCD$81.DCDA2.A.D$81.2DC$82.2D5$5.D35.3D117.4D$4.C2D34.DC3D83.A31.D
2CD$3.ADCD34.D3C2D81.A.A31.2A$4.C2D34.4DCD81.A.A$5.D37.DCAD76.3D3.A$
122.2DCA$47.A7.2D65.DCDC37.A$2.ACD41.A.A5.ACD64.2DC2D36.A.A$.DC4D39.A
.A5.ACD64.D2CD37.A.A$.2D3CD40.A7.2D64.4D38.A$2.3DCD$4.3D80.A$83.A2.AD
A$82.ADA2DAD$83.A6D$87.3C14$126.3C$126.5D$.3DA37.A84.2DAD31.2A$C2DA.A
36.3A83.ADA31.2A$.C2DA40.A82.ADA$.C2D40.2A83.A$2C2D120.2A$.3D43.A75.A
.A37.A$2.2A42.ADA5.2A67.A38.A.A2DC$2.A43.ADA5.2A66.2A38.A.ADC$3.3A40.
DAD114.A.2DC$5.A40.4D$46.D3C$46.C2.C!
Edit:
Add the summaries.
Alone we go faster … Together we go further …
Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ

mvr
Posts: 132
Joined: November 8th, 2009, 4:58 am

Re: Lightcone

Post by mvr » June 20th, 2025, 5:55 am

Tawal wrote:
June 16th, 2025, 12:34 pm
If I understand the bloom-filter correctly, it acts as soon as a catalyst produces the same reaction.
Perhaps it would be useful to retain the catalyst with the smallest bounding box.
Unfortunately, I don't immediately see a way to store these alternative placements without taking up too much memory. The benefit of the Bloom filter is that it can "remember" a huge number of configurations in a relatively small amount of space.
Tawal wrote:
June 16th, 2025, 12:34 pm
Next, I'm thinking about catalyst welding.
I spent some time working on a welding version of LightCone, I might get back to it eventually. I got stuck between two problems: If you are generous with how close you can place catalysts and leave the welding to the end, you spend most of your time searching configurations that are actually impossible to weld. But doing it in advance for every relative position of two catalysts takes forever. There's a reasonable middle ground of doing bits of it as you go, but that would take some more effort to implement.

User avatar
Tawal
Posts: 849
Joined: October 8th, 2023, 7:20 am
Location: Mælar

Re: Lightcone

Post by Tawal » August 6th, 2025, 6:52 pm

I ran on a matter with one of your catalysts.
This one :

Code: Select all

x = 50, y = 64, rule = LifeHistory
.2A$.2A3.A$5.A.A$6.A16$2D.D$DCA$DCA3.A$2D.D.A.AD$4.D.C2D$5.3D14$5.D$
5.2D2C$.2A2.4D$.2A2.DA2D$5.ADA2D$6.A13$6.3D18.3D17.3D$6.DC3D15.2DCD
15.3DCD$6.DCDCD15.DC3D14.DCDCD$6.D2C2D15.D3CD14.2D2CD$.2A3.4D11.2A3.
5D10.2A3.4D$.2A3.A14.2A3.A14.2A3.A$5.A.A17.A.A17.A.A$6.A19.A19.A!
Running this input file :

Code: Select all

first-active-range = [80, 280]
active-window-range = [0, 50]

min-stable-time = 20
use-bloom-filter = true

pattern-center = [30, 30]
pattern = """
x = 60, y = 60, rule = LifeHistory
60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$60B$
60B$60B$60B$60B$60B$60B$60B$60B$60B$13BA46B$12BABA45B$12BABA45B$13BA
46B$60B$60B$60B$3B2A55B$4BA55B$4BABA53B$5B2A53B$60B$2A58B$BA58B$BABA
56B$2B2A56B$60B$60B$60B$60B$60B$60B$2BA57B$2BABA55B$2B3A55B$4BA55B$
60B$60B$60B$60B$16B2A42B$16BA43B$17B3A40B$19BA40B!
"""

[[filter]]
filter-type = 'EXACT'
filter-gen = 330
filter-pos = [-31, -5]
filter = '13.3D$12.2DC2D$12.DCDCD$12.DCDCD$12.2DC2D$13.3D2$3.4D$3.D2CD$3.2DC3D$4.DCDCD$4.2D2CD$4D.4D$D2CD$2DC3D$.DCDCD$.2D2CD$2.4D13$16.4D$16.D2CD$16.DC4D$16.2D3CD$17.3DCD$19.3D!'

# List of catalysts below …
…
I get this result :

Code: Select all

x = 24, y = 41, rule = Life
22b2o$22b2o3$21bo$20bobo$21bo$13bo$12bobo$12bobo$13bo4$3b2o$4bo$4bobo$
5b2o2$2o$bo$bobo$2b2o7$2bo$2bobo$2b3o$4bo5$16b2o$16bo$17b3o$19bo!
As you can see, the catalyst never recovers.
I'm taking a look on the "approach" parameter (i.e. third row) because I'm thinking the matter come from that.
But as my search isn't finished, I prefer let it run rather than making some tests within this problematic catalyst.

Here is the catalyst definition (Block + Tub) :

Code: Select all

[[catalyst]]
rle = "2o$2o3bo$4bobo$5bo!"
recovery-range = [ 7, 7,]
required = "2D.D$DCA$DCA3.A$2D.D.A.AD$4.D.C2D$5.3D!"
approaches = [ "4.D$4.2D2C$2A2.4D$2A2.DA2D$4.ADA2D$5.A!",]
forbidden = [ "5.3D$5.DC3D$5.DCDCD$5.D2C2D$2A3.4D$2A3.A$4.A.A$5.A!", "6.3D$5.2DCD$5.DC3D$5.D3CD$2A3.5D$2A3.A$4.A.A$5.A!", "6.3D$4.3DCD$4.DCDCD$4.2D2CD$2A3.4D$2A3.A$4.A.A$5.A!",]
summary = ".2A$.2A3.A$5.A.A$6.A16$2D.D$DCA$DCA3.A$2D.D.A.AD$4.D.C2D$5.3D14$5.D$5.2D2C$.2A2.4D$.2A2.DA2D$5.ADA2D$6.A13$6.3D18.3D17.3D$6.DC3D15.2DCD15.3DCD$6.DCDCD15.DC3D14.DCDCD$6.D2C2D15.D3CD14.2D2CD$.2A3.4D11.2A3.5D10.2A3.4D$.2A3.A14.2A3.A14.2A3.A$5.A.A17.A.A17.A.A$6.A19.A19.A!"
soup = "5b2obob2o$4bo3b2o$4b3ob3o$5b7o$5b3obobo$4bob2obobo$5bo2bobo$5b3o2bo9$2o$2o3bo$4bobo$5bo!"
Wow, I read my post before posting it.
And I see this on the catalyst definition :

Code: Select all

recovery-range = [ 7, 7,]
May be the mistake is here ?
May be you'll answer before my search will be finished, who knows :)
Alone we go faster … Together we go further …
Avatar's pattern
My Sandbox
Bom-Bom
ℝ - ℕ = ℝ or ℕ ⊄ ℝ

User avatar
synperiplanar
Posts: 243
Joined: February 22nd, 2023, 4:01 pm
Location: Haha sometimes

Re: Lightcone

Post by synperiplanar » May 8th, 2026, 11:48 am

is it possible to make two-separate-stage catalysts?
for example, these:

Code: Select all

x = 17, y = 27, rule = B3/S23
15b2o$15bo$2bo$14b2o$b2o10bo2bo$b2o11b2o4$15bo$15bo$16bo$2bo$14b2o$b2o
10bo2bo$b2o11b2o6$15b2o$2b2o11bo2$bo12b2o$obo10bobo$bo12bo!
i think they're common enough to be potentially useful.
edit: also Lightcone can be ported to INT with relative ease just like CatForce, right?
the call of the p33 edge blinker factory has still not been answered... please im getting desperate you can even just use glider guns

NNlk05
Posts: 108
Joined: January 14th, 2026, 8:42 pm
Contact:

Re: Lightcone

Post by NNlk05 » May 22nd, 2026, 8:46 pm

Anyone have a big list of catalysts like the ones in CatForce?
lk050807's new account
viewtopic.php?f=11&t=6190

Doing nothin' I guess.
=3

mvr
Posts: 132
Joined: November 8th, 2009, 4:58 am

Re: Lightcone

Post by mvr » May 23rd, 2026, 6:56 am

There's a big list in examples/herschel.toml. If you add your own you can skip the "summary" and "soup" parameters, they're just for documentation.

User avatar
Anivec
Posts: 1926
Joined: January 28th, 2022, 7:18 pm
Location: Somewhere I Belong

Re: Lightcone

Post by Anivec » May 26th, 2026, 7:33 am

What is required to run "cmake ."?

mvr
Posts: 132
Joined: November 8th, 2009, 4:58 am

Re: Lightcone

Post by mvr » May 26th, 2026, 8:23 am

https://cmake.org/, though you should probably install it via a package manager if you can.

User avatar
Anivec
Posts: 1926
Joined: January 28th, 2022, 7:18 pm
Location: Somewhere I Belong

Re: Lightcone

Post by Anivec » May 26th, 2026, 8:43 am

Is the command different for MacOS?

mvr
Posts: 132
Joined: November 8th, 2009, 4:58 am

Re: Lightcone

Post by mvr » May 26th, 2026, 9:15 am

I'm on MacOS, and it works for me. I installed cmake via Homebrew: "brew install cmake".

User avatar
Anivec
Posts: 1926
Joined: January 28th, 2022, 7:18 pm
Location: Somewhere I Belong

Re: Lightcone

Post by Anivec » May 26th, 2026, 10:39 am

mvr wrote:
May 26th, 2026, 9:15 am
I'm on MacOS, and it works for me. I installed cmake via Homebrew: "brew install cmake".
How do you install Homebrew then?

NNlk05
Posts: 108
Joined: January 14th, 2026, 8:42 pm
Contact:

Re: Lightcone

Post by NNlk05 » May 26th, 2026, 10:49 am

Anivec wrote:
May 26th, 2026, 10:39 am
mvr wrote:
May 26th, 2026, 9:15 am
I'm on MacOS, and it works for me. I installed cmake via Homebrew: "brew install cmake".
How do you install Homebrew then?
Welp... I told you on Discord...
Can you please wait until I get home, look in your server.
lk050807's new account
viewtopic.php?f=11&t=6190

Doing nothin' I guess.
=3

User avatar
Anivec
Posts: 1926
Joined: January 28th, 2022, 7:18 pm
Location: Somewhere I Belong

Re: Lightcone

Post by Anivec » May 26th, 2026, 11:01 am

mvr wrote:
May 26th, 2026, 9:15 am
I'm on MacOS, and it works for me. I installed cmake via Homebrew: "brew install cmake".
I successfully installed cmake but cannot run "./Lightcone".

Code: Select all

zsh: no such file or directory: ./Lightcone

NNlk05
Posts: 108
Joined: January 14th, 2026, 8:42 pm
Contact:

Re: Lightcone

Post by NNlk05 » May 26th, 2026, 11:13 am

Anivec wrote:
May 26th, 2026, 11:01 am
mvr wrote:
May 26th, 2026, 9:15 am
I'm on MacOS, and it works for me. I installed cmake via Homebrew: "brew install cmake".
I successfully installed cmake but cannot run "./Lightcone".

Code: Select all

zsh: no such file or directory: ./Lightcone
You have to build it after cmaking it

Code: Select all

cmake --build build
lk050807's new account
viewtopic.php?f=11&t=6190

Doing nothin' I guess.
=3

User avatar
Anivec
Posts: 1926
Joined: January 28th, 2022, 7:18 pm
Location: Somewhere I Belong

Re: Lightcone

Post by Anivec » May 26th, 2026, 11:47 am

NNlk05 wrote:
May 26th, 2026, 11:13 am


You have to build it after cmaking it

Code: Select all

cmake --build build
I can't run that. It's invalid.

Code: Select all

/lightcone/build is not a directory

Post Reply