## A Notation for 3-State INT Rules (and a script to turn them into rulefiles)

For discussion of other cellular automata.
Cyclotrons
Posts: 27
Joined: January 26th, 2021, 12:19 am

### A Notation for 3-State INT Rules (and a script to turn them into rulefiles)

I couldn't find a well-described way of notating 3-State Isotropic Not-Totalistic rules, so I made one myself.

---------------------------------------------------------------------

Transitions:

I lifted the notation describing transitions from here. To go over it:
BA... - conditions in which state a is born
BB... - conditions in which state b is born
TA... - conditions in which state a becomes state b
TB... - conditions in which state b becomes state a
SA... - conditions in which state a remains unchanged
SB... - conditions in which state b remains unchanged

BA and BB, TA and SA, and TB and SB can not have the same neighborhood configuration listed in both one and the other, as they contradict each other.
For all combinations of starting state and neighborhoods not specified in a rulestring, the cell will become state 0.
In the rulestring, they are listed as BA/BB/TA/TB/SA/SB.

---------------------------------------------------------------------

Neighborhood Configurations:

Neighborhood configurations are notated as such for a given neighborhood:

ns(ab)

Where n is the total number of live cells in a configuration, s is the hensel notation for the shape of the live cells (as in not distinguishing between the two live states) with the number excluded (the number for the shape is n), a is the hensel notation for the shape of the cells of state a (with the number included), and b is the hensel notation for the shape of the cells of state b (also with the number included).

In this, a and b can not have overlap and, when taken together, must have the shape of ns.

Take this example neighborhood

where blue is state a, red is state b, and the dull yellow is the dead state.
In this notation, this neighborhood configuration is written as 2k(1e1c).

From here on out, I will be referring to the stuff in the parentheses as subconfigurations.

For any subconfigurations that map to the same configuration, they are listed consecutively after their respective configuration letter.
like this: s(ab)(ab)(ab)...

For configurations with the same number of live cells, they and their subconfigurations are listed consecutively after their respective number.
like this: ns(ab)s(ab)s(ab)...

If no subconfiguration is included after a configuration letter, it means that every subconfiguration for that configuration is included.

The same goes for number; if no configuration letter is listed after the number (or subconfiguration in the case of 8, as 8 no configuration letter in hensel notation), it means that every configuration for that number and every subconfiguration for each of those configurations are included.

---------------------------------------------------------------------

Edge Cases:
There are some complicating factors that need to be addressed.

Their are four combinations of configuration and subconfiguration that refer to two neighborhood configurations instead of one. In these cases, brackets containing either a 1 or a 2 are to be placed after the relevant subconfiguration.

Images of these neighborhood configurations, along with how they are notated:

Top: 5q(3q2e)[1]
Bottom: 5q(3q2e)[2]

Top: 5r(3r2c)[1]
Bottom: 5r(3r2c)[2]

Top: 6k(4k2k)[1]
Bottom: 6k(4k2k)[2]

Top: 6a(4a2a)[1]
Bottom: 6a(4a2a)[2]

There are also four combinations of configuration and subconfiguration in which a and b are identical, but you can't get the inverse of a neighborhood configuration (inverse meaning states a and b are switched) by any combination of rotation and reflection. To make it possible to distinguish between a neighborhood configuration and its inverse, a \$ is to be placed after the appropriate configuration within the subconfiguration.

Images of these neighborhood configurations, along with how they are notated. Note that, for this set of images, the bottom neighborhood configuration is the inverse of the top:

Top: 4k(2k2k\$)
Bottom: 4k(2k\$2k)

Top: 4a(2a2a\$)
Bottom: 4a(2a\$2a)

Top: 6c(3r3r\$)
Bottom: 6c(3r\$3r)

Top: 6e(3q3q\$)
Bottom: 6e(3q\$3q)

---------------------------------------------------------------------

Here is an image of every possible neighborhood configuration (technically half; no inverses are included) in this rulespace, organized for use for this notation:

---------------------------------------------------------------------

As promised, I am also including a script for turning a rulestring for this notation into a rulefile:

Code: Select all

``````import string
import os
import golly

