Skip to content

Instantly share code, notes, and snippets.

@EZLiang
Last active January 6, 2020 21:10
Show Gist options
  • Save EZLiang/b7d13667435cdf3229d10ccd0a1f0744 to your computer and use it in GitHub Desktop.
Save EZLiang/b7d13667435cdf3229d10ccd0a1f0744 to your computer and use it in GitHub Desktop.
A circuit rule generator from any generations rule
transitions = {
"0": "00000000",
"1c": "01000000", "1e": "10000000",
"2c": "01010000", "2e": "10100000", "2k": "10010000", "2a": "11000000", "2i": "10001000", "2n": "01000100",
"3c": "01010100", "3e": "10101000", "3k": "10100100", "3a": "11100000", "3i": "01110000", "3n": "11010000", "3y": "10010100", "3q": "11000100", "3j": "11000010", "3r": "11001000",
"4c": "01010101", "4e": "10101010", "4k": "11010010", "4a": "11110000", "4i": "11011000", "4n": "11000101", "4y": "11010100", "4q": "11100100", "4j": "11010100", "4r": "11101000", "4t": "11001001", "4w": "11011000", "4z": "11001100",
"5c": "10101011", "5e": "11010101", "5k": "11010110", "5a": "11110001", "5i": "11111000", "5n": "11101001", "5y": "11011010", "5q": "11101100", "5j": "11110100", "5r": "11011100",
"6c": "11111010", "6e": "11110101", "6k": "10111101", "6a": "11111100", "6i": "11011101", "6n": "11101110",
"7c": "11111110", "7e": "01111111",
"8": "11111111"
}
def parse(string):
s = string.replace("1", "|1").replace("2", "|2").replace("3", "|3").replace("4", "|4").replace("5", "|5").replace("5", "|5").replace("7", "|7").replace("8", "|8").split("|")
while s[0] == "":
del s[0]
st = []
for i in s:
n = i[0]
t = i.split("")
del t[0]
if t == []:
for j in transitions.keys():
if j[0] == str(n):
st.append(f"{j}")
elif t[0] == "-":
del t[0]
a = []
ts = []
for j in transitions.keys():
if j[0] == str(n):
ts.append(j[1])
for j in ts:
if not (i in t):
a.append(f"{n}{j}")
else:
for j in t:
st.append(f"{n}{j}")
return st
def generate(string):
b = string.split("/")[1]
s = string.split("/")[0]
c = int(string.split("/")[2])
result = ""
result += f"@RULE Wire_B{b}_S{s}_C{c}\n**********************************\n* RULE AUTOGENERATED BY GEN2WIRE *\n**********************************\n\n@TABLE\nn_states: {c + 1}\nneighborhood: Moore\nsymmetries: rotate4reflect\n\n"
var_dead = "0,1"
for i in range(3, c + 1):
var_dead += ","
var_dead += str(i)
for i in range(8):
result += f"var dead.{i} = {"{" + var_dead + "}"}\n"
for i in range(8):
result += f"var any.{i} = {"{1," + var_dead + "}"}\n"
result += "\n"
b = b.replace("1", "|1").replace("2", "|2").replace("3", "|3").replace("4", "|4").replace("5", "|5").replace("5", "|5").replace("7", "|7").replace("8", "|8").split("|")
s = s.replace("1", "|1").replace("2", "|2").replace("3", "|3").replace("4", "|4").replace("5", "|5").replace("5", "|5").replace("7", "|7").replace("8", "|8").split("|")
while b[0] == "":
del b[0]
while s[0] == "":
del s[0]
bt = parse(b)
st = parse(s)
for i in bt:
j = 0
t = transitions[i].replace("1", "2").split("")
for i in range(8):
if t[i] == "0":
t[i] = f"dead.{j}"
j += 1
result += f"1,{",".join(t)},2\n"
for i in st:
j = 0
t = transitions[i].replace("1", "2").split("")
for i in range(8):
if t[i] == "0":
t[i] = f"dead.{j}"
j += 1
result += f"2,{",".join(t)},2\n"
result += "2,any.0,any.1,any.2,any.3,any.4,any.5,any.6,any.7,3\n"
result += f"{c},any.0,any.1,any.2,any.3,any.4,any.5,any.6,any.7,1\n"
for i in range(3, c):
result += f"{i},any.0,any.1,any.2,any.3,any.4,any.5,any.6,any.7,{i + 1}\n"
result += f"\n@COLORS\n0 48 48 48\n0 128 255 255 255 255\n"
return result
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment