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

Jump to navigation Jump to search

# .rule file

```@RULE StateInvestigator
@TABLE
n_states:8
neighborhood:Moore
symmetries:permute
var a={1,2,4,6}
var b={1,2,4,6}
var c={1,2,4,6}
var d={0,1,2,3,4,5,6,7}
var e={0,1,2,3,4,5,6,7}
var f={0,1,2,3,4,5,6,7}
var k={0,1,4,6}
var l={1,4,6}
var m={1,4,6}
var n={1,4,6}
var o={1,4,6}
var p={0,1,4,5,6,7}
var q={0,1,4,5,6,7}
var r={0,1,4,5,6,7}
var s={0,1,4,5,6,7}
var t={2,3,6,7}
var A={0,3,5,7}
var B={0,3,5,7}
var C={0,3,5,7}
var D={0,3,5,7}
var E={0,3,5,7}
var F={0,3,5,7}
var G={0,3,5,7}
var w={0,1,2,3,4,5,6,7}
var x={0,1,2,3,4,5,6,7}
var y={0,1,2,3,4,5,6,7}
var z={0,1,2,3,4,5,6,7}
0, a,b,c,A,B,C,D,E, 1
1, k,A,B,C,D,E,F,G, 0
1, l,m,n,o,p,q,r,s, 0
1, t,x,y,z,d,e,f,w, 0
6, p,q,r,s,w,x,y,z, 7
7, p,q,r,s,w,x,y,z, 6
@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
```

# 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)

States 2-5 never change. States 6-7 always toggle. States 6 and 7 are actually an extension that allow a very strong P4 sparker.

States 0 to 5 of StateInvestigator 100% overlaps with LifeExtendedFancy. 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. It originally only had three states, but it was extended to six, and then extended to eight.

# Some sample objects

Please save the .rule file above, and then copy down the pattern. See this page for the P53 emu gun with one herschel loop based on old conduits, and see this page for the 16 original Herschel conduits, F171, Lx65, R49 and Bx106.

Stable reflectors, syringes and duplicators (click above to open LifeViewer)
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)
G-to-H discovered by Moosey in extendedlifefancy
(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)
B shuttles/hasslers, periods 23, 24, 34, 36, 40, 46, 54, 56, 64, 104 in reading order (gen 2 of B shown) (click above to open LifeViewer)
Period 20, 22, 24, 30, 33, 36, 40, 44, 45, 46 guns
(click above to open LifeViewer)

# StateInvestigator-ExtendedLifeFancy conversion

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")
```