rulestring = golly.getstring("Input rulestring:")
longfilename = ""
for c in rulestring:
if c != "/":
longfilename = longfilename + c
else:
longfilename = longfilename + "_"
filename = longfilename[:150]
ruleStruct = [[0,["",["","",None,"00000000","00000000"]]],[1,["c",["1c","0",None,"00000001","00000002"]],["e",["1e","0",None,"00000010","00000020"]]],[2,["c",["2c","0",None,"00000101","00000202"],["1c","1c",None,"00000102","00000201"]],["e",["2e","0",None,"00001010","00002020"],["1e","1e",None,"00001020","00002010"]],["k",["2k","0",None,"00001001","00002002"],["1e","1c",None,"00001002","00002001"]],["a",["2a","0",None,"00000011","00000022"],["1e","1c",None,"00000012","00000021"]],["i",["2i","0",None,"00100010","00200020"],["1e","1e",None,"00100020","00200010"]],["n",["2n","0",None,"00010001","00020002"],["1c","1c",None,"00010002","00020001"]]],[3,["c",["3c","0",None,"00010101","00020202"],["2n","1c",None,"00010201","00020102"],["2c","1c",None,"00010102","00020201"]],["e",["3e","0",None,"00101010","00202020"],["2i","1c",None,"00102010","00201020"],["2e","1e",None,"00101020","00202010"]],["k",["3k","0",None,"00101001","00202002"],["2e","1c",None,"00101002","00202001"],["2k","1e",None,"00102001","00201002"]],["a",["3a","0",None,"00001110","00002220"],["2e","1c",None,"00001210","00002120"],["2a","1e",None,"00001120","00002210"]],["i",["3i","0",None,"00000111","00000222"],["2a","1c",None,"00000112","00000221"],["2c","1e",None,"00000121","00000212"]],["n",["3n","0",None,"00001101","00002202"],["2a","1c",None,"00001102","00002201"],["2k","1c",None,"00001201","00002102"],["2c","1e",None,"00002101","00001202"]],["y",["3y","0",None,"00100101","00200202"],["2k","1c",None,"00100102","00200201"],["2c","1e",None,"00200101","00100202"]],["q",["3q","0",None,"00010011","00020022"],["2a","1c",None,"00020011","00010022"],["2k","1c",None,"00010012","00020021"],["2n","1e",None,"00010021","00020012"]],["j",["3j","0",None,"00001011","00002022"],["2e","1c",None,"00001012","00002021"],["2a","1e",None,"00002011","00001022"],["2k","1e",None,"00001021","00002012"]],["r",["3r","0",None,"00100011","00200022"],["2i","1c",None,"00100012","00200021"],["2a","1e",None,"00200011","00100022"],["2k","1e",None,"00100021","00200012"]]],[4,["c",["4c","0",None,"01010101","02020202"],["3c","1c",None,"01010102","02020201"],["2c","2c",None,"01010202","02020101"],["2n","2n",None,"01020102","02010201"]],["e",["4e","0",None,"10101010","20202020"],["3e","1e",None,"10101020","20202010"],["2e","2e",None,"10102020","20201010"],["2i","2i",None,"10201020","20102010"]],["k",["4k","0",None,"00101101","00202202"],["3j","1c",None,"00101102","00202201"],["3k","1c",None,"00101201","00202102"],["3y","1e",None,"00102101","00201202"],["3n","1e",None,"00201101","00102202"],["2e","2c",None,"00101202","00202101"],["2k","2k\$",None,"00102102","00201201"],["2k","2a",None,"00102201","00201102"]],["a",["4a","0",None,"00001111","00002222"],["3j","1c",None,"00001211","00002122"],["3a","1c",None,"00001112","00002221"],["3n","1e",None,"00001121","00002212"],["3i","1e",None,"00002111","00001222"],["2e","2c",None,"00001212","00002121"],["2a","2a\$",None,"00001122","00002211"],["2k","2a",None,"00001221","00002112"]],["i",["4i","0",None,"00110110","00220220"],["3r","1c",None,"00110210","00220120"],["3n","1e",None,"00110120","00220210"],["2i","2c",None,"00120210","00210120"],["2k","2k",None,"00120120","00210210"],["2a","2a",None,"00110220","00220110"]],["n",["4n","0",None,"00010111","00020222"],["3q","1c",None,"00010211","00020122"],["3n","1c",None,"00010112","00020221"],["3i","1c",None,"00020111","00010222"],["3c","1e",None,"00010121","00020212"],["2k","2c",None,"00010212","00020121"],["2n","2a",None,"00010221","00020112"],["2c","2a",None,"00010122","00020211"]],["y",["4y","0",None,"00110101","00220202"],["3q","1c",None,"00110201","00220102"],["3y","1c",None,"00120101","00210202"],["3n","1c",None,"00110102","00220201"],["3c","1e",None,"00210101","00120202"],["2a","2c",None,"00110202","00220101"],["2k","2c",None,"00120201","00210102"],["2k","2n",None,"00120102","00210201"]],["q",["4q","0",None,"00111001","00222002"],["3a","1c",None,"00111002","00222001"],["3k","1c",None,"00121001","00212002"],["3q","1e",None,"00112001","00221002"],["2a","2k",None,"00112002","00221001"],["2e","2n",None,"00121002","00212001"]],["j",["4j","0",None,"00101011","00202022"],["3e","1c",None,"00101012","00202021"],["3r","1e",None,"00102011","00201022"],["3j","1e",None,"00201011","00102022"],["3k","1e",None,"00101021","00202012"],["2k","2e",None,"00102021","00201012"],["2i","2k",None,"00102012","00201021"],["2e","2a",None,"00101022","00202011"]],["r",["4r","0",None,"00101110","00202220"],["3e","1c",None,"00101210","00202120"],["3r","1e",None,"00102110","00201220"],["3j","1e",None,"00101120","00202210"],["3a","1e",None,"00201110","00102220"],["2k","2e",None,"00102120","00201210"],["2i","2a",None,"00102210","00201120"],["2e","2a",None,"00101220","00202110"]],["t",["4t","0",None,"00100111","00200222"],["3r","1c",None,"00100112","00200221"],["3y","1e",None,"00100121","00200212"],["3i","1e",None,"00200111","00100222"],["2i","2c",None,"00100212","00200121"],["2k","2a",None,"00100122","00200211"]],["w",["4w","0",None,"00011011","00022022"],["3j","1c",None,"00011012","00022021"],["3q","1e",None,"00011021","00022012"],["2n","2e",None,"00012021","00021012"],["2k","2k",None,"00012012","00021021"],["2a","2a",None,"00011022","00022011"]],["z",["4z","0",None,"00110011","00220022"],["3r","1c",None,"00110012","00220021"],["3q","1e",None,"00110021","00220012"],["2k","2k",None,"00120021","00210012"],["2a","2a",None,"00110022","00220011"],["2i","2n",None,"00120012","00210021"]]],[5,["c",["5c","0",None,"10101011","20202022"],["4e","1c",None,"10101012","20202021"],["4r","1e",None,"10102011","20201022"],["4j","1e",None,"10101021","20202012"],["3j","2e",None,"10102021","20201012"],["3a","2e",None,"10202011","20101022"],["3k","2e",None,"20101021","10202012"],["3e","2k",None,"10102012","20201021"],["3e","2a",None,"10101022","20202011"],["3r","2i",None,"10201021","20102012"]],["e",["5e","0",None,"01010111","02020222"],["4y","1c",None,"01010112","02020221"],["4n","1c",None,"02010111","01020222"],["4c","1e",None,"01010121","02020212"],["3y","2c",None,"01010212","02020121"],["3n","2c",None,"02010112","01020221"],["3i","2c",None,"02020111","01010222"],["3c","2k",None,"02010121","01020212"],["3c","2a",None,"01010122","02020211"],["3q","2n",None,"01020112","02010221"]],["k",["5k","0",None,"01011011","02022022"],["4w","1c",None,"02011011","01022022"],["4k","1c",None,"01011012","02022021"],["4y","1e",None,"01011021","02022012"],["3j","2c",None,"02021011","01012022"],["3c","2e",None,"01012021","02021012"],["3q","2k",None,"02012011","01021022"],["3y","2k",None,"01012012","02021021"],["3n","2a",None,"01011022","02022011"],["3k","2n",None,"01021012","02012021"]],["a",["5a","0",None,"00011111","00022222"],["4w","1c",None,"00011211","00022122"],["4a","1c",None,"00011112","00022221"],["4n","1e",None,"00011121","00022212"],["3j","2c",None,"00011212","00022121"],["3c","2e",None,"00012121","00021212"],["3n","2k",None,"00012112","00021221"],["3q","2a",None,"00011221","00022112"],["3i","2a",None,"00011122","00022211"],["3a","2n",None,"00021112","00012221"]],["i",["5i","0",None,"00111110","00222220"],["4r","1c",None,"00111210","00222120"],["4i","1e",None,"00112110","00221220"],["4a","1e",None,"00111120","00222210"],["3e","2c",None,"00121210","00212120"],["3n","2e",None,"00112120","00221210"],["3j","2k",None,"00121120","00212210"],["3r","2a",None,"00112210","00221120"],["3a","2a",None,"00111220","00222110"],["3i","2i",None,"00211120","00122210"]],["n",["5n","0",None,"00101111","00202222"],["4r","1c",None,"00101112","00202221"],["4j","1c",None,"00101211","00202122"],["4t","1e",None,"00102111","00201222"],["4a","1e",None,"00201111","00102222"],["4k","1e",None,"00101121","00202212"],["3e","2c",None,"00101212","00202121"],["3y","2e",None,"00102121","00201212"],["3i","2e",None,"00202111","00101222"],["3r","2k",None,"00102112","00201221"],["3j","2k",None,"00201211","00102122"],["3a","2k",None,"00201112","00102221"],["3r","2a",None,"00102211","00201122"],["3j","2a",None,"00101122","00202211"],["3k","2a",None,"00101221","00202112"],["3n","2i",None,"00201121","00102212"]],["y",["5y","0",None,"01101011","02202022"],["4j","1c",None,"01101012","02202021"],["4i","1e",None,"01102011","02201022"],["4k","1e",None,"01101021","02202012"],["3e","2c",None,"02101012","01202021"],["3n","2e",None,"01102021","02201012"],["3r","2k",None,"01102012","02201021"],["3k","2k",None,"01201012","02102021"],["3j","2a",None,"01101022","02202011"],["3y","2i",None,"01201021","02102012"]],["q",["5q","0",None,"00111011","00222022"],["4r","1c",None,"00111012","00222021"],["4j","1c",None,"00121011","00212022"],["4z","1e",None,"00112011","00221022"],["4w","1e",None,"00211011","00122022"],["4q","1e",None,"00111021","00222012"],["3q","2e",1,"00112021","00221012"],["3q","2e",2,"00212011","00121022"],["3r","2k",None,"00112012","00221021"],["3j","2k",None,"00211012","00122021"],["3k","2k",None,"00121021","00212012"],["3r","2a",None,"00122011","00211022"],["3j","2a",None,"00221011","00112022"],["3a","2a",None,"00111022","00222011"],["3q","2i",None,"00211021","00122012"],["3e","2n",None,"00121012","00212021"]],["j",["5j","0",None,"00111101","00222202"],["4q","1c",None,"00111201","00222102"],["4a","1c",None,"00111102","00222201"],["4k","1c",None,"00121101","00212202"],["4y","1e",None,"00112101","00221202"],["4n","1e",None,"00211101","00122202"],["3a","2c",None,"00111202","00222101"],["3k","2c",None,"00121201","00212102"],["3c","2e",None,"00212101","00121202"],["3q","2k",None,"00211201","00122102"],["3n","2k",None,"00112102","00221201"],["3i","2k",None,"00211102","00122201"],["3q","2a",None,"00112201","00221102"],["3y","2a",None,"00122101","00211202"],["3n","2a",None,"00221101","00112202"],["3j","2n",None,"00121102","00212201"]],["r",["5r","0",None,"00110111","00220222"],["4z","1c",None,"00110211","00220122"],["4t","1c",None,"00120111","00210222"],["4i","1c",None,"00110112","00220221"],["4y","1e",None,"00110121","00220212"],["4n","1e",None,"00210111","00120222"],["3r","2c",1,"00110212","00220121"],["3r","2c",2,"00120211","00210122"],["3q","2k",None,"00210211","00120122"],["3y","2k",None,"00120121","00210212"],["3n","2k",None,"00210112","00120221"],["3q","2a",None,"00110221","00220112"],["3n","2a",None,"00110122","00220211"],["3i","2a",None,"00220111","00110222"],["3c","2i",None,"00210121","00120212"],["3r","2n",None,"00120112","00210221"]]],[6,["c",["6c","0",None,"10101111","20202222"],["5c","1c",None,"10101112","20202221"],["5y","1e",None,"10101121","20202212"],["5n","1e",None,"10102111","20201222"],["5i","1e",None,"10201111","20102222"],["4e","2c",None,"10101212","20202121"],["4a","2e",None,"20201111","10102222"],["4k","2e",None,"10102121","20201212"],["4r","2k",None,"10201112","20102221"],["4j","2k",None,"10102112","20201221"],["4r","2a",None,"10102211","20201122"],["4j","2a",None,"10101122","20202211"],["4t","2i",None,"20102111","10201222"],["4i","2i",None,"10201121","20102212"],["3j","3a",None,"10102221","20201112"],["3e","3i",None,"10101222","20202111"],["3e","3n",None,"10102212","20201121"],["3e","3y",None,"10201212","20102121"],["3k","3j",None,"10102122","20201211"],["3r","3r\$",None,"10201122","20102211"]],["e",["6e","0",None,"01011111","02022222"],["5j","1c",None,"01011112","02022221"],["5a","1c",None,"02011111","01022222"],["5k","1c",None,"01011211","02022122"],["5e","1e",None,"01011121","02022212"],["4a","2c",None,"02021111","01012222"],["4k","2c",None,"01011212","02022121"],["4c","2e",None,"01012121","02021212"],["4y","2k",None,"01012112","02021221"],["4n","2k",None,"02012111","01021222"],["4y","2a",None,"01011221","02022112"],["4n","2a",None,"01011122","02022211"],["4w","2n",None,"02011211","01022122"],["4q","2n",None,"01021112","02012221"],["3k","3c",None,"01021212","02012121"],["3c","3a",None,"01012221","02021112"],["3n","3i",None,"01011222","02022111"],["3y","3n",None,"01012212","02021121"],["3q","3q\$",None,"01021122","02012211"],["3c","3j",None,"01012122","02021211"]],["k",["6k","0",None,"01101111","02202222"],["5q","1c",None,"01101112","02202221"],["5y","1c",None,"01101211","02202122"],["5n","1c",None,"02101111","01202222"],["5r","1e",None,"01102111","02201222"],["5j","1e",None,"01201111","02102222"],["5k","1e",None,"01101121","02202212"],["4r","2c",None,"02101112","01202221"],["4j","2c",None,"01101212","02202121"],["4y","2e",None,"01102121","02201212"],["4n","2e",None,"01202111","02101222"],["4z","2k",None,"01102112","02201221"],["4t","2k",None,"02102111","01201222"],["4q","2k",None,"01201112","02102221"],["4k","2k",1,"01201211","02102122"],["4k","2k",2,"02101121","01202212"],["4w","2a",None,"01101122","02202211"],["4i","2a",None,"01102211","02201122"],["4a","2a",None,"02201111","01102222"],["4k","2a",None,"01101221","02202112"],["4y","2i",None,"01201121","02102212"],["4j","2n",None,"02101211","01202122"],["3c","3e",None,"01202121","02101212"],["3q","3k",None,"01202112","02101221"],["3n","3a",None,"01102221","02201112"],["3j","3i",None,"01101222","02202111"],["3r","3n",None,"01102212","02201121"],["3k","3y",None,"01201212","02102121"],["3r","3q",None,"02102211","01201122"],["3q","3j",None,"01102122","02201211"],["3n","3j",None,"01202211","02101122"],["3y","3r",None,"01201221","02102112"]],["a",["6a","0",None,"00111111","00222222"],["5q","1c",None,"00111211","00222122"],["5n","1c",None,"00121111","00212222"],["5i","1c",None,"00111112","00222221"],["5r","1e",None,"00112111","00221222"],["5j","1e",None,"00111121","00222212"],["5a","1e",None,"00211111","00122222"],["4r","2c",None,"00111212","00222121"],["4j","2c",None,"00121211","00212122"],["4y","2e",None,"00112121","00221212"],["4n","2e",None,"00212111","00121222"],["4w","2k",None,"00211211","00122122"],["4i","2k",None,"00112112","00221221"],["4a","2k",None,"00211112","00122221"],["4k","2k",None,"00121121","00212212"],["4z","2a",None,"00112211","00221122"],["4t","2a",None,"00122111","00211222"],["4q","2a",None,"00111221","00222112"],["4a","2a",1,"00111122","00222211"],["4a","2a",2,"00221111","00112222"],["4n","2i",None,"00211121","00122212"],["4r","2n",None,"00121112","00212221"],["3e","3c",None,"00121212","00212121"],["3q","3a",None,"00112221","00221112"],["3r","3i",None,"00122211","00211122"],["3a","3i",None,"00111222","00222111"],["3r","3n",None,"00112212","00221121"],["3k","3n",None,"00121221","00212112"],["3r","3q",None,"00122112","00211221"],["3j","3q",None,"00121122","00212211"],["3y","3j",None,"00122121","00211212"],["3n","3j",None,"00112122","00221211"]],["i",["6i","0",None,"01110111","02220222"],["5r","1c",None,"01110112","02220221"],["5e","1e",None,"01110121","02220212"],["4t","2c",None,"01110212","02220121"],["4i","2c",None,"01120211","02210122"],["4y","2k",None,"01120121","02210212"],["4n","2a",None,"01110122","02220211"],["4c","2i",None,"01210121","02120212"],["4z","2n",None,"01120112","02210221"],["3r","3c",None,"01120212","02210121"],["3i","3i",None,"01110222","02220111"],["3n","3n",None,"01120221","02210112"],["3y","3y",None,"01210212","02120121"],["3q","3q",None,"01120122","02210211"]],["n",["6n","0",None,"10111011","20222022"],["5c","1c",None,"10111012","20222021"],["5q","1e",None,"10111021","20222012"],["4w","2e",None,"10112021","20221012"],["4q","2e",None,"10212011","20121022"],["4j","2k",None,"10112012","20221021"],["4r","2a",None,"10111022","20222011"],["4z","2i",None,"10211021","20122012"],["4e","2n",None,"10121012","20212021"],["3q","3q",None,"10212012","20121021"],["3a","3a",None,"10222011","20111022"],["3e","3q",None,"10121022","20212011"],["3j","3j",None,"10112022","20221011"],["3r","3r",None,"10211022","20122011"]]],[7,["c",["7c","0",None,"10111111","20222222"],["6n","1c",None,"10111211","20222122"],["6c","1c",None,"10111112","20222221"],["6a","1e",None,"10211111","20122222"],["6k","1e",None,"10111121","20222212"],["5c","2c",None,"10111212","20222121"],["5j","2e",None,"10212111","20121222"],["5a","2e",None,"20211111","10122222"],["5k","2e",None,"10112121","20221212"],["5q","2k",None,"10211211","20122122"],["5y","2k",None,"10112112","20221221"],["5n","2k",None,"10211112","20122221"],["5q","2a",None,"10111221","20222112"],["5n","2a",None,"10111122","20222211"],["5i","2a",None,"10221111","20112222"],["5r","2i",None,"10211121","20122212"],["5c","2n",None,"10121112","20212221"],["4e","3c",None,"10121212","20212121"],["4y","3e",None,"10212121","20121212"],["4n","3e",None,"20212111","10121222"],["4w","3k",None,"20211211","10122122"],["4k","3k",None,"10212112","20121221"],["4w","3a",None,"10112221","20221112"],["4a","3a",None,"10222111","20111222"],["4r","3i",None,"10111222","20222111"],["4r","3n",None,"10221211","20112122"],["4j","3n",None,"10112212","20221121"],["4j","3y",None,"10211212","20122121"],["4r","3q",None,"20121112","10212221"],["4j","3q",None,"10121122","20212211"],["4q","3j",None,"10212211","20121122"],["4a","3j",None,"20221111","10112222"],["4k","3j",None,"10112122","20221211"],["4z","3r",None,"10211221","20122112"],["4t","3r",None,"10211122","20122211"],["4i","3r",None,"10221121","20112212"]],["e",["7e","0",None,"01111111","02222222"],["6a","1c",None,"01111112","02222221"],["6k","1c",None,"01111211","02222122"],["6i","1e",None,"01112111","02221222"],["6e","1e",None,"01111121","02222212"],["5y","2c",None,"01121211","02212122"],["5n","2c",None,"01111212","02222121"],["5i","2c",None,"02111112","01222221"],["5e","2e",None,"01112121","02221212"],["5r","2k",None,"01112112","02221221"],["5j","2k",None,"01211112","02122221"],["5k","2k",None,"01121121","02212212"],["5r","2a",None,"01112211","02221122"],["5j","2a",None,"01111221","02222112"],["5a","2a",None,"01111122","02222211"],["5e","2i",None,"01211121","02122212"],["5q","2n",None,"01121112","02212221"],["4r","3c",None,"02121112","01212221"],["4j","3c",None,"01121212","02212121"],["4c","3e",None,"01212121","02121212"],["4y","3k",None,"01212112","02121221"],["4n","3a",None,"01112221","02221112"],["4i","3i",None,"01122211","02211122"],["4a","3i",None,"01111222","02222111"],["4t","3n",None,"01112212","02221121"],["4a","3n",None,"02211112","01122221"],["4k","3n",None,"01121221","02212112"],["4i","3y",None,"02112112","01221221"],["4k","3y",None,"01211212","02122121"],["4z","3q",None,"01122112","02211221"],["4w","3q",None,"01121122","02212211"],["4q","3q",None,"01221112","02112221"],["4y","3j",None,"01122121","02211212"],["4n","3j",None,"01112122","02221211"],["4y","3r",None,"01211221","02122112"],["4n","3r",None,"02211121","01122212"]]],[8,["",["8","0",None,"11111111","22222222"],["7c","1c",None,"11111112","22222221"],["7e","1e",None,"11111121","22222212"],["6c","2c",None,"11111212","22222121"],["6e","2e",None,"11112121","22221212"],["6k","2k",None,"11112112","22221221"],["6a","2a",None,"11111122","22222211"],["6i","2i",None,"11211121","22122212"],["6n","2n",None,"11121112","22212221"],["5c","3c",None,"11121212","22212121"],["5e","3e",None,"11212121","22121212"],["5k","3k",None,"11212112","22121221"],["5a","3a",None,"11112221","22221112"],["5i","3i",None,"11111222","22222111"],["5n","3n",None,"11112212","22221121"],["5y","3y",None,"11211212","22122121"],["5q","3q",None,"11121122","22212211"],["5j","3j",None,"11112122","22221211"],["5r","3r",None,"11211122","22122211"],["4e","4c",None,"12121212","21212121"],["4k","4k",None,"11212212","22121121"],["4a","4a",None,"11112222","22221111"],["4r","4n",None,"11121222","22212111"],["4y","4j",None,"11212122","22121211"],["4i","4t",None,"11211222","22122111"],["4q","4w",None,"11122122","22211211"],["4z","4z",None,"11221122","22112211"]]]]
top = "@RULE " + filename
header = "\n\n@TABLE\nn_states:3\nneighborhood:Moore\nsymmetries:rotate4reflect\n\nvar a={0,1,2}\nvar ab={0,1,2}\nvar ac={0,1,2}\nvar ad={0,1,2}\nvar ae={0,1,2}\nvar af={0,1,2}\nvar ag={0,1,2}\nvar ah={0,1,2}\nvar ai={0,1,2}\n"
body = "\n"
tail = rulestring

