wildmyron wrote:I'll post a standalone form of the rule generator over the next couple of days.
I'm not sure about alphabetizing the neighbourhoods, but minimizing the number of required letters makes sense. I think the rule generator currently uses the row order in the neighbours2.html table to order the letters, but I have to refresh my memory on that.
Thanks! I suppose any defined order is fine, and the table certainly works as a canonical order.
wildmyron wrote:The ambiguity between neighbourhood 'h' and 'H' for hexagonal neighbourhoods is unfortunate, as is the ambiguity between 'c' and 'C' for history states in generations.
Ow, the "C" ambiguity with Generations is a bad one -- if you take out the slashes and ignore case, you can't tell B3/S2c3 from B3/S2/C3. On the other hand, Golly doesn't support the B/S/C form of Generations rules anyway. And maybe we don't have to ignore case. Hensel's format definitely has a lowercase 'c' by tradition, whereas the usual Generations 'C' is uppercase.
There isn't actually an h/H ambiguity if we're using the "neighbors2" table definition, is there?
wildmyron wrote:I'm not sure about using 'N' for that purpose as non-totalistic is a much broader rule space. Something which indicates the isotropic property of the rule space, and perhaps that it is restricted to the Moore neighbourhood.
Good point... I'd rather not get stuck with a capital letter I as an identifier, though, due to possible confusion with 1's and lowercase L's.
"NI"? "NTI"? "ISO"? "Hensel:"? "isotropic"? None of them seem quite as nice as a simple "N"... but, well, once some arbitrary decision gets implemented, I think it won't be too difficult to live with it.
Either I haven't read everything carefully enough yet, or there's an unmentioned wrinkle: Life32's version of the Neighbors2.html table also uses v
instead of n
, for some reason that I haven't dug up yet. This is in addition to the bug with y
being swapped in the actual Life32 code but not in the Help file. [This was mentioned in wildmyron's post, but I missed it.] Will have to hunt around for any non-totalistic pattern archives out there besides Emmanuel Sapin's, that use that Life32 format. Links, anyone?
With some minor pain and suffering, I've extracted the relevant part of Life32.HLP, in case anyone wants to see it:
Johan Bontes' Life32.HLP wrote:Alan Hensel's Non-totalistic rules extensions
Why non-totalistic, what is it?
'Normal' rules only count the number of neighbors a cell has. Placement of the neighbors is not taken into account.
This is the simplest kind of rule and they are called "totalistic" rules.
However some popular rules DO take the placement of neighbors into account.
Again there is a simple way to take placement into account and a hard way.
The simple way is fully symmetrical (i.e. does not see left, right, up or down as different). The hard way is not symmetrical and thus see left and right as different.
The hard way might have patterns only moving left, or up. This is a bit limiting and thus far nobody has found a real use for this.
The simple way is called non-totalistic and is used for a few popular rules, most notably the "Just Friends" rule.
The "Just Friends" rule states: Survival and 1 and 2 neighbors, Birth on 2 neighbors, if they are not adjacent.
Without the "if" part the patterns would keep expanding due to overpopulation, with the "if" part limiting growth we've got an interesting rule.
How does it work?
The non-totalistic extensions implement the "if" parts mentioned above.
Below is a graphical representation of all the options.
0 and 8 neighbors don't have room for an "if" part, there is only one way to stuff 0 or 8 cells in an 8-cell space.
1 and 7 neighbors haven't got much room for choice either, only 2 options.
With 4 neighbors there are 13 different "if's" to state that are symmetrical.
Each "if" has got it's own letter. Note that the "if" with 1 neighbor need not be all that related to the same labeled "if" with 4 neighbors; however Alan has tried to put similar conditions together.
The letters used are mnemonic; most are based on the shape of a certain orientation of the condition. However the first 4 have a definitive meaning:
c = corners.
e = edges (if you keep neighbors <= 4 and add "e" to all numbers, you effectively have "Von Neumann" space).
k = knight move (as in chess)
a = adjacent
The letters are entered after the number (of neighbors) they apply to. If all letters apply except one, a "-" sign is used to 'rule out' the missing letter.
Because "Just Friends" only has births on not-adjacent neighbors, "-a" is entered after the "B2".
The graphical representation only shows one possible orientation, in reality all rotations/mirror images of that orientation also apply.