Interpreting MCell's "general binary" rule family
Posted: November 30th, 2018, 11:57 am
Golly 3.0 added support for MAP rules, which vastly extend classical totalistic and isotropic Life-like rules. It turns out that MAP rules are equivalent to MCell's "general binary" rules, but when loading an MCell pattern using one of these rules into Golly the file is rejected because no algorithm can load it.
Thus I make a Golly feature request here:
The explanation of the general binary rule format on the MCell page is as follows:
The "LogicRule" in MCell, defined by its general binary rule string
is, with one stray transition, equivalent to the isotropic rule B2ae/S.
Thus I make a Golly feature request here:
- Add support for .mcl files using an MCell "general binary" rule
- Convert them to MAP rules
- Reduce them to isotropic/totalistic rules if possible
Code: Select all
#MCell 4.00
#GAME General binary
#RULE C0,NM,Sa6ba3bab3a3bab3ab7a3bab3ab7ab15a3bab3ab7ab15ab31a3bab3ab7
#RULE ab15ab31ab63a,B5ab3abb6abbab12abbab3ab24abbab3ab7ab49abab3ab7ab1
#RULE 5ab95a
#BOARD 100x100
#SPEED 0
#WRAP 0
#CCOLORS 2
#D The rule is caled "Just Friends" because new cells are born from a pair
#D of parents, but not from ones which are "too intimate" with each other.
#D A cell stays alive only if it has 1 or 2 live neighbors (in any position).
#D A cell is born only if it has exactly two live neighbors which are not
#D adjacent vertically or horizontally.
#D
#D So in the following figure, the central cell is born if there are live
#D cells at any two cells marked ac, ad, ae, af, ag, bd, be, bf, bg, bh,
#D ce, cf, cg, ch, df, dg, dh, eg, eh, or fh.
#D abc
#D hid
#D gfe
#D
#D The rule has two small period 6 diagonal gliders, an interesting period
#D 236 cyclic oscillator, and a small c/3 orthogonal wickstretcher which
#D show up from random soups. Lines of cells are stable. Random soups tend
#D to quickly settle down into small clumps of lines. But there are lots of
#D spaceships, wickstretchers, rakes, and glider guns which have been built.
#D
#D Here is a glider loop whose period is not a multiple of the turning
#D oscillator's period! (Is this the first such reaction known in any
#D Life-like rule?) Here are four gliders circulating with period 408.
#D
#D David I. Bell, June 2000
#L 20.7A$$23.A$23.A$$21.A3.A$$23.A13$51.A$48.A..A$47.A.A.A$46.A4.A$47.A.A
#L .A$A47.A..A$A3.A36.A9.A$A5.A$A.A38.AA$A5.A$A3.A$A$$34.A$35.AA5$22.AA4.
#L A$28.3A$22.A6$27.A.A$27.A.A$27.A.A$$25.7ASince Golly supports Generations MAP rules and von Neumann neighbourhoods, we can handle all parameters.The notation of General binary rules has the "C/N/S/B" form, where:
C - specifies the count of states in the rule (0..C-1).
N - specifies the neighborhood type: NM stands for Moore, NN for von Neumann.
S - specifies the compressed string defining the configurations where a cell survives.
B - specifies the compressed string defining the configurations where a cell is born.
Strings defining S and B parts specify the 0/1 state for every possible configuration. For enumerating all possible neighborhood configurations the "N,NE,E,SE,S,SW,W,NW" order is used. For example S010000...0 means "Survival on an alive N neighbor", B1100...0 means "Birth on no neighbors or on a single N neighbor". To make the S/B strings shorter a simple compression is used. 0s are represented as "a", 1s as "b". 3 and more occurrences of the same character are shortened by specifying the count of occurrences and a character.
Example
"Fallski" rule is defined as follows: "C48,NM,Sb255a,Babb189ab63a".
It has 48 states (0..47) and uses the Moore neighborhood. "Sb255a" means 1 and 255 0s (survival only on no alive neighbors). "Babb189ab63a" means 0,1,1, 189 0s, 1, 63 0s (birth on a single N or NE neighbor, or on W and NW neighbors).
The "LogicRule" in MCell, defined by its general binary rule string
Code: Select all
C0,NM,S256a, B3ababb5abaab4ab3ab23ab16ab14ab15ab32ab62ab63a