currentNum = ""
currentConfig = ""
currentSubconfig = ""
currentPos = 0
currentBeginEnd = [0,1]
isInSubconfig = False
getFullNumList = False
getFullConfigList = False

charlist = ["c","e","k","a","i","n","y","q","j","r","t","w","z"]

for c in rulestring:
if c == "(" or c == "[":
isInSubconfig = True
if c == ")" or c == "]":
isInSubconfig = False
if isInSubconfig and c != "(":
currentPos = currentPos + 1
continue
#note: am planning on detecting subconfig on "(" and getting the
#numstring for it on ")"

if c == "A" or c == "B" or c == "T" or c == "S":
currentPos = currentPos + 1
continue

for n in [0,1,2,3,4,5,6,7,8]:
if c == str(n):
currentNum = n
if currentPos + 1 < len(rulestring):
if rulestring[currentPos+1] == str(n+1) or rulestring[currentPos+1] == "/":
getFullNumList = True
else:
getFullNumList = False
else:
getFullNumList = True

for k in charlist:
if c == k:
currentConfig = c
if currentPos + 1 < len(rulestring):
if rulestring[currentPos+1] != "(":
getFullConfigList = True
else:
getFullConfigList = False
else:
getFullConfigList = True

if c == "(":
currentSubconfig = rulestring[currentPos+1:rulestring.find(")",currentPos)]
if rulestring[rulestring.find(")",currentPos)+1:rulestring.find(")",currentPos)+2] == "[":
currentVariant = int(rulestring[rulestring.find("[",currentPos)+1:rulestring.find("[",currentPos)+2])
else:
currentVariant = None

if c == "/":
if rulestring[currentPos:currentPos+3] == "/BB":
currentBeginEnd = [0,2]
if rulestring[currentPos:currentPos+3] == "/TA":
currentBeginEnd = [1,2]
if rulestring[currentPos:currentPos+3] == "/TB":
currentBeginEnd = [2,1]
if rulestring[currentPos:currentPos+3] == "/SA":
currentBeginEnd = [1,1]
if rulestring[currentPos:currentPos+3] == "/SB":
currentBeginEnd = [2,2]

if getFullNumList:
for numbers in ruleStruct:
if numbers[0] == currentNum:
for configs in numbers:
if isinstance(configs,int):
continue
for subconfigs in configs:
if isinstance(subconfigs,str):
continue

body = body + str(currentBeginEnd[0]) + ","
for ch in subconfigs[3]:
body = body + ch + ","
body = body + str(currentBeginEnd[1]) + "\n"
if subconfigs[0] != subconfigs[1]:
body = body + str(currentBeginEnd[0]) + ","
for ch in subconfigs[4]:
body = body + ch + ","
body = body + str(currentBeginEnd[1]) + "\n"
if getFullConfigList:
for numbers in ruleStruct:
if numbers[0] == currentNum:
for configs in numbers:
if isinstance(configs,int):
continue
if configs[0] == currentConfig:
for subconfigs in configs:
if isinstance(subconfigs,str):
continue

body = body + str(currentBeginEnd[0]) + ","
for ch in subconfigs[3]:
body = body + ch + ","
body = body + str(currentBeginEnd[1]) + "\n"
if subconfigs[0] != subconfigs[1]:
body = body + str(currentBeginEnd[0]) + ","
for ch in subconfigs[4]:
body = body + ch + ","
body = body + str(currentBeginEnd[1]) + "\n"

if c == ")":
for numbers in ruleStruct:
if numbers[0] == currentNum:
for configs in numbers:
if isinstance(configs,int):
continue
if configs[0] == currentConfig:
for subconfigs in configs:
if isinstance(subconfigs,str):
continue
if currentSubconfig == subconfigs[0] + subconfigs[1]and currentVariant == subconfigs[2]:
body = body + str(currentBeginEnd[0]) + ","
for ch in subconfigs[3]:
body = body + ch + ","
body = body + str(currentBeginEnd[1]) + "\n"
elif currentSubconfig == subconfigs[1] + subconfigs[0]and currentVariant == subconfigs[2]:
body = body + str(currentBeginEnd[0]) + ","
for ch in subconfigs[4]:
body = body + ch + ","
body = body + str(currentBeginEnd[1]) + "\n"

getFullNumList = False
getFullConfigList = False

currentPos = currentPos + 1

numlines = len(rulestring) // 999 + 1
filestring = top + header + body
for x in range(numlines):
filestring = filestring + "#" + tail[900*x:900*(x+1)] +"\n"

f = open(golly.getdir("rules") + filename + ".rule","w")
f.write(filestring)
f.close()

golly.setrule(filename)
``````
NOTE: This script will not work with the revision to my notation. Use the one in the post below instead!

Just open the script with golly and input your rulestring into the popup and you will have your rulefile!

I also created a rule generator for this notation, which is here.
Last edited by Cyclotrons on March 2nd, 2021, 9:46 am, edited 2 times in total.
I wrote random rule generators for 3-State Outer-Totalistic rules and for 2-State Isotropic Non-Totalistic rules!

I created a notation for the 3-State Isotropic Non-Totalistic rulespace and wrote a generator for it!

Cyclotrons
Posts: 27
Joined: January 26th, 2021, 12:19 am

### Re: A Notation for 3-State INT Rules (and a script to turn them into rulefiles)

Due to complaints about the length of the rulestrings in my notation, I am releasing a major revision to it. I will be keeping the original notation up for posterity. If something is not explicitly stated to be different, assume that it is the same between both.

Terminology:

number - the number of live cells in a given neighborhood configuration as described by a number, can refer to cells of the same state if specified
configuration - the arrangement of live cells as described by a hensel character, independent of number, can refer to cells of the same state if specified
number configuration - the arrangement of a given number of live cells as described by a number and a hensel character, can refer to cells of the same state if specified
subconfiguration - the number configuration of two states of cells in a single neighborhood
phrase - a string within the rulestring that is uninterrupted by separating strings

Neighborhood Configurations:

Describing neighborhood configurations is where the bulk of the changes have occurred.

() - The contents of parentheses indicate which subconfigurations will be included as a part of a transition within a domain of neighborhood configurations. The domain changes depending on where in a phrase this is located:

-If it is located before number and configuration is specified, the domain consists of all possible neighborhood configurations. (W)
-If it is located after configuration is specified, but before number is specified, the domain is restricted to the specified configuration, independent of number. (X)
-If it is located after number is specified, but before configuration is specified for that number, the domain is restricted to the specified number. (Y)
-If it is located after number is specified and after configuration is specified for that number, the domain is restricted to that number configuration. (Z)

An example:
(W)c(X)e(X)2(Y)k(Z)a(Z)

There are 4 general forms of specifier that can be used to describe what is included:
No specifier, which is indicated by an empty character (NOT a space), indicates that the entire domain is included.
A number specifier, which is indicated by a number, indicates that number configurations of a single state contained in a subconfiguration are included if they have a matching number.
A configuration specifier, which is indicated by a hensel character, indicates that number configurations of a single state contained in a subconfiguration are included if they have a matching configuration.
A number configuration specifier, which is indicated by a number followed by a hensel character, indicates that number configurations of a single state contained in a subconfiguration are included if they have a matching number configuration.

If these specifiers are placed within a set of parentheses alone, it indicates that a subconfiguration will be included if either of its composing configurations match the specifier.
If two of these specifiers are placed within a set of parentheses separated by a '^', it indicates that a subconfiguration will be included if one composing configuration matches one specifier and the other composing configuration matches the other specifier. The order doesn't matter.
If two of these specifiers are placed within a set of parentheses separated by a ',', it indicates that a subconfiguration will be included if the composing configuration of state a matches the first specifier and the composing configuration of state b matches the second specifier.

If a specifier is placed within a set of curly braces ({}) before being placed within a set of parentheses, it indicates that a subconfiguration will be included if the respective composing configuration (respective being either configuration or a specific one, as indicated above) can contain the specified number configuration, can contain a specified (non-numbered) configuration, or has at least the specified number of cells (really, it is that it can contain a configuration with that number of cells, but that is the same thing), depending on which specifier is used.

If after the first phrase in a transition specifier, a semicolon followed by a dash ';-' is used, it means that everything specified in the following phrase will be excluded from that transition, even if they are included within the previous phrase. If you want a set of neighborhood configurations to be included even if they are excluded after the semicolon, you can place a ' after the appropriate set of parentheses before the semicolon.

Some other noteworthy changes:
A number left on its lonesome is no longer considered valid. To do what it indicated before, include a set of empty parentheses directly after the number.
The same goes for a lonesome hensel character.
A subconfiguration composed of 2 number configurations next to each other (ex. (2k2a)) is no longer considered valid. Use the comma separator (ex. (2k,2a)) to indicate the same thing.

Here's an example rulestring:

Code: Select all

``BA/BB({1e},)(,3)/TA/TB(,7)/SA/SB(,2)(,3)``
In this rule, state b acts like life (a cell of state b is born with 3 cells of state b in its neighborhood and survives with 2 and 3 cells of state b in its neighborhood), but a cell will transition to state a from state b if it has 7 neighbors of state b. Cells of state a die in 1 generation, but cells of state b will be born if they have a cell of state a on one of their edges.

Script for converting rulestrings in the new notation into rulefiles:

Code: Select all

``````import string
import os
import golly

def is_in_configuration(config,targetSubconfig):
ns = "012345678"
cs = "cekainyqjrtwz"

if config == "":
return False

