I made 2 scripts which would allow the exploration of 3-state 1D margolus rules in Golly:
1. This script generates a ruletable like
this one, It can be run in shell or Golly.
Type a rulestring using a simple notation: For each 2-cell configuration, type what it becomes using 2 numbers without separators, type a comma, then type what the next configuration becomes in the same way. The order for initial configurations are 00,01,02,10,11,12,20,21,22.
Example: tommyaweosme's rule would be encoded as "00,12,10,01,20,21,02,11,22".
You can choose to generate a true 1D rule or a 2D emulation.
Code: Select all
def gen1dmargtable(rulestring):
transitions = [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]]
x = 0
y = 0
for char in rulestring:
if char == ' ':
pass
elif char == ',':
x = 0
y += 1
else:
transitions[y][x] = int(char)
x += 1
if __name__ == '__main__':
emulation = input("True 1D or emulation by 2D (1D/2D)? ").upper() == "2D"
else:
emulation = golly.getstring("True 1D or emulation by 2D (1D/2D)? ", "1D").upper() == "2D"
if emulation:
temp = "0,%s,%s,0,0,0,0,0,%s,%s\n"
else:
temp = "%s,%s,%s,%s\n"
table = """@RULE 1dmargtest
@TABLE
n_states:6
neighborhood:%s
symmetries:none
var a = {0,1,2,3,4,5}
var b = {1,2,3,4,5}
""" % ("Moore" if emulation else "oneDimensional")
for n in range(9):
table += temp % (n // 3, 'a', n % 3 + 3, transitions[n][0] + 3)
if n % 3 == 2:
table += temp % (n // 3, 'a', 'b', transitions[n-2][0] + 3)
if n == 2:
table += temp % ('0','b','a',transitions[0][0] + 3)
for n in range(9):
table += temp % (n % 3 + 3, n // 3, 'a', transitions[n][1])
if n >= 6:
table += temp % (n % 3 + 3, 'b', 'a', transitions[n-6][1])
table += """
@COLORS
0 62 62 62
1 220 220 220
2 0 220 0
3 90 90 90
4 255 255 255
5 0 255 0
"""
return table
if __name__ == '__main__':
rulestring = input('Type a rulestring, in the format "xx,xx,xx,xx,xx,xx,xx,xx,xx": ')
print(gen1dmargtable(rulestring))
else:
import golly
rulestring = golly.getstring('Type a rulestring, in the format "xx,xx,xx,xx,xx,xx,xx,xx,xx": ','00,01,02,10,11,12,20,21,22')
try:
f = open(golly.getdir('rules') + "1dmargtest.rule", 'r')
golly.warn("""1dmargtest.rule already exists.
Please rename the file and try again.""")
golly.exit()
except FileNotFoundError:
f = open(golly.getdir('rules') + "1dmargtest.rule", 'w')
f.write(gen1dmargtable(rulestring))
f.close()
golly.setrule('1dmargtest')
2. This script generates a 512x1 3-state margolus soup. It can be run in shell or Golly.
Code: Select all
import random
def gen1dmargsoup():
char = ['.', 'A', 'B', 'C', 'D', 'E']
rle = "x = 512, y = 1, rule = 1dmargtest\n"
for n in range(512):
rle += char[n % 2 * 3 + random.randrange(3)]
return rle
if __name__ == '__main__':
print(gen1dmargsoup())
else:
import golly
golly.setclipstr(gen1dmargsoup())
golly.paste(0,0,"or")
This rulespace turned out to be more interesting than i thought. I've discovered a bunch of interesting rules, which are likely all class 4:
(Note that the ruletables below are all 2D emulation.)
00,21,02,20,00,21,10,12,22 generates adjustable-speed spaceships that interact in complex ways:
Code: Select all
x = 513, y = 1, rule = 1dmargtest
BDBC.EADADBEBDBDACBEAEBC.EAC.DACBDADAEBDADBEACBEADADBEAEACADAEADAEAD.
DBEBDBDAEBDBDBCBEAEBEBCACBCACACACBE.E.DBEACBDBEACBE.EACBCBCAEACAEBCBC
BDACAE.EBCBDADACBCACADAEBEBCBDAEBC.EBDADBEBEBEBEAC.CBEBDADBEACADBEAC.
DBEBCBEACACADBCACBDACBEACAEAEAEACACBCBDAD.EAEAEAEAEACAEACBD.EACBEBCBC
BE.EBDAEACBDBDBEBDBDBEAEAEBEBCADACBCADBEACAC.CACACBCBDACBDAEBDBCBDBEB
DAEBE.CBCBDBC.D.DAEADADBCBEBCBDAEBDBEBDBCBEACBCADBC.DBDAEBDACAEACADBE
AEADBCBCADAEBCBCBCADBDADBDBDBCBCAEBCBEBCBD.DAEADBEBEADBEADADAE.EBCBEA
EBDBDACBEAE.E.EBD.EADBEBEBCAD!
@RULE 1dmargtest
@TABLE
n_states:6
neighborhood:Moore
symmetries:none
var a = {0,1,2,3,4,5}
var b = {1,2,3,4,5}
0,0,a,0,0,0,0,0,3,3
0,0,a,0,0,0,0,0,4,5
0,0,a,0,0,0,0,0,5,3
0,0,a,0,0,0,0,0,b,3
0,0,b,0,0,0,0,0,a,3
0,1,a,0,0,0,0,0,3,5
0,1,a,0,0,0,0,0,4,3
0,1,a,0,0,0,0,0,5,5
0,1,a,0,0,0,0,0,b,5
0,2,a,0,0,0,0,0,3,4
0,2,a,0,0,0,0,0,4,4
0,2,a,0,0,0,0,0,5,5
0,2,a,0,0,0,0,0,b,4
0,3,0,0,0,0,0,0,a,0
0,4,0,0,0,0,0,0,a,1
0,5,0,0,0,0,0,0,a,2
0,3,1,0,0,0,0,0,a,0
0,4,1,0,0,0,0,0,a,0
0,5,1,0,0,0,0,0,a,1
0,3,2,0,0,0,0,0,a,0
0,3,b,0,0,0,0,0,a,0
0,4,2,0,0,0,0,0,a,2
0,4,b,0,0,0,0,0,a,1
0,5,2,0,0,0,0,0,a,2
0,5,b,0,0,0,0,0,a,2
@COLORS
0 62 62 62
1 220 220 220
2 0 220 0
3 90 90 90
4 255 255 255
5 0 255 0
#C [[ ZOOM 1 ]]
00,20,01,02,11,12,10,21,11 has small reflectors and overall complex behavior:
Code: Select all
x = 513, y = 1, rule = 1dmargtest
BDBC.EADADBEBDBDACBEAEBC.EAC.DACBDADAEBDADBEACBEADADBEAEACADAEADAEAD.
DBEBDBDAEBDBDBCBEAEBEBCACBCACACACBE.E.DBEACBDBEACBE.EACBCBCAEACAEBCBC
BDACAE.EBCBDADACBCACADAEBEBCBDAEBC.EBDADBEBEBEBEAC.CBEBDADBEACADBEAC.
DBEBCBEACACADBCACBDACBEACAEAEAEACACBCBDAD.EAEAEAEAEACAEACBD.EACBEBCBC
BE.EBDAEACBDBDBEBDBDBEAEAEBEBCADACBCADBEACAC.CACACBCBDACBDAEBDBCBDBEB
DAEBE.CBCBDBC.D.DAEADADBCBEBCBDAEBDBEBDBCBEACBCADBC.DBDAEBDACAEACADBE
AEADBCBCADAEBCBCBCADBDADBDBDBCBCAEBCBEBCBD.DAEADBEBEADBEADADAE.EBCBEA
EBDBDACBEAE.E.EBD.EADBEBEBCAD!
@RULE 1dmargtest
@TABLE
n_states:6
neighborhood:Moore
symmetries:none
var a = {0,1,2,3,4,5}
var b = {1,2,3,4,5}
0,0,a,0,0,0,0,0,3,3
0,0,a,0,0,0,0,0,4,5
0,0,a,0,0,0,0,0,5,3
0,0,a,0,0,0,0,0,b,3
0,0,b,0,0,0,0,0,a,3
0,1,a,0,0,0,0,0,3,3
0,1,a,0,0,0,0,0,4,4
0,1,a,0,0,0,0,0,5,4
0,1,a,0,0,0,0,0,b,3
0,2,a,0,0,0,0,0,3,4
0,2,a,0,0,0,0,0,4,5
0,2,a,0,0,0,0,0,5,4
0,2,a,0,0,0,0,0,b,4
0,3,0,0,0,0,0,0,a,0
0,4,0,0,0,0,0,0,a,0
0,5,0,0,0,0,0,0,a,1
0,3,1,0,0,0,0,0,a,2
0,4,1,0,0,0,0,0,a,1
0,5,1,0,0,0,0,0,a,2
0,3,2,0,0,0,0,0,a,0
0,3,b,0,0,0,0,0,a,0
0,4,2,0,0,0,0,0,a,1
0,4,b,0,0,0,0,0,a,0
0,5,2,0,0,0,0,0,a,1
0,5,b,0,0,0,0,0,a,1
@COLORS
0 62 62 62
1 220 220 220
2 0 220 0
3 90 90 90
4 255 255 255
5 0 255 0
#C [[ ZOOM 1 ]]
Even though nothing changes every generation except same-color blocks in 11,01,02,10,22,12,20,21,00, it still has complex behavior:
Code: Select all
x = 513, y = 1, rule = 1dmargtest
BDBC.EADADBEBDBDACBEAEBC.EAC.DACBDADAEBDADBEACBEADADBEAEACADAEADAEAD.
DBEBDBDAEBDBDBCBEAEBEBCACBCACACACBE.E.DBEACBDBEACBE.EACBCBCAEACAEBCBC
BDACAE.EBCBDADACBCACADAEBEBCBDAEBC.EBDADBEBEBEBEAC.CBEBDADBEACADBEAC.
DBEBCBEACACADBCACBDACBEACAEAEAEACACBCBDAD.EAEAEAEAEACAEACBD.EACBEBCBC
BE.EBDAEACBDBDBEBDBDBEAEAEBEBCADACBCADBEACAC.CACACBCBDACBDAEBDBCBDBEB
DAEBE.CBCBDBC.D.DAEADADBCBEBCBDAEBDBEBDBCBEACBCADBC.DBDAEBDACAEACADBE
AEADBCBCADAEBCBCBCADBDADBDBDBCBCAEBCBEBCBD.DAEADBEBEADBEADADAE.EBCBEA
EBDBDACBEAE.E.EBD.EADBEBEBCAD!
@RULE 1dmargtest
@TABLE
n_states:6
neighborhood:Moore
symmetries:none
var a = {0,1,2,3,4,5}
var b = {1,2,3,4,5}
0,0,a,0,0,0,0,0,3,4
0,0,a,0,0,0,0,0,4,3
0,0,a,0,0,0,0,0,5,3
0,0,a,0,0,0,0,0,b,4
0,0,b,0,0,0,0,0,a,4
0,1,a,0,0,0,0,0,3,4
0,1,a,0,0,0,0,0,4,5
0,1,a,0,0,0,0,0,5,4
0,1,a,0,0,0,0,0,b,4
0,2,a,0,0,0,0,0,3,5
0,2,a,0,0,0,0,0,4,5
0,2,a,0,0,0,0,0,5,3
0,2,a,0,0,0,0,0,b,5
0,3,0,0,0,0,0,0,a,1
0,4,0,0,0,0,0,0,a,1
0,5,0,0,0,0,0,0,a,2
0,3,1,0,0,0,0,0,a,0
0,4,1,0,0,0,0,0,a,2
0,5,1,0,0,0,0,0,a,2
0,3,2,0,0,0,0,0,a,0
0,3,b,0,0,0,0,0,a,1
0,4,2,0,0,0,0,0,a,1
0,4,b,0,0,0,0,0,a,1
0,5,2,0,0,0,0,0,a,0
0,5,b,0,0,0,0,0,a,2
@COLORS
0 62 62 62
1 220 220 220
2 0 220 0
3 90 90 90
4 255 255 255
5 0 255 0
#C [[ ZOOM 1 ]]
00,12,10,21,02,12,01,21,00 may look explosive at first, but it's still class 4:
Code: Select all
x = 513, y = 1, rule = 1dmargtest
BDBC.EADADBEBDBDACBEAEBC.EAC.DACBDADAEBDADBEACBEADADBEAEACADAEADAEAD.
DBEBDBDAEBDBDBCBEAEBEBCACBCACACACBE.E.DBEACBDBEACBE.EACBCBCAEACAEBCBC
BDACAE.EBCBDADACBCACADAEBEBCBDAEBC.EBDADBEBEBEBEAC.CBEBDADBEACADBEAC.
DBEBCBEACACADBCACBDACBEACAEAEAEACACBCBDAD.EAEAEAEAEACAEACBD.EACBEBCBC
BE.EBDAEACBDBDBEBDBDBEAEAEBEBCADACBCADBEACAC.CACACBCBDACBDAEBDBCBDBEB
DAEBE.CBCBDBC.D.DAEADADBCBEBCBDAEBDBEBDBCBEACBCADBC.DBDAEBDACAEACADBE
AEADBCBCADAEBCBCBCADBDADBDBDBCBCAEBCBEBCBD.DAEADBEBEADBEADADAE.EBCBEA
EBDBDACBEAE.E.EBD.EADBEBEBCAD!
@RULE 1dmargtest
@TABLE
n_states:6
neighborhood:Moore
symmetries:none
var a = {0,1,2,3,4,5}
var b = {1,2,3,4,5}
0,0,a,0,0,0,0,0,3,3
0,0,a,0,0,0,0,0,4,4
0,0,a,0,0,0,0,0,5,4
0,0,a,0,0,0,0,0,b,3
0,0,b,0,0,0,0,0,a,3
0,1,a,0,0,0,0,0,3,5
0,1,a,0,0,0,0,0,4,3
0,1,a,0,0,0,0,0,5,4
0,1,a,0,0,0,0,0,b,5
0,2,a,0,0,0,0,0,3,3
0,2,a,0,0,0,0,0,4,5
0,2,a,0,0,0,0,0,5,3
0,2,a,0,0,0,0,0,b,3
0,3,0,0,0,0,0,0,a,0
0,4,0,0,0,0,0,0,a,2
0,5,0,0,0,0,0,0,a,0
0,3,1,0,0,0,0,0,a,1
0,4,1,0,0,0,0,0,a,2
0,5,1,0,0,0,0,0,a,2
0,3,2,0,0,0,0,0,a,1
0,3,b,0,0,0,0,0,a,0
0,4,2,0,0,0,0,0,a,1
0,4,b,0,0,0,0,0,a,2
0,5,2,0,0,0,0,0,a,0
0,5,b,0,0,0,0,0,a,0
@COLORS
0 62 62 62
1 220 220 220
2 0 220 0
3 90 90 90
4 255 255 255
5 0 255 0
#C [[ ZOOM 1 ]]
00,10,02,01,22,12,20,21,11 is population-conserving, but the behavior seems to be more complex than the aforementioned rules:
Code: Select all
x = 513, y = 1, rule = 1dmargtest
BDBC.EADADBEBDBDACBEAEBC.EAC.DACBDADAEBDADBEACBEADADBEAEACADAEADAEAD.
DBEBDBDAEBDBDBCBEAEBEBCACBCACACACBE.E.DBEACBDBEACBE.EACBCBCAEACAEBCBC
BDACAE.EBCBDADACBCACADAEBEBCBDAEBC.EBDADBEBEBEBEAC.CBEBDADBEACADBEAC.
DBEBCBEACACADBCACBDACBEACAEAEAEACACBCBDAD.EAEAEAEAEACAEACBD.EACBEBCBC
BE.EBDAEACBDBDBEBDBDBEAEAEBEBCADACBCADBEACAC.CACACBCBDACBDAEBDBCBDBEB
DAEBE.CBCBDBC.D.DAEADADBCBEBCBDAEBDBEBDBCBEACBCADBC.DBDAEBDACAEACADBE
AEADBCBCADAEBCBCBCADBDADBDBDBCBCAEBCBEBCBD.DAEADBEBEADBEADADAE.EBCBEA
EBDBDACBEAE.E.EBD.EADBEBEBCAD!
@RULE 1dmargtest
@TABLE
n_states:6
neighborhood:Moore
symmetries:none
var a = {0,1,2,3,4,5}
var b = {1,2,3,4,5}
0,0,a,0,0,0,0,0,3,3
0,0,a,0,0,0,0,0,4,4
0,0,a,0,0,0,0,0,5,3
0,0,a,0,0,0,0,0,b,3
0,0,b,0,0,0,0,0,a,3
0,1,a,0,0,0,0,0,3,3
0,1,a,0,0,0,0,0,4,5
0,1,a,0,0,0,0,0,5,4
0,1,a,0,0,0,0,0,b,3
0,2,a,0,0,0,0,0,3,5
0,2,a,0,0,0,0,0,4,5
0,2,a,0,0,0,0,0,5,4
0,2,a,0,0,0,0,0,b,5
0,3,0,0,0,0,0,0,a,0
0,4,0,0,0,0,0,0,a,0
0,5,0,0,0,0,0,0,a,2
0,3,1,0,0,0,0,0,a,1
0,4,1,0,0,0,0,0,a,2
0,5,1,0,0,0,0,0,a,2
0,3,2,0,0,0,0,0,a,0
0,3,b,0,0,0,0,0,a,0
0,4,2,0,0,0,0,0,a,1
0,4,b,0,0,0,0,0,a,0
0,5,2,0,0,0,0,0,a,1
0,5,b,0,0,0,0,0,a,2
@COLORS
0 62 62 62
1 220 220 220
2 0 220 0
3 90 90 90
4 255 255 255
5 0 255 0
#C [[ ZOOM 1 ]]
00,11,12,10,12,21,22,21,02 is one of the sideways triangles rules, and not explosive:
Code: Select all
x = 513, y = 1, rule = 1dmargtest
BDBC.EADADBEBDBDACBEAEBC.EAC.DACBDADAEBDADBEACBEADADBEAEACADAEADAEAD.
DBEBDBDAEBDBDBCBEAEBEBCACBCACACACBE.E.DBEACBDBEACBE.EACBCBCAEACAEBCBC
BDACAE.EBCBDADACBCACADAEBEBCBDAEBC.EBDADBEBEBEBEAC.CBEBDADBEACADBEAC.
DBEBCBEACACADBCACBDACBEACAEAEAEACACBCBDAD.EAEAEAEAEACAEACBD.EACBEBCBC
BE.EBDAEACBDBDBEBDBDBEAEAEBEBCADACBCADBEACAC.CACACBCBDACBDAEBDBCBDBEB
DAEBE.CBCBDBC.D.DAEADADBCBEBCBDAEBDBEBDBCBEACBCADBC.DBDAEBDACAEACADBE
AEADBCBCADAEBCBCBCADBDADBDBDBCBCAEBCBEBCBD.DAEADBEBEADBEADADAE.EBCBEA
EBDBDACBEAE.E.EBD.EADBEBEBCAD!
@RULE 1dmargtest
@TABLE
n_states:6
neighborhood:Moore
symmetries:none
var a = {0,1,2,3,4,5}
var b = {1,2,3,4,5}
0,0,a,0,0,0,0,0,3,3
0,0,a,0,0,0,0,0,4,4
0,0,a,0,0,0,0,0,5,4
0,0,a,0,0,0,0,0,b,3
0,0,b,0,0,0,0,0,a,3
0,1,a,0,0,0,0,0,3,4
0,1,a,0,0,0,0,0,4,4
0,1,a,0,0,0,0,0,5,5
0,1,a,0,0,0,0,0,b,4
0,2,a,0,0,0,0,0,3,5
0,2,a,0,0,0,0,0,4,5
0,2,a,0,0,0,0,0,5,3
0,2,a,0,0,0,0,0,b,5
0,3,0,0,0,0,0,0,a,0
0,4,0,0,0,0,0,0,a,1
0,5,0,0,0,0,0,0,a,2
0,3,1,0,0,0,0,0,a,0
0,4,1,0,0,0,0,0,a,2
0,5,1,0,0,0,0,0,a,1
0,3,2,0,0,0,0,0,a,2
0,3,b,0,0,0,0,0,a,0
0,4,2,0,0,0,0,0,a,1
0,4,b,0,0,0,0,0,a,1
0,5,2,0,0,0,0,0,a,2
0,5,b,0,0,0,0,0,a,2
@COLORS
0 62 62 62
1 220 220 220
2 0 220 0
3 90 90 90
4 255 255 255
5 0 255 0
#C [[ ZOOM 1 ]]
pipsqueek wrote: April 29th, 2024, 5:10 pm
Also, I propose we dedicate this thread to 1D Margolus rules in general, rather than the one that it was originally suppose to be about. And that we change the thread's name to "1D Margolus rules".
I totally agree. If you look at my last post in here (and this post), you'll see that it says "Re: 1D margolus rules".