I found a rule using a variant of the Gaussian-weighted neighbourhood supporting an oblique (20, 8)c/32 spaceship.
In some close variants of the rule, the oblique spaceship also becomes a rake.
The neighbourhood weights are as follows:
1 2 2 2 1
2 5 6 5 2
2 6 9 6 2
2 5 6 5 2
1 2 2 2 1
It is simulated with
https://conwaylife.com/forums/viewtopic.php?f=9&t=4391.
Oblique (20, 8)c/32 Spaceship
Code: Select all
x = 46, y = 34, rule = Rule_4
46.$46.$46.$46.$46.$46.$46.$46.$27.A.D.A14.$23.H.HACDFDCA13.$22.H3.HDI2GDF13.$19.G.2H3.2H.HG.HFCA10.$20.F2.I7.HFDA11.$18.3F9.HF2B12.$18.E10.HCIB13.$15.D.CFGE.2E6.CA14.$16.C.2F2.FGE5.A15.$14.AC.D5.F.2H19.$13.ACA6.HI.H.I18.$9.I4.A7.2HGH20.$8.I.I10.F.E22.$9.I12.E23.$20.CE.F22.$19.CEC24.$20.C25.$46.$46.$46.$46.$46.$46.$46.$46.$46.1$!
Diagonal 4c/14 Spaceship
Code: Select all
x = 46, y = 41, rule = Rule_4
46.$46.$26.A19.$25.A20.$24.A2.H18.$21.2DC2DH.H17.$20.E.D2.D.H18.$17.A.F.2D.C21.$16.A.G.F.GE22.$15.2AH3F25.$13.EADH.H2.G24.$13.EDFG2H27.$11.2EDE.H2.I26.$11.ADE32.$10.ADF33.$9.2AHGH32.$8.A.H.H33.$9.GF2H33.$8.F.F2.I32.$7.E.2F35.$6.D.D2.G34.$6.3DG36.$6.C2.E36.$5.AD.C37.$4.A.2D38.$3.A2.H39.$5.H.H38.$6.H39.$46.$46.$46.$46.$46.$46.$46.$46.$46.$46.$46.$46.$46.1$!
Diagonal 2c/6 Spaceship
Code: Select all
x = 16, y = 17, rule = Rule_4
16.$16.$16.$16.$5.C10.$4.CEC9.$2.ABIBAI8.$4.F.I.I7.$3.FHE.2H7.$4.FE10.$16.$16.$16.$16.$16.$16.$16.1$!
Diagonal 2c/2 Spaceship
Code: Select all
x = 32, y = 32, rule = Rule_4
32.$32.$32.$32.$32.$32.$32.$12.A19.$12.CA.B16.$12.C.B.C15.$8.A2C.C.2B.D14.$9.A2.2IE.B.E13.$10.2BE.E.2D.F12.$9.B.B4.G.D.G11.$10.C.BDG.G.2F.H10.$11.D.D4.I.F.I9.$12.E.DFI.I.2H10.$13.F.F6.H9.$14.G.FH14.$15.H.H14.$16.I.H13.$32.$32.$32.$32.$32.$32.$32.$32.$32.$32.$32.1$!
Orthogonal 4c/4 Spaceship
Code: Select all
x = 26, y = 23, rule = Rule_4
26.$26.$26.$26.$26.$26.$6.D.C.H.G13.$7.DECAHIGF11.$4.AB.CEFCGI.G11.$7.B2E2F2I12.$5.A2C2D2G2H12.$5.ACD.EGHEI2.I9.$5.ACA.FGED2.IH9.$6.A.F.E3.I11.$26.$26.$26.$26.$26.$26.$26.$26.$26.1$!
P234 Oscillator
Code: Select all
x = 56, y = 41, rule = Rule_4
56.$56.$56.$56.$56.$56.$56.$56.$23.A32.$23.CB.C29.$5.I.H15.EDA30.$6.H15.EAIAI29.$4.FH.I13.EGI.I30.$3.FHF13.GIFECI17.A13.$4.F15.G.CEC14.B.AC13.$23.C14.C.B.C13.$37.D.2B.AE12.$36.D.D.ECEGE11.$35.F.2D.H.GE12.$34.FDFE3.G14.$34.2EBA2.G.H13.$34.D.AGCI16.$31.D.C2GD19.$32.C2.EF19.$30.AC.D22.$29.ACA24.$30.A25.$32.HI22.$28.2H3.H22.$27.3H2.H23.$31.I24.$56.$56.$56.$56.$56.$56.$56.$56.$56.$56.1$!
Python Transition Function (See the thread above for more information)
Code: Select all
rule_table_string = """
0,0,0,0,0,0,1,0,0,3,0,2,9,0,0,0,0,3,0,0,0,0,0,1,1,5,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2,2,2,2,2,1,2,1,1,3,2,2,6,2,1,2,2,1,2,2,1,2,2,2,3,2,2,2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,2,9,2,9,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3
4,4,4,4,4,4,4,4,4,4,4,4,1,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,6,6,4,6,4,4,4,4,4,4,4,4,4,4,4,4
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,1,1,1,5,5,5,5,1,5,5,5,5,5,9,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
6,6,6,6,6,6,6,6,6,6,6,2,6,6,6,6,6,6,6,6,6,1,6,6,6,6,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
7,7,7,7,7,7,7,7,7,7,7,7,7,1,7,1,3,7,7,5,7,7,7,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,4,7,7,7,7,7,7,7,7,7,1,7,1,7,7,2,7,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,8,5,4,8,8,8,8,8,5,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
9,9,9,9,9,9,9,9,9,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9
0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"""
lst = []
rule_table = []
for i in rule_table_string.split("\n")[1:]:
lst = []
for j in i.split(",")[:-1]:
lst.append(int(j))
rule_table.append(lst)
# Information about the Rule (Must be filled)
n_states = len(rule_table) # Number of States
alternating_period = 1 # For alternating rules / neighbourhoods
colour_palette = None # Colours of the different states
rule_name = "Rule_4" # Rule Name
# Neighbourhood of the Rule (Relative Distance from Central Cell)
def get_neighbourhood(generation): # Note (y, x) not (x, y)
return [(2, -2), (2, -1), (2, 0), (2, 1), (2, 2),
(1, -2), (1, -1), (1, 0), (1, 1), (1, 2),
(0, -2), (0, -1), (0, 0), (0, 1), (0, 2),
(-1, -2), (-1, -1), (-1, 0), (-1, 1), (-1, 2),
(-2, -2), (-2, -1), (-2, 0), (-2, 1), (-2, 2)]
# Transition Function of Rule, Last Element of Neighbours is the Central Cell
def transition_func(neighbours, generation):
n = 0
weights = [1, 2, 2, 2, 1,
2, 5, 6, 5, 2,
2, 6, 9, 6, 2,
2, 5, 6, 5, 2,
1, 2, 2, 2, 1]
state_weights = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
for i in range(len(neighbours) - 1):
n += weights[i] * state_weights[neighbours[i]]
try:
if n >= 0:
return rule_table[neighbours[-1]][n]
else:
return 0
except IndexError:
return 0
# Does the next state of the cell depend on its neighbours?
# If yes, return next state
# If no, return -1
def depend_on_neighbours(state, generation):
return -1
In this variant,
Code: Select all
rule_table_string = """
0,0,0,0,0,0,1,0,0,3,0,2,9,0,0,0,0,3,0,0,0,0,0,1,1,5,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
2,2,2,2,2,1,2,1,1,3,2,2,6,2,1,2,2,1,2,2,1,2,2,2,3,2,2,2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,2,9,2,9,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3
4,4,4,4,4,4,4,4,2,4,4,4,1,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,6,6,4,6,4,4,4,4,4,4,4,4,4,4,4,4
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,1,1,1,5,5,5,5,1,5,5,5,5,5,9,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5
6,6,6,6,6,6,6,6,6,6,6,2,6,6,6,6,6,6,6,6,6,1,6,6,6,6,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,1,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6
7,7,7,7,7,7,7,7,7,7,7,7,7,1,7,1,3,7,7,5,7,7,7,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,4,7,7,7,7,7,7,7,7,7,1,7,1,7,7,2,7,2,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,5,8,5,4,8,8,8,8,8,5,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
9,9,9,9,9,9,9,9,9,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9
0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"""
lst = []
rule_table = []
for i in rule_table_string.split("\n")[1:]:
lst = []
for j in i.split(",")[:-1]:
lst.append(int(j))
rule_table.append(lst)
# Information about the Rule (Must be filled)
n_states = len(rule_table) # Number of States
alternating_period = 1 # For alternating rules / neighbourhoods
colour_palette = None # Colours of the different states
rule_name = "Rule_4" # Rule Name
# Neighbourhood of the Rule (Relative Distance from Central Cell)
def get_neighbourhood(generation): # Note (y, x) not (x, y)
return [(2, -2), (2, -1), (2, 0), (2, 1), (2, 2),
(1, -2), (1, -1), (1, 0), (1, 1), (1, 2),
(0, -2), (0, -1), (0, 0), (0, 1), (0, 2),
(-1, -2), (-1, -1), (-1, 0), (-1, 1), (-1, 2),
(-2, -2), (-2, -1), (-2, 0), (-2, 1), (-2, 2)]
# Transition Function of Rule, Last Element of Neighbours is the Central Cell
def transition_func(neighbours, generation):
n = 0
weights = [1, 2, 2, 2, 1,
2, 5, 6, 5, 2,
2, 6, 9, 6, 2,
2, 5, 6, 5, 2,
1, 2, 2, 2, 1]
state_weights = [0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
for i in range(len(neighbours) - 1):
n += weights[i] * state_weights[neighbours[i]]
try:
if n >= 0:
return rule_table[neighbours[-1]][n]
else:
return 0
except IndexError:
return 0
# Does the next state of the cell depend on its neighbours?
# If yes, return next state
# If no, return -1
def depend_on_neighbours(state, generation):
return -1
There is also a P76 gun but no P234 oscillator. All other pattern mentioned above still exist.
Code: Select all
x = 49, y = 31, rule = Rule_4
26.G22.$25.GIG21.$25.IG22.$24.I24.$23.I25.$49.$14.A.E32.$13.B.EGE31.$12.BDA.D.D30.$13.B2.G32.$14.A.G32.$16.G32.$49.$10.FE11.EF24.$9.FHE.HG5.2H.EHF23.$10.F.I.I5.I.I.F24.$8.ABIBAI7.IABIBA2.I19.$10.CEC9.CEC4.I19.$11.C11.C7.CD16.$28.2F.CFD15.$28.GIG.D16.$29.G.C17.$30.ACA16.$31.A17.$49.$49.$49.$49.$49.$49.$49.1$!
P8
Code: Select all
x = 52, y = 30, rule = Rule_4
52.$52.$52.$52.$52.$52.$52.$52.$52.$52.$37.D2.C11.$38.BAB11.$38.2AD11.$37.CBD12.$52.$10.2H.2H37.$9.DAC2.AD36.$9.DAIAIAD36.$11.3I38.$52.$52.$52.$52.$52.$52.$52.$52.$52.$52.$52.1$!
If spaceships of such exotic directions can be found in this rule, does that mean they can be found in the Gaussian Weighted Neighbourhood?

- spaceship.gif (508.03 KiB) Viewed 6959 times