for numbers in ruleStruct:
if numbers[0] == int(config[:1]):
for configs in numbers:
if isinstance(configs,int):
continue
if configs[0] == config[1:2]:
for subconfigs in configs:
if isinstance(subconfigs,str):
continue
if targetSubconfig.find("^") != -1:
a = targetSubconfig[:targetSubconfig.find("^")]
b = targetSubconfig[targetSubconfig.find("^")+1:]
if (subconfigs[0].find(a) != -1 and subconfigs[1].find(b) != -1) or (subconfigs[1].find(a) != -1 and subconfigs[0].find(b) != -1):
return True
elif len(targetSubconfig) <= 2:
if subconfigs[0].find(targetSubconfig) != -1 or subconfigs[1].find(targetSubconfig) != -1:
return True
return False

rulestring = golly.getstring("Input rulestring:")
longfilename = ""
for c in rulestring:
if c != "/":
longfilename = longfilename + c
else:
longfilename = longfilename + "_"
filename = longfilename[:150]
ruleStruct = [[0,["",["","",None,"00000000","00000000"]]],[1,["c",["1c","0",None,"00000001","00000002"]],["e",["1e","0",None,"00000010","00000020"]]],[2,["c",["2c","0",None,"00000101","00000202"],["1c","1c",None,"00000102","00000201"]],["e",["2e","0",None,"00001010","00002020"],["1e","1e",None,"00001020","00002010"]],["k",["2k","0",None,"00001001","00002002"],["1e","1c",None,"00001002","00002001"]],["a",["2a","0",None,"00000011","00000022"],["1e","1c",None,"00000012","00000021"]],["i",["2i","0",None,"00100010","00200020"],["1e","1e",None,"00100020","00200010"]],["n",["2n","0",None,"00010001","00020002"],["1c","1c",None,"00010002","00020001"]]],[3,["c",["3c","0",None,"00010101","00020202"],["2n","1c",None,"00010201","00020102"],["2c","1c",None,"00010102","00020201"]],["e",["3e","0",None,"00101010","00202020"],["2i","1c",None,"00102010","00201020"],["2e","1e",None,"00101020","00202010"]],["k",["3k","0",None,"00101001","00202002"],["2e","1c",None,"00101002","00202001"],["2k","1e",None,"00102001","00201002"]],["a",["3a","0",None,"00001110","00002220"],["2e","1c",None,"00001210","00002120"],["2a","1e",None,"00001120","00002210"]],["i",["3i","0",None,"00000111","00000222"],["2a","1c",None,"00000112","00000221"],["2c","1e",None,"00000121","00000212"]],["n",["3n","0",None,"00001101","00002202"],["2a","1c",None,"00001102","00002201"],["2k","1c",None,"00001201","00002102"],["2c","1e",None,"00002101","00001202"]],["y",["3y","0",None,"00100101","00200202"],["2k","1c",None,"00100102","00200201"],["2c","1e",None,"00200101","00100202"]],["q",["3q","0",None,"00010011","00020022"],["2a","1c",None,"00020011","00010022"],["2k","1c",None,"00010012","00020021"],["2n","1e",None,"00010021","00020012"]],["j",["3j","0",None,"00001011","00002022"],["2e","1c",None,"00001012","00002021"],["2a","1e",None,"00002011","00001022"],["2k","1e",None,"00001021","00002012"]],["r",["3r","0",None,"00100011","00200022"],["2i","1c",None,"00100012","00200021"],["2a","1e",None,"00200011","00100022"],["2k","1e",None,"00100021","00200012"]]],[4,["c",["4c","0",None,"01010101","02020202"],["3c","1c",None,"01010102","02020201"],["2c","2c",None,"01010202","02020101"],["2n","2n",None,"01020102","02010201"]],["e",["4e","0",None,"10101010","20202020"],["3e","1e",None,"10101020","20202010"],["2e","2e",None,"10102020","20201010"],["2i","2i",None,"10201020","20102010"]],["k",["4k","0",None,"00101101","00202202"],["3j","1c",None,"00101102","00202201"],["3k","1c",None,"00101201","00202102"],["3y","1e",None,"00102101","00201202"],["3n","1e",None,"00201101","00102202"],["2e","2c",None,"00101202","00202101"],["2k","2k\$",None,"00102102","00201201"],["2k","2a",None,"00102201","00201102"]],["a",["4a","0",None,"00001111","00002222"],["3j","1c",None,"00001211","00002122"],["3a","1c",None,"00001112","00002221"],["3n","1e",None,"00001121","00002212"],["3i","1e",None,"00002111","00001222"],["2e","2c",None,"00001212","00002121"],["2a","2a\$",None,"00001122","00002211"],["2k","2a",None,"00001221","00002112"]],["i",["4i","0",None,"00110110","00220220"],["3r","1c",None,"00110210","00220120"],["3n","1e",None,"00110120","00220210"],["2i","2c",None,"00120210","00210120"],["2k","2k",None,"00120120","00210210"],["2a","2a",None,"00110220","00220110"]],["n",["4n","0",None,"00010111","00020222"],["3q","1c",None,"00010211","00020122"],["3n","1c",None,"00010112","00020221"],["3i","1c",None,"00020111","00010222"],["3c","1e",None,"00010121","00020212"],["2k","2c",None,"00010212","00020121"],["2n","2a",None,"00010221","00020112"],["2c","2a",None,"00010122","00020211"]],["y",["4y","0",None,"00110101","00220202"],["3q","1c",None,"00110201","00220102"],["3y","1c",None,"00120101","00210202"],["3n","1c",None,"00110102","00220201"],["3c","1e",None,"00210101","00120202"],["2a","2c",None,"00110202","00220101"],["2k","2c",None,"00120201","00210102"],["2k","2n",None,"00120102","00210201"]],["q",["4q","0",None,"00111001","00222002"],["3a","1c",None,"00111002","00222001"],["3k","1c",None,"00121001","00212002"],["3q","1e",None,"00112001","00221002"],["2a","2k",None,"00112002","00221001"],["2e","2n",None,"00121002","00212001"]],["j",["4j","0",None,"00101011","00202022"],["3e","1c",None,"00101012","00202021"],["3r","1e",None,"00102011","00201022"],["3j","1e",None,"00201011","00102022"],["3k","1e",None,"00101021","00202012"],["2k","2e",None,"00102021","00201012"],["2i","2k",None,"00102012","00201021"],["2e","2a",None,"00101022","00202011"]],["r",["4r","0",None,"00101110","00202220"],["3e","1c",None,"00101210","00202120"],["3r","1e",None,"00102110","00201220"],["3j","1e",None,"00101120","00202210"],["3a","1e",None,"00201110","00102220"],["2k","2e",None,"00102120","00201210"],["2i","2a",None,"00102210","00201120"],["2e","2a",None,"00101220","00202110"]],["t",["4t","0",None,"00100111","00200222"],["3r","1c",None,"00100112","00200221"],["3y","1e",None,"00100121","00200212"],["3i","1e",None,"00200111","00100222"],["2i","2c",None,"00100212","00200121"],["2k","2a",None,"00100122","00200211"]],["w",["4w","0",None,"00011011","00022022"],["3j","1c",None,"00011012","00022021"],["3q","1e",None,"00011021","00022012"],["2n","2e",None,"00012021","00021012"],["2k","2k",None,"00012012","00021021"],["2a","2a",None,"00011022","00022011"]],["z",["4z","0",None,"00110011","00220022"],["3r","1c",None,"00110012","00220021"],["3q","1e",None,"00110021","00220012"],["2k","2k",None,"00120021","00210012"],["2a","2a",None,"00110022","00220011"],["2i","2n",None,"00120012","00210021"]]],[5,["c",["5c","0",None,"10101011","20202022"],["4e","1c",None,"10101012","20202021"],["4r","1e",None,"10102011","20201022"],["4j","1e",None,"10101021","20202012"],["3j","2e",None,"10102021","20201012"],["3a","2e",None,"10202011","20101022"],["3k","2e",None,"20101021","10202012"],["3e","2k",None,"10102012","20201021"],["3e","2a",None,"10101022","20202011"],["3r","2i",None,"10201021","20102012"]],["e",["5e","0",None,"01010111","02020222"],["4y","1c",None,"01010112","02020221"],["4n","1c",None,"02010111","01020222"],["4c","1e",None,"01010121","02020212"],["3y","2c",None,"01010212","02020121"],["3n","2c",None,"02010112","01020221"],["3i","2c",None,"02020111","01010222"],["3c","2k",None,"02010121","01020212"],["3c","2a",None,"01010122","02020211"],["3q","2n",None,"01020112","02010221"]],["k",["5k","0",None,"01011011","02022022"],["4w","1c",None,"02011011","01022022"],["4k","1c",None,"01011012","02022021"],["4y","1e",None,"01011021","02022012"],["3j","2c",None,"02021011","01012022"],["3c","2e",None,"01012021","02021012"],["3q","2k",None,"02012011","01021022"],["3y","2k",None,"01012012","02021021"],["3n","2a",None,"01011022","02022011"],["3k","2n",None,"01021012","02012021"]],["a",["5a","0",None,"00011111","00022222"],["4w","1c",None,"00011211","00022122"],["4a","1c",None,"00011112","00022221"],["4n","1e",None,"00011121","00022212"],["3j","2c",None,"00011212","00022121"],["3c","2e",None,"00012121","00021212"],["3n","2k",None,"00012112","00021221"],["3q","2a",None,"00011221","00022112"],["3i","2a",None,"00011122","00022211"],["3a","2n",None,"00021112","00012221"]],["i",["5i","0",None,"00111110","00222220"],["4r","1c",None,"00111210","00222120"],["4i","1e",None,"00112110","00221220"],["4a","1e",None,"00111120","00222210"],["3e","2c",None,"00121210","00212120"],["3n","2e",None,"00112120","00221210"],["3j","2k",None,"00121120","00212210"],["3r","2a",None,"00112210","00221120"],["3a","2a",None,"00111220","00222110"],["3i","2i",None,"00211120","00122210"]],["n",["5n","0",None,"00101111","00202222"],["4r","1c",None,"00101112","00202221"],["4j","1c",None,"00101211","00202122"],["4t","1e",None,"00102111","00201222"],["4a","1e",None,"00201111","00102222"],["4k","1e",None,"00101121","00202212"],["3e","2c",None,"00101212","00202121"],["3y","2e",None,"00102121","00201212"],["3i","2e",None,"00202111","00101222"],["3r","2k",None,"00102112","00201221"],["3j","2k",None,"00201211","00102122"],["3a","2k",None,"00201112","00102221"],["3r","2a",None,"00102211","00201122"],["3j","2a",None,"00101122","00202211"],["3k","2a",None,"00101221","00202112"],["3n","2i",None,"00201121","00102212"]],["y",["5y","0",None,"01101011","02202022"],["4j","1c",None,"01101012","02202021"],["4i","1e",None,"01102011","02201022"],["4k","1e",None,"01101021","02202012"],["3e","2c",None,"02101012","01202021"],["3n","2e",None,"01102021","02201012"],["3r","2k",None,"01102012","02201021"],["3k","2k",None,"01201012","02102021"],["3j","2a",None,"01101022","02202011"],["3y","2i",None,"01201021","02102012"]],["q",["5q","0",None,"00111011","00222022"],["4r","1c",None,"00111012","00222021"],["4j","1c",None,"00121011","00212022"],["4z","1e",None,"00112011","00221022"],["4w","1e",None,"00211011","00122022"],["4q","1e",None,"00111021","00222012"],["3q","2e",1,"00112021","00221012"],["3q","2e",2,"00212011","00121022"],["3r","2k",None,"00112012","00221021"],["3j","2k",None,"00211012","00122021"],["3k","2k",None,"00121021","00212012"],["3r","2a",None,"00122011","00211022"],["3j","2a",None,"00221011","00112022"],["3a","2a",None,"00111022","00222011"],["3q","2i",None,"00211021","00122012"],["3e","2n",None,"00121012","00212021"]],["j",["5j","0",None,"00111101","00222202"],["4q","1c",None,"00111201","00222102"],["4a","1c",None,"00111102","00222201"],["4k","1c",None,"00121101","00212202"],["4y","1e",None,"00112101","00221202"],["4n","1e",None,"00211101","00122202"],["3a","2c",None,"00111202","00222101"],["3k","2c",None,"00121201","00212102"],["3c","2e",None,"00212101","00121202"],["3q","2k",None,"00211201","00122102"],["3n","2k",None,"00112102","00221201"],["3i","2k",None,"00211102","00122201"],["3q","2a",None,"00112201","00221102"],["3y","2a",None,"00122101","00211202"],["3n","2a",None,"00221101","00112202"],["3j","2n",None,"00121102","00212201"]],["r",["5r","0",None,"00110111","00220222"],["4z","1c",None,"00110211","00220122"],["4t","1c",None,"00120111","00210222"],["4i","1c",None,"00110112","00220221"],["4y","1e",None,"00110121","00220212"],["4n","1e",None,"00210111","00120222"],["3r","2c",1,"00110212","00220121"],["3r","2c",2,"00120211","00210122"],["3q","2k",None,"00210211","00120122"],["3y","2k",None,"00120121","00210212"],["3n","2k",None,"00210112","00120221"],["3q","2a",None,"00110221","00220112"],["3n","2a",None,"00110122","00220211"],["3i","2a",None,"00220111","00110222"],["3c","2i",None,"00210121","00120212"],["3r","2n",None,"00120112","00210221"]]],[6,["c",["6c","0",None,"10101111","20202222"],["5c","1c",None,"10101112","20202221"],["5y","1e",None,"10101121","20202212"],["5n","1e",None,"10102111","20201222"],["5i","1e",None,"10201111","20102222"],["4e","2c",None,"10101212","20202121"],["4a","2e",None,"20201111","10102222"],["4k","2e",None,"10102121","20201212"],["4r","2k",None,"10201112","20102221"],["4j","2k",None,"10102112","20201221"],["4r","2a",None,"10102211","20201122"],["4j","2a",None,"10101122","20202211"],["4t","2i",None,"20102111","10201222"],["4i","2i",None,"10201121","20102212"],["3j","3a",None,"10102221","20201112"],["3e","3i",None,"10101222","20202111"],["3e","3n",None,"10102212","20201121"],["3e","3y",None,"10201212","20102121"],["3k","3j",None,"10102122","20201211"],["3r","3r\$",None,"10201122","20102211"]],["e",["6e","0",None,"01011111","02022222"],["5j","1c",None,"01011112","02022221"],["5a","1c",None,"02011111","01022222"],["5k","1c",None,"01011211","02022122"],["5e","1e",None,"01011121","02022212"],["4a","2c",None,"02021111","01012222"],["4k","2c",None,"01011212","02022121"],["4c","2e",None,"01012121","02021212"],["4y","2k",None,"01012112","02021221"],["4n","2k",None,"02012111","01021222"],["4y","2a",None,"01011221","02022112"],["4n","2a",None,"01011122","02022211"],["4w","2n",None,"02011211","01022122"],["4q","2n",None,"01021112","02012221"],["3k","3c",None,"01021212","02012121"],["3c","3a",None,"01012221","02021112"],["3n","3i",None,"01011222","02022111"],["3y","3n",None,"01012212","02021121"],["3q","3q\$",None,"01021122","02012211"],["3c","3j",None,"01012122","02021211"]],["k",["6k","0",None,"01101111","02202222"],["5q","1c",None,"01101112","02202221"],["5y","1c",None,"01101211","02202122"],["5n","1c",None,"02101111","01202222"],["5r","1e",None,"01102111","02201222"],["5j","1e",None,"01201111","02102222"],["5k","1e",None,"01101121","02202212"],["4r","2c",None,"02101112","01202221"],["4j","2c",None,"01101212","02202121"],["4y","2e",None,"01102121","02201212"],["4n","2e",None,"01202111","02101222"],["4z","2k",None,"01102112","02201221"],["4t","2k",None,"02102111","01201222"],["4q","2k",None,"01201112","02102221"],["4k","2k",1,"01201211","02102122"],["4k","2k",2,"02101121","01202212"],["4w","2a",None,"01101122","02202211"],["4i","2a",None,"01102211","02201122"],["4a","2a",None,"02201111","01102222"],["4k","2a",None,"01101221","02202112"],["4y","2i",None,"01201121","02102212"],["4j","2n",None,"02101211","01202122"],["3c","3e",None,"01202121","02101212"],["3q","3k",None,"01202112","02101221"],["3n","3a",None,"01102221","02201112"],["3j","3i",None,"01101222","02202111"],["3r","3n",None,"01102212","02201121"],["3k","3y",None,"01201212","02102121"],["3r","3q",None,"02102211","01201122"],["3q","3j",None,"01102122","02201211"],["3n","3j",None,"01202211","02101122"],["3y","3r",None,"01201221","02102112"]],["a",["6a","0",None,"00111111","00222222"],["5q","1c",None,"00111211","00222122"],["5n","1c",None,"00121111","00212222"],["5i","1c",None,"00111112","00222221"],["5r","1e",None,"00112111","00221222"],["5j","1e",None,"00111121","00222212"],["5a","1e",None,"00211111","00122222"],["4r","2c",None,"00111212","00222121"],["4j","2c",None,"00121211","00212122"],["4y","2e",None,"00112121","00221212"],["4n","2e",None,"00212111","00121222"],["4w","2k",None,"00211211","00122122"],["4i","2k",None,"00112112","00221221"],["4a","2k",None,"00211112","00122221"],["4k","2k",None,"00121121","00212212"],["4z","2a",None,"00112211","00221122"],["4t","2a",None,"00122111","00211222"],["4q","2a",None,"00111221","00222112"],["4a","2a",1,"00111122","00222211"],["4a","2a",2,"00221111","00112222"],["4n","2i",None,"00211121","00122212"],["4r","2n",None,"00121112","00212221"],["3e","3c",None,"00121212","00212121"],["3q","3a",None,"00112221","00221112"],["3r","3i",None,"00122211","00211122"],["3a","3i",None,"00111222","00222111"],["3r","3n",None,"00112212","00221121"],["3k","3n",None,"00121221","00212112"],["3r","3q",None,"00122112","00211221"],["3j","3q",None,"00121122","00212211"],["3y","3j",None,"00122121","00211212"],["3n","3j",None,"00112122","00221211"]],["i",["6i","0",None,"01110111","02220222"],["5r","1c",None,"01110112","02220221"],["5e","1e",None,"01110121","02220212"],["4t","2c",None,"01110212","02220121"],["4i","2c",None,"01120211","02210122"],["4y","2k",None,"01120121","02210212"],["4n","2a",None,"01110122","02220211"],["4c","2i",None,"01210121","02120212"],["4z","2n",None,"01120112","02210221"],["3r","3c",None,"01120212","02210121"],["3i","3i",None,"01110222","02220111"],["3n","3n",None,"01120221","02210112"],["3y","3y",None,"01210212","02120121"],["3q","3q",None,"01120122","02210211"]],["n",["6n","0",None,"10111011","20222022"],["5c","1c",None,"10111012","20222021"],["5q","1e",None,"10111021","20222012"],["4w","2e",None,"10112021","20221012"],["4q","2e",None,"10212011","20121022"],["4j","2k",None,"10112012","20221021"],["4r","2a",None,"10111022","20222011"],["4z","2i",None,"10211021","20122012"],["4e","2n",None,"10121012","20212021"],["3q","3q",None,"10212012","20121021"],["3a","3a",None,"10222011","20111022"],["3e","3q",None,"10121022","20212011"],["3j","3j",None,"10112022","20221011"],["3r","3r",None,"10211022","20122011"]]],[7,["c",["7c","0",None,"10111111","20222222"],["6n","1c",None,"10111211","20222122"],["6c","1c",None,"10111112","20222221"],["6a","1e",None,"10211111","20122222"],["6k","1e",None,"10111121","20222212"],["5c","2c",None,"10111212","20222121"],["5j","2e",None,"10212111","20121222"],["5a","2e",None,"20211111","10122222"],["5k","2e",None,"10112121","20221212"],["5q","2k",None,"10211211","20122122"],["5y","2k",None,"10112112","20221221"],["5n","2k",None,"10211112","20122221"],["5q","2a",None,"10111221","20222112"],["5n","2a",None,"10111122","20222211"],["5i","2a",None,"10221111","20112222"],["5r","2i",None,"10211121","20122212"],["5c","2n",None,"10121112","20212221"],["4e","3c",None,"10121212","20212121"],["4y","3e",None,"10212121","20121212"],["4n","3e",None,"20212111","10121222"],["4w","3k",None,"20211211","10122122"],["4k","3k",None,"10212112","20121221"],["4w","3a",None,"10112221","20221112"],["4a","3a",None,"10222111","20111222"],["4r","3i",None,"10111222","20222111"],["4r","3n",None,"10221211","20112122"],["4j","3n",None,"10112212","20221121"],["4j","3y",None,"10211212","20122121"],["4r","3q",None,"20121112","10212221"],["4j","3q",None,"10121122","20212211"],["4q","3j",None,"10212211","20121122"],["4a","3j",None,"20221111","10112222"],["4k","3j",None,"10112122","20221211"],["4z","3r",None,"10211221","20122112"],["4t","3r",None,"10211122","20122211"],["4i","3r",None,"10221121","20112212"]],["e",["7e","0",None,"01111111","02222222"],["6a","1c",None,"01111112","02222221"],["6k","1c",None,"01111211","02222122"],["6i","1e",None,"01112111","02221222"],["6e","1e",None,"01111121","02222212"],["5y","2c",None,"01121211","02212122"],["5n","2c",None,"01111212","02222121"],["5i","2c",None,"02111112","01222221"],["5e","2e",None,"01112121","02221212"],["5r","2k",None,"01112112","02221221"],["5j","2k",None,"01211112","02122221"],["5k","2k",None,"01121121","02212212"],["5r","2a",None,"01112211","02221122"],["5j","2a",None,"01111221","02222112"],["5a","2a",None,"01111122","02222211"],["5e","2i",None,"01211121","02122212"],["5q","2n",None,"01121112","02212221"],["4r","3c",None,"02121112","01212221"],["4j","3c",None,"01121212","02212121"],["4c","3e",None,"01212121","02121212"],["4y","3k",None,"01212112","02121221"],["4n","3a",None,"01112221","02221112"],["4i","3i",None,"01122211","02211122"],["4a","3i",None,"01111222","02222111"],["4t","3n",None,"01112212","02221121"],["4a","3n",None,"02211112","01122221"],["4k","3n",None,"01121221","02212112"],["4i","3y",None,"02112112","01221221"],["4k","3y",None,"01211212","02122121"],["4z","3q",None,"01122112","02211221"],["4w","3q",None,"01121122","02212211"],["4q","3q",None,"01221112","02112221"],["4y","3j",None,"01122121","02211212"],["4n","3j",None,"01112122","02221211"],["4y","3r",None,"01211221","02122112"],["4n","3r",None,"02211121","01122212"]]],[8,["",["8","0",None,"11111111","22222222"],["7c","1c",None,"11111112","22222221"],["7e","1e",None,"11111121","22222212"],["6c","2c",None,"11111212","22222121"],["6e","2e",None,"11112121","22221212"],["6k","2k",None,"11112112","22221221"],["6a","2a",None,"11111122","22222211"],["6i","2i",None,"11211121","22122212"],["6n","2n",None,"11121112","22212221"],["5c","3c",None,"11121212","22212121"],["5e","3e",None,"11212121","22121212"],["5k","3k",None,"11212112","22121221"],["5a","3a",None,"11112221","22221112"],["5i","3i",None,"11111222","22222111"],["5n","3n",None,"11112212","22221121"],["5y","3y",None,"11211212","22122121"],["5q","3q",None,"11121122","22212211"],["5j","3j",None,"11112122","22221211"],["5r","3r",None,"11211122","22122211"],["4e","4c",None,"12121212","21212121"],["4k","4k",None,"11212212","22121121"],["4a","4a",None,"11112222","22221111"],["4r","4n",None,"11121222","22212111"],["4y","4j",None,"11212122","22121211"],["4i","4t",None,"11211222","22122111"],["4q","4w",None,"11122122","22211211"],["4z","4z",None,"11221122","22112211"]]]]
top = "@RULE " + filename
header = "\n\n@TABLE\nn_states:3\nneighborhood:Moore\nsymmetries:rotate4reflect\n\nvar a={0,1,2}\nvar ab={0,1,2}\nvar ac={0,1,2}\nvar ad={0,1,2}\nvar ae={0,1,2}\nvar af={0,1,2}\nvar ag={0,1,2}\nvar ah={0,1,2}\nvar ai={0,1,2}\n"
body = "\n"
tail = rulestring

