Difference between revisions of "User:Entity Valkyrie 2/StateInvestigator"

Jump to navigation Jump to search

.rule file

```@RULE StateInvestigator
@TABLE
n_states:17
neighborhood:Moore
symmetries:permute
var a1 = {1,2,4,6,8,10,12,15,16}
var a2 = {1,2,4,6,8,10,12,15,16}
var a3 = {1,2,4,6,8,10,12,15,16}
var a4 = {1,2,4,6,8,10,12,15,16}
var b1 = {0,3,5,7,9,11,13}
var b2 = {0,3,5,7,9,11,13}
var b3 = {0,3,5,7,9,11,13}
var b4 = {0,3,5,7,9,11,13}
var b5 = {0,3,5,7,9,11,13}
var b6 = {0,3,5,7,9,11,13}
var b7 = {0,3,5,7,9,11,13}
var c1 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
var c2 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
var c3 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
var c4 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
var c5 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
var c6 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
var c7 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
var c8 = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
var d1 = {2,3,6,7,14,16}
var d2 = {8,9,12,13,14}
var e1 = {1,2,4,6,8,10,12}
var e2 = {1,2,4,6,8,10,12}
var e3 = {1,2,4,6,8,10,12}
0, 1,a1,a2,b1,b2,b3,b4,b5, 1
0, e1,e2,e3,b1,b2,b3,b4,b5, 1
1, c1,b1,b2,b3,b4,b5,b6,b7, 0
1, a1,a2,a3,a4,c1,c2,c3,c4, 0
1, d1,c1,c2,c3,c4,c5,c6,c7, 0
0, d2,c1,c2,c3,c4,c5,c6,c7, 1
6, c1,c2,c3,c4,c5,c6,c7,c8, 7
7, c1,c2,c3,c4,c5,c6,c7,c8, 6
10, c1,c2,c3,c4,c5,c6,c7,c8, 11
11, c1,c2,c3,c4,c5,c6,c7,c8, 10
12, c1,c2,c3,c4,c5,c6,c7,c8, 13
13, c1,c2,c3,c4,c5,c6,c7,c8, 12
@COLORS
1    0  236   91
2    0  192  254
3  254    0    0
4  254  254  254
5   75   75   75
6  254    0  254
7   64    0  128
8  254  230    0
9  150  128    0
10 130  200    0
11   0  120   40
12 254  140    0
13 140   70    0
14   0    0  254
15 192  192  192
16 128  128  128
```

Explanation of the rule

• State 0: off cell (evolves like CGoL) #
• State 1: on cell (evolves like CGoL) #
• State 2: killer on cell (kills any adjacent cell, treated as on considering births of cells) #
• State 3: killer off cell (kills any adjacent cell, treated as off considering births of cells) #
• State 4: eternal on cell #
• State 5: eternal off cell #
• State 6: P2 killer on cell (changes into state 7 in next generation)
• State 7: P2 killer off cell (changes into state 6 in next generation)
• State 8: egg on cell (gives birth to all neighboring cells unless already on, treated as on considering survival of cells) #
• State 9: egg off cell (gives birth to all neighboring cells unless already on, treated as off considering survival of cells) #
• State 10: P2 on cell (changes into state 11 in next generation, not killer, not egg)
• State 11: P2 off cell (changes into state 10 in next generation, not killer, not egg)
• State 12: P2 egg on cell (changes into state 13)
• State 13: P2 egg off cell (changes into state 12)
• State 14: Inverter (inverts all neighboring cells) #
• State 15: Catalyst (like state 4, but it can't give birth to cells alone)
• State 16: Catalyst killer (like state 2, but it can't give birth to cells alone)

States 2-5 never change. States 6-7, 10-11 and 12-13 always toggle.

All states with # are also present in ExtendedLifeFancy.

This rule is really similar to ExtendedLifeFancy. Despite that, StateInvestigator was made totally independent of LifeExtendedFancy when EV2 was searching a rule with multiple states that could allow stable bumpers, bouncers and small and fast syringes.

Versions:

• 2018 Beta (4 states)
• 2019 1.0 (6 states)
• 2019 1.1 (8 states)
• 2020 2.0 (14 states)
• 2020 2.1 (17 states)

Pages (page under construction)

Some pi conduits (click above to open LifeViewer)
Some oscillators on 1-cell-thick state 2 lines
(click above to open LifeViewer)
three P4 sparkers,
P23 and P34 glider shuttles,
extensible P41 oscillator
(click above to open LifeViewer)
45+2n gun collection
(click above to open LifeViewer)
66+8n gun collection
(click above to open LifeViewer)

Period 3-8 strong dot and domino sparkers (click above to open LifeViewer)
lightspeed and (6,0)/7 signals. These signals are interchangeable to vary speed and period.
(click above to open LifeViewer)
Smallest G-to-H known. Repeat time 49.
(click above to open LifeViewer)

StateInvestigator-ExtendedLifeFancy conversion (section outdated)

States 0 to 5 also exist in ExtendedLifeFancy. The only difference are the colors and the fact that states 2 and 4 in StateInvestigator become states 8 and 6 (respectively) in ExtendedLifeFancy. States 6 and 7 can't be converted to ExtendedLifeFancy. Despite the similarity, StateInvestigator was made completely independent of ExtendedLifeFancy.

Scripts (lua, based on invert.lua, only supports states 0 to 5 in StateInvestigator):

```-- StateInvestigator to ExtendedLifeFancy
local g = golly()
local gp = require "gplus"
-- re-assigning inner loop functions results in a 10% speed up
local setcell = g.setcell
local getcell = g.getcell
local r = gp.rect(g.getselrect())
if r.empty then g.exit("There is no selection.") end
-- local t1 = os.clock()
local oldsecs = os.clock()
for row = r.top, r.bottom do
-- if large selection then give some indication of progress
local newsecs = os.clock()
if newsecs - oldsecs >= 1.0 then
oldsecs = newsecs
g.update()
end
for col = r.left, r.right do
if g.getcell(col, row) == 2 then
g.setcell(col, row, 8)
elif g.getcell(col, row) == 4 then
g.setcell(col, row, 6)
elseif g.getcell(col, row) > 5 then
error("Invalid state")
end
end
end
if not r.visible() then g.fitsel() end
-- g.show(""..(os.clock()-t1))
g.setrule("ExtendedLifeFancy")
```
```-- ExtendedLifeFancy to StateInvestigator
local g = golly()
local gp = require "gplus"
-- re-assigning inner loop functions results in a 10% speed up
local setcell = g.setcell
local getcell = g.getcell
local r = gp.rect(g.getselrect())
if r.empty then g.exit("There is no selection.") end
-- local t1 = os.clock()
local oldsecs = os.clock()
for row = r.top, r.bottom do
-- if large selection then give some indication of progress
local newsecs = os.clock()
if newsecs - oldsecs >= 1.0 then
oldsecs = newsecs
g.update()
end
for col = r.left, r.right do
if g.getcell(col, row) == 6 then
g.setcell(col, row, 4)
elseif g.getcell(col, row) == 8 then
g.setcell(col, row, 2)
elseif g.getcell(col, row) > 8 then
error("Invalid state")
elseif g.getcell(col, row) == 7 then
error("Invalid state")
elseif g.getcell(col, row) == 4 then
error("Invalid state")
end
end
end
if not r.visible() then g.fitsel() end
-- g.show(""..(os.clock()-t1))
g.setrule("StateInvestigator")
```