currentNum = None
currentConfig = None
currentSubconfig = None
currentVariety = None
currentPos = 0
if rulestring[:2] == "BA":
currentBeginEnd = [0,1]
if rulestring[:2] == "BB":
currentBeginEnd = [0,2]
if rulestring[:2] == "TA":
currentBeginEnd = [1,2]
if rulestring[:2] == "TB":
currentBeginEnd = [2,1]
if rulestring[:2] == "SA":
currentBeginEnd = [1,1]
if rulestring[:2] == "SB":
currentBeginEnd = [2,2]

isInSubconfig = False
isIncluding = True
allNums = True
allConfigs = True
hasPriority = False

includeList = []
excludeList = []
priorityList = []
itemList = []

nums = "012345678"
chars = "cekainyqjrtwz"

for c in rulestring:
if c == ")" or c == "]":
isInSubconfig = False
hasPriority = False
if isInSubconfig:
currentPos = currentPos + 1
continue
if c == "(" or c == "[":
isInSubconfig = True

if nums.find(c) != -1:
allNums = False
allConfigs = True
currentNum = int(c)
if chars.find(c) != -1:
allConfigs = False
currentConfig = c

if c == ";":
isIncluding = False
allNums = True
allConfigs = True
hasPriority = False
currentNum = None
currentConfig = None
currentSubconfig = None
currentVariety = None

if c == "(":
currentSubconfig = rulestring[currentPos+1:rulestring.find(")",currentPos)]
if rulestring[rulestring.find(")",currentPos)+1:rulestring.find(")",currentPos)+2] == "\'" and isIncluding:
hasPriority = True
if rulestring[rulestring.find(")",currentPos)+1:rulestring.find(")",currentPos)+2] == "[" or rulestring[rulestring.find(")",currentPos)+2:rulestring.find(")",currentPos)+3] == "[":
currentVariety = int(rulestring[rulestring.find("[",currentPos)+1:rulestring.find("[",currentPos)+2])
else:
currentVariety = None

for numbers in ruleStruct:
if allNums or numbers[0] == currentNum:
for configs in numbers:
if isinstance(configs,int):
continue
if allConfigs or configs[0] == currentConfig:
for subconfigs in configs:
if isinstance(subconfigs,str):
continue
if isIncluding:
if currentSubconfig.find(",") != -1:
a = currentSubconfig[:currentSubconfig.find(",")]
b = currentSubconfig[currentSubconfig.find(",")+1:]
getSubA = False
getSubB = False
isAIn0 = False
isAIn1 = False
IsBIn0 = False
IsBIn1 = False
if a.find("{") != -1:
getSubA = True
isAIn0 = is_in_configuration(subconfigs[0],a[a.find("{")+1:a.find("}")])
isAIn1 = is_in_configuration(subconfigs[1],a[a.find("{")+1:a.find("}")])
a = a[a.find("{")+1:a.find("}")]
if b.find("{") != -1:
getSubB = True
isBIn0 = is_in_configuration(subconfigs[0],b[b.find("{")+1:b.find("}")])
isBIn1 = is_in_configuration(subconfigs[1],b[b.find("{")+1:b.find("}")])
b = b[b.find("{")+1:b.find("}")]

if ((subconfigs[0].find(a) != -1 and subconfigs[1].find(b) != -1) and (currentVariety == subconfigs[2]) and (allNums == False and allConfigs == False)) or ((((getSubA and isAIn0) or subconfigs[0].find(a) != -1) and ((getSubB and isBIn1) or subconfigs[1].find(b) != -1)) and currentVariety == None):
includeList.append(subconfigs[3])
if hasPriority:
priorityList.append(subconfigs[3])
if ((subconfigs[1].find(a) != -1 and subconfigs[0].find(b) != -1) and (currentVariety == subconfigs[2]) and (allNums == False and allConfigs == False)) or ((((getSubA and isAIn1) or subconfigs[1].find(a) != -1) and ((getSubB and isBIn0) or subconfigs[0].find(b) != -1)) and currentVariety == None):
includeList.append(subconfigs[4])
if hasPriority:
priorityList.append(subconfigs[4])
elif currentSubconfig.find("^") != -1:
a = currentSubconfig[:currentSubconfig.find("^")]
b = currentSubconfig[currentSubconfig.find("^")+1:]
getSubA = False
getSubB = False
isAIn0 = False
isAIn1 = False
IsBIn0 = False
IsBIn1 = False
if a.find("{") != -1:
getSubA = True
isAIn0 = is_in_configuration(subconfigs[0],a[a.find("{")+1:a.find("}")])
isAIn1 = is_in_configuration(subconfigs[1],a[a.find("{")+1:a.find("}")])
a = a[a.find("{")+1:a.find("}")]
if b.find("{") != -1:
getSubB = True
isBIn0 = is_in_configuration(subconfigs[0],b[b.find("{")+1:b.find("}")])
isBIn1 = is_in_configuration(subconfigs[1],b[b.find("{")+1:b.find("}")])
b = b[b.find("{")+1:b.find("}")]

if ((subconfigs[0].find(a) != -1 and subconfigs[1].find(b) != -1) and (currentVariety == subconfigs[2]) and (allNums == False and allConfigs == False)) or ((((getSubA and isAIn0) or subconfigs[0].find(a) != -1) and ((getSubB and isBIn1) or subconfigs[1].find(b) != -1)) and currentVariety == None):
includeList.append(subconfigs[3])
includeList.append(subconfigs[4])
if hasPriority:
priorityList.append(subconfigs[3])
priorityList.append(subconfigs[4])
if ((subconfigs[1].find(a) != -1 and subconfigs[0].find(b) != -1) and (currentVariety == subconfigs[2]) and (allNums == False and allConfigs == False)) or ((((getSubA and isAIn1) or subconfigs[1].find(a) != -1) and ((getSubB and isBIn0) or subconfigs[0].find(b) != -1)) and currentVariety == None):
includeList.append(subconfigs[4])
includeList.append(subconfigs[3])
if hasPriority:
priorityList.append(subconfigs[4])
priorityList.append(subconfigs[4])
else:
getSub = False
isIn0 = False
isIn1 = False
if currentSubconfig.find("{") != -1:
getSub = True
currentSubconfig = currentSubconfig[currentSubconfig.find("{")+1:currentSubconfig.find("}")]
isIn0 = is_in_configuration(subconfigs[0],currentSubconfig)
isIn1 = is_in_configuration(subconfigs[1],currentSubconfig)
if (subconfigs[0].find(currentSubconfig) != -1 or subconfigs[1].find(currentSubconfig) != -1) or (getSub and (isIn0 or isIn1)):
includeList.append(subconfigs[3])
includeList.append(subconfigs[4])
if hasPriority:
priorityList.append(subconfigs[3])
priorityList.append(subconfigs[4])
else:
if currentSubconfig.find(",") != -1:
a = currentSubconfig[:currentSubconfig.find(",")]
b = currentSubconfig[currentSubconfig.find(",")+1:]
getSubA = False
getSubB = False
isAIn0 = False
isAIn1 = False
IsBIn0 = False
IsBIn1 = False
if a.find("{") != -1:
getSubA = True
isAIn0 = is_in_configuration(subconfigs[0],a[a.find("{")+1:a.find("}")])
isAIn1 = is_in_configuration(subconfigs[1],a[a.find("{")+1:a.find("}")])
a = a[a.find("{")+1:a.find("}")]
if b.find("{") != -1:
getSubB = True
isBIn0 = is_in_configuration(subconfigs[0],b[b.find("{")+1:b.find("}")])
isBIn1 = is_in_configuration(subconfigs[1],b[b.find("{")+1:b.find("}")])
b = b[b.find("{")+1:b.find("}")]

if ((subconfigs[0].find(a) != -1 and subconfigs[1].find(b) != -1) and (currentVariety == subconfigs[2]) and (allNums == False and allConfigs == False)) or ((((getSubA and isAIn0) or subconfigs[0].find(a) != -1) and ((getSubB and isBIn1) or subconfigs[1].find(b) != -1)) and currentVariety == None):
excludeList.append(subconfigs[3])
if ((subconfigs[1].find(a) != -1 and subconfigs[0].find(b) != -1) and (currentVariety == subconfigs[2]) and (allNums == False and allConfigs == False)) or ((((getSubA and isAIn1) or subconfigs[1].find(a) != -1) and ((getSubB and isBIn0) or subconfigs[0].find(b) != -1)) and currentVariety == None):
excludeList.append(subconfigs[4])
elif currentSubconfig.find("^") != -1:
a = currentSubconfig[:currentSubconfig.find("^")]
b = currentSubconfig[currentSubconfig.find("^")+1:]
getSubA = False
getSubB = False
isAIn0 = False
isAIn1 = False
IsBIn0 = False
IsBIn1 = False
if a.find("{") != -1:
getSubA = True
isAIn0 = is_in_configuration(subconfigs[0],a[a.find("{")+1:a.find("}")])
isAIn1 = is_in_configuration(subconfigs[1],a[a.find("{")+1:a.find("}")])
a = a[a.find("{")+1:a.find("}")]
if b.find("{") != -1:
getSubB = True
isBIn0 = is_in_configuration(subconfigs[0],b[b.find("{")+1:b.find("}")])
isBIn1 = is_in_configuration(subconfigs[1],b[b.find("{")+1:b.find("}")])
b = b[b.find("{")+1:b.find("}")]

if ((subconfigs[0].find(a) != -1 and subconfigs[1].find(b) != -1) and (currentVariety == subconfigs[2]) and (allNums == False and allConfigs == False)) or ((((getSubA and isAIn0) or subconfigs[0].find(a) != -1) and ((getSubB and isBIn1) or subconfigs[1].find(b) != -1)) and currentVariety == None):
excludeList.append(subconfigs[3])
excludeList.append(subconfigs[4])
if ((subconfigs[1].find(a) != -1 and subconfigs[0].find(b) != -1) and (currentVariety == subconfigs[2]) and (allNums == False and allConfigs == False)) or ((((getSubA and isAIn1) or subconfigs[1].find(a) != -1) and ((getSubB and isBIn0) or subconfigs[0].find(b) != -1)) and currentVariety == None):
excludeList.append(subconfigs[4])
excludeList.append(subconfigs[3])
else:
getSub = False
isIn0 = False
isIn1 = False
if currentSubconfig.find("{") != -1:
getSub = True
currentSubconfig = currentSubconfig[currentSubconfig.find("{")+1:currentSubconfig.find("}")]
isIn0 = is_in_configuration(subconfigs[0],currentSubconfig)
isIn1 = is_in_configuration(subconfigs[1],currentSubconfig)
if (subconfigs[0].find(currentSubconfig) != -1 or subconfigs[1].find(currentSubconfig) != -1) or (getSub and (isIn0 or isIn1)):
excludeList.append(subconfigs[3])
excludeList.append(subconfigs[4])

if c == "/":
isIncluding = True

for gstrings in includeList:
if ((gstrings in excludeList) == False) or (gstrings in priorityList):
itemList.append(str(currentBeginEnd[0]) + gstrings + str(currentBeginEnd[1]))

includeList = []
excludeList = []
priorityList = []

if rulestring[currentPos:currentPos+3] == "/BB":
currentBeginEnd = [0,2]
if rulestring[currentPos:currentPos+3] == "/TA":
currentBeginEnd = [1,2]
if rulestring[currentPos:currentPos+3] == "/TB":
currentBeginEnd = [2,1]
if rulestring[currentPos:currentPos+3] == "/SA":
currentBeginEnd = [1,1]
if rulestring[currentPos:currentPos+3] == "/SB":
currentBeginEnd = [2,2]

currentNum = None
currentConfig = None
currentSubconfig = None
currentVariety = None
isInSubconfig = False
isIncluding = True
allNums = True
allConfigs = True
hasPriority = False

currentPos = currentPos + 1

for gstrings in includeList:
if ((gstrings in excludeList) == False) or (gstrings in priorityList):
itemList.append(str(currentBeginEnd[0]) + gstrings + str(currentBeginEnd[1]))

tempList = itemList
itemList = []
for y in tempList:
if (y != "0000000001" and y != "0000000002") and ((y in itemList) == False):
itemList.append(y)
for x in itemList:
tmpStr = ""
for c in x:
tmpStr = tmpStr + c + ","
tmpStr = tmpStr[:19]
body = body + tmpStr + "\n"

numlines = len(rulestring) // 900
filestring = top + header + body
for x in range(numlines):
filestring = filestring + "#" + tail[900*x:900*(x+1)] +"\n"

f = open(golly.getdir("rules") + filename + ".rule","w")
f.write(filestring)
f.close()

golly.setrule(filename)

``````
I wrote random rule generators for 3-State Outer-Totalistic rules and for 2-State Isotropic Non-Totalistic rules!

I created a notation for the 3-State Isotropic Non-Totalistic rulespace and wrote a generator for it!