Life is called a "totalistic" rule or an "outer totalistic" rule because the cells surrounding the center cells are totaled, and these totals determine what happens next. There are also completely totalistic rules in which the center cell is included in the total, instead of allowing its status to create the distinction between birth rules and survival rules as Life does. "Non-totalistic" might refer to any other scheme, but for the purposes of this thread, it can refer to allowing the position of neighboring cells to play a role in determining the center cell's state. MCell's weighted life algorithm is a good introduction to non-totalistic rules. (See http://www.mirekw.com/ca/rullex_wlif.html)
What comes next will be very basic for many of you, but it took me awhile to see the big picture, and I thought it might be helpful for other beginners as well.
As I recently surveyed various MCell Weighted life rules, it jumped out at me that I really couldn't tell how each rule worked at a glance. SimpleInverseFire is one of my favorite rules in the MCell Weighted Life collection, but looking at its specifications left me unclear on how it worked. I don't know about you, but I couldn't immediately see why patterns and inverse patterns work the same way, and I certainly didn't understand its relationship to various totalistic lifelike rules.
NW5,NN1,NE5,WW1, ME0,EE1,SW5,SS1,SE5,HI0,RS1,RS5,RS9,RS13, RS17,RS18,RS19,RS21, RS23,RS24,RB2,RB4,RB8,RB9,RB10,RB12,RB13, RB14,RB16,RB17,RB18, RB20,RB21,RB22,RB24
I did notice that MCell's Simple, SimpleInverse, and SimpleInverseFire rules were rather similar to David Bell's JustFriends rule, and were also similar to Tropylium's SansDomino rulespace.
In David Bell's archive for the JustFriends rule, there is a collection of old mailing list messages in a file named "spaceships" that was really eye-opening. The participants there discuss three different notations which can represent JustFriends. Have a look, if you haven't already! David Bell and Alan Hensel suggest alternative more user-friendly ways to represent non-totalistic rules like Just Friends, while Jason Summers and Dean Hickerson discuss the best way to represent JustFriends in Weighted Life. I'm going to discuss each in turn, and list a few other schemes as well.
David Bell's notation: I found David Bell's notation a bit harder to use than Alan Hensel's, and so I haven't done much with it. If someone else would like to discuss its merits, I'd be very interested!
Alan Hensel's notation: Hensel's notation is an easier way to describe rules which are isotropic -- that is, patterns will work the same way after they rotated 90 or 180 degrees, and after they are flipped left-right or top-bottom. Alan Hensel introduces his scheme here: http://www.ibiblio.org/lifepatterns/neighbors.html
Alan does a really nice job of describing how his scheme works, and he provides a terrific graphical table of configurations.
Unfortunately, there is an opportunity for confusion over the lettering scheme. The notation on the above webpage appears to be the original version, the one referred to in the JustFriends spaceships file, but it doesn't appear to be used anywhere else. (It is because Alan Hensel does such a nice job of explaining his overall idea that I want to link to the page, despite the potential for confusion. ) Alan Hensel's applet, found elsewhere on his website, used an alternative version of the notation, but this capability isn't advertised.
Johan Bontes Life32 program also uses the same alternative version of Alan Hensel's notation, and it is intended for use by the public. Life32 can be found here: http://psoup.math.wisc.edu/Life32.html
Confusingly, "r" and "y" are swapped in Life32. Life32's rule dialog box shows the correct arrangements, but they are swapped in the implementation. What should work as 3r, 4r, and 5r, actually work as 3y, 4y, and 5y, and vice versa.
The "r" and "y" swap issue means that there is no official place to look up Hensel's notation as it is used in the Life32 program. However, to preserve compatibility with Life32, I vote for people to continue to use the Life32 version, as it is actually implemented. I'm including a graphical table of this version of Alan Hensel's notation below, and I've posted a script to allow Golly users to explore non-totalistic rules using this version of Hensel's notation here: viewtopic.php?f=9&t=933#p6815
Alan Hensel's notation, as implemented in Life32:
Code: Select all
x = 147, y = 97, rule = B/S012345678 21b3o6b5o5bo3bo6b3o6b5o5bo3bo5bo3bo6b3o10bo5b4o6b5o5bobobo5b5o$20bo3bo 5bo9bo2bo6bo3bo7bo7bo3bo5bo3bo5bo3bo9bo5bo3bo7bo7bobobo9bo$20bo9bo9bob o7bo3bo7bo7bo3bo5bo3bo5bo3bo9bo5bo3bo7bo7bobobo8bo$20bo9b3o7b2o8b5o7bo 7bo3bo6bobo6bo3bo9bo5b4o8bo7bobobo7bo$20bo9bo9bobo7bo3bo7bo7bo3bo7bo7b obobo5bo3bo5bo3bo7bo7bobobo6bo$20bo3bo5bo9bo2bo6bo3bo7bo8bobo8bo7bo2bo 6bo3bo5bo3bo7bo7bobobo5bo$21b3o6b5o5bo3bo5bo3bo5b5o7bo9bo8b2obo6b3o6bo 3bo7bo8bobo6b5o4$b3o6b7o$o3bo5bo5bo$o2b2o5bo5bo$obobo5bo2bo2bo$2o2bo5b o5bo$o3bo5bo5bo$b3o6b7o4$b2o17b7o3b7o$obo17bo5bo3bo5bo$2bo17bobo3bo3bo 2bo2bo$2bo17bo2bo2bo3bo2bo2bo$2bo17bo5bo3bo5bo$2bo17bo5bo3bo5bo$5o15b 7o3b7o4$b3o16b7o3b7o3b7o3b7o3b7o3b7o$o3bo15bo5bo3bo5bo3bo5bo3bo5bo3bo 5bo3bo5bo$4bo15bobobobo3bo2bo2bo3bobo3bo3bobo3bo3bo2bo2bo3bo3bobo$3bo 16bo2bo2bo3bob2o2bo3bo2bo2bo3bob2o2bo3bo2bo2bo3bo2bo2bo$2bo17bo5bo3bo 5bo3bo2bo2bo3bo5bo3bo2bo2bo3bobo3bo$bo18bo5bo3bo5bo3bo5bo3bo5bo3bo5bo 3bo5bo$5o15b7o3b7o3b7o3b7o3b7o3b7o4$b3o16b7o3b7o3b7o3b7o3b7o3b7o3b7o3b 7o3b7o3b7o$o3bo15bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo 3bo5bo$4bo15bobobobo3bo2bo2bo3bobo3bo3bob2o2bo3bo3bobo3bobobobo3bo2b2o bo3bo3bobo3bo3bobo3bobobobo$2b2o16bo2bo2bo3bob2o2bo3bo2b2obo3bob2o2bo 3bo2b2obo3bob2o2bo3bo2bo2bo3bo2bo2bo3bo2b2obo3bo2bo2bo$4bo15bobo3bo3bo 2bo2bo3bo2bo2bo3bo5bo3bo3bobo3bo5bo3bo2bo2bo3bob2o2bo3bo2bo2bo3bo2bo2b o$o3bo15bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo$b 3o16b7o3b7o3b7o3b7o3b7o3b7o3b7o3b7o3b7o3b7o4$2b2o16b7o3b7o3b7o3b7o3b7o 3b7o3b7o3b7o3b7o3b7o3b7o3b7o3b7o$bobo16bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3b o5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo$o2bo16bobobobo3bo2bo2bo 3bo2b2obo3bob3obo3bob2o2bo3bobobobo3bob2o2bo3bob2o2bo3bo3bobo3bobobobo 3bob3obo3bobo3bo3bob2o2bo$5o15bo2bo2bo3bob3obo3bob2o2bo3bob2o2bo3bo2bo 2bo3bob2o2bo3bob2o2bo3bob2o2bo3bob3obo3bo2bo2bo3bo2bo2bo3bob2o2bo3bo2b o2bo$3bo16bobobobo3bo2bo2bo3bo3bobo3bo5bo3bob2o2bo3bobo3bo3bo2bo2bo3bo 3bobo3bo2bo2bo3bob2o2bo3bo2bo2bo3bo2b2obo3bo2b2obo$3bo16bo5bo3bo5bo3bo 5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo$3bo16b 7o3b7o3b7o3b7o3b7o3b7o3b7o3b7o3b7o3b7o3b7o3b7o3b7o4$5o15b7o3b7o3b7o3b 7o3b7o3b7o3b7o3b7o3b7o3b7o$o19bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5b o3bo5bo3bo5bo3bo5bo$4o16bo2bo2bo3bobobobo3bo2b2obo3bo3bobo3bob2o2bo3bo bo3bo3bobobobo3bob2o2bo3bob2o2bo3bobobobo$4bo15bob3obo3bo2b2obo3bob2o 2bo3bo2b2obo3bob2o2bo3bob3obo3bob3obo3bob2o2bo3bob2o2bo3bob3obo$4bo15b o2b2obo3bobobobo3bobobobo3bob3obo3bob2o2bo3bob2o2bo3bobo3bo3bo2b2obo3b obobobo3bo2bo2bo$o3bo15bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo 3bo5bo3bo5bo$b3o16b7o3b7o3b7o3b7o3b7o3b7o3b7o3b7o3b7o3b7o4$b3o16b7o3b 7o3b7o3b7o3b7o3b7o$o3bo15bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo$o19bo2bo 2bo3bobobobo3bo2b2obo3bo2b2obo3bobobobo3bob2o2bo$4o16bob3obo3bo2b2obo 3bob3obo3bo2b2obo3bob3obo3bob3obo$o3bo15bob3obo3bob3obo3bobobobo3bob3o bo3bobobobo3bo2b2obo$o3bo15bo5bo3bo5bo3bo5bo3bo5bo3bo5bo3bo5bo$b3o16b 7o3b7o3b7o3b7o3b7o3b7o4$5o15b7o3b7o$4bo15bo5bo3bo5bo$3bo16bo2b2obo3bob 3obo$3bo16bob3obo3bo2b2obo$2bo17bob3obo3bob3obo$2bo17bo5bo3bo5bo$2bo 17b7o3b7o4$b3o6b7o$o3bo5bo5bo$o3bo5bob3obo$b3o6bob3obo$o3bo5bob3obo$o 3bo5bo5bo$b3o6b7o!
Code: Select all
x = 147, y = 97, rule = 012345678//3 21.3A6.5A5.A3.A6.3A6.5A5.A3.A5.A3.A6.3A10.A5.4A6.5A5.A.A.A5.5A$20.A3. A5.A9.A2.A6.A3.A7.A7.A3.A5.A3.A5.A3.A9.A5.A3.A7.A7.A.A.A9.A$20.A9.A9. A.A7.A3.A7.A7.A3.A5.A3.A5.A3.A9.A5.A3.A7.A7.A.A.A8.A$20.A9.3A7.2A8.5A 7.A7.A3.A6.A.A6.A3.A9.A5.4A8.A7.A.A.A7.A$20.A9.A9.A.A7.A3.A7.A7.A3.A 7.A7.A.A.A5.A3.A5.A3.A7.A7.A.A.A6.A$20.A3.A5.A9.A2.A6.A3.A7.A8.A.A8.A 7.A2.A6.A3.A5.A3.A7.A7.A.A.A5.A$21.3A6.5A5.A3.A5.A3.A5.5A7.A9.A8.2A.A 6.3A6.A3.A7.A8.A.A6.5A4$.3A6.7A$A3.A5.A5.A$A2.2A5.A5.A$A.A.A5.A2.B2.A $2A2.A5.A5.A$A3.A5.A5.A$.3A6.7A4$.2A17.7A3.7A$A.A17.A5.A3.A5.A$2.A17. A.A3.A3.A2.A2.A$2.A17.A2.B2.A3.A2.B2.A$2.A17.A5.A3.A5.A$2.A17.A5.A3.A 5.A$5A15.7A3.7A4$.3A16.7A3.7A3.7A3.7A3.7A3.7A$A3.A15.A5.A3.A5.A3.A5.A 3.A5.A3.A5.A3.A5.A$4.A15.A.A.A.A3.A2.A2.A3.A.A3.A3.A.A3.A3.A2.A2.A3.A 3.A.A$3.A16.A2.B2.A3.A.AB2.A3.A2.B2.A3.A.AB2.A3.A2.B2.A3.A2.B2.A$2.A 17.A5.A3.A5.A3.A2.A2.A3.A5.A3.A2.A2.A3.A.A3.A$.A18.A5.A3.A5.A3.A5.A3. A5.A3.A5.A3.A5.A$5A15.7A3.7A3.7A3.7A3.7A3.7A4$.3A16.7A3.7A3.7A3.7A3. 7A3.7A3.7A3.7A3.7A3.7A$A3.A15.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5. A3.A5.A3.A5.A3.A5.A$4.A15.A.A.A.A3.A2.A2.A3.A.A3.A3.A.2A2.A3.A3.A.A3. A.A.A.A3.A2.2A.A3.A3.A.A3.A3.A.A3.A.A.A.A$2.2A16.A2.B2.A3.A.AB2.A3.A 2.BA.A3.A.AB2.A3.A2.AB.A3.A.AB2.A3.A2.B2.A3.A2.B2.A3.A2.BA.A3.A2.B2.A $4.A15.A.A3.A3.A2.A2.A3.A2.A2.A3.A5.A3.A3.A.A3.A5.A3.A2.A2.A3.A.2A2.A 3.A2.A2.A3.A2.A2.A$A3.A15.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A 5.A3.A5.A3.A5.A$.3A16.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A4$2.2A16. 7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A$.A.A16.A5.A3.A5.A 3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A$A 2.A16.A.A.A.A3.A2.A2.A3.A2.2A.A3.A.3A.A3.A.2A2.A3.A.A.A.A3.A.2A2.A3.A .2A2.A3.A3.A.A3.A.A.A.A3.A.3A.A3.A.A3.A3.A.2A2.A$5A15.A2.B2.A3.A.ABA. A3.A.AB2.A3.A.AB2.A3.A2.B2.A3.A.AB2.A3.A.AB2.A3.A.AB2.A3.A.ABA.A3.A2. B2.A3.A2.B2.A3.A.AB2.A3.A2.B2.A$3.A16.A.A.A.A3.A2.A2.A3.A3.A.A3.A5.A 3.A.2A2.A3.A.A3.A3.A2.A2.A3.A3.A.A3.A2.A2.A3.A.A3.A3.A2.A2.A3.A2.2A.A 3.A2.2A.A$3.A16.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A 3.A5.A3.A5.A3.A5.A3.A5.A$3.A16.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A 3.7A3.7A3.7A4$5A15.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A3.7A$A19.A5.A3.A 5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A$4A16.A2.A2.A3.A.A .A.A3.A2.2A.A3.A3.A.A3.A.2A2.A3.A.A3.A3.A.A.A.A3.A.2A2.A3.A.2A2.A3.A. A.A.A$4.A15.A.ABA.A3.A2.BA.A3.A.AB2.A3.A2.AB.A3.A.AB2.A3.A.ABA.A3.A.A BA.A3.A.AB2.A3.A.AB2.A3.A.ABA.A$4.A15.A2.2A.A3.A.A.A.A3.A.A.A.A3.A.3A .A3.A.2A2.A3.A.2A2.A3.A.A3.A3.A2.2A.A3.A.A.A.A3.A2.A2.A$A3.A15.A5.A3. A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A$.3A16.7A3.7A3.7A 3.7A3.7A3.7A3.7A3.7A3.7A3.7A4$.3A16.7A3.7A3.7A3.7A3.7A3.7A$A3.A15.A5. A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A$A19.A2.A2.A3.A.A.A.A3.A2.2A.A3.A2.2A. A3.A.A.A.A3.A.2A2.A$4A16.A.ABA.A3.A2.BA.A3.A.ABA.A3.A2.BA.A3.A.ABA.A 3.A.ABA.A$A3.A15.A.3A.A3.A.3A.A3.A.A.A.A3.A.3A.A3.A.A.A.A3.A2.2A.A$A 3.A15.A5.A3.A5.A3.A5.A3.A5.A3.A5.A3.A5.A$.3A16.7A3.7A3.7A3.7A3.7A3.7A 4$5A15.7A3.7A$4.A15.A5.A3.A5.A$3.A16.A2.2A.A3.A.3A.A$3.A16.A.ABA.A3.A 2.BA.A$2.A17.A.3A.A3.A.3A.A$2.A17.A5.A3.A5.A$2.A17.7A3.7A4$.3A6.7A$A 3.A5.A5.A$A3.A5.A.3A.A$.3A6.A.ABA.A$A3.A5.A.3A.A$A3.A5.A5.A$.3A6.7A!
So back to Simple Inverse Fire....
Simple Inverse Fire in Alan Hensel's notation is B2ceiv4568/S156ak78. That's better -- now you can see the rule's inverse nature. And you can see the rule's relationship to B2 rules, and its relationship to JustFriends and the SansDomino rulespace. (JustFriends is B2-a/S12, or alternatively, B2ceikv/S12).
MCell's "Simple" rule is B2ceix/S1, and MCell's "Simple Inverse" is B2eicv56/S1456ak7, so again, you can see those rules relationship to each other, and to JustFriends and other SansDomino rules.
George Maydwell's notation: One problem using Hensel's notation is that it is hard to remember which letter goes with which configuration. Despite Hensel's attempt to use mnemonics, you really need to consult a chart to use the notation. George Maydwell solves this problem with his notation -- and you'll have to read his webpage to understand what comes next.
George Maydwell's notation: http://www.collidoscope.com/modernca/words.html
In Maydwell's notation, you only need to know the number of side neighbors (N, S, E, and W, as opposed to the corner neighbors NE, NW, SE, and SW). This means you can reconstruct the notation in your head -- you don't need to go find a special table. Brilliant!
You can look for interesting rules using Maydwell's rule checklab program here: http://www.collidoscope.com/cgolve/rulechecklab.html
It would be quite easy to create a Maydwell script for Golly, as I did for Hensel notation and Weighted life. And it is easy to convert Maydwell's notaion into Hensel notation or Weighted Life notation. If anyone wants scripts to do this and doesn't know how to create them, just ask.
Unfortunately, Maydwell's notation covers fewer cases than Alan Hensel, and in particular, you can't represent JustFriends in Maydwell's notation. This chart explains it:
Code: Select all
Hensel Maydwell ------------------------ 2c 2a (zero side cells) 2v 2a (zero side cells) 2k 2b (one side cells) 2a 2b (one side cells) 2e 2c (two side cells) 2i 2c (two side cells)
The clarity of Maydwell's notation comes at the expense of being able represent fewer rules. Of course, that's true of Hensel's notation as well -- its readablity comes at the expense of not being able to represent non-isotropic rules. It would be interesting to see a notation that allowed the generality of Weighted Life, but with greater readability. Maybe David Bell's notation?
Weights in Weighted Life: Understanding the distinction between George Maydwell's notation and Alan Hensel's notation helped me understand why MCell's weighted life rules look the way they do. If you run through the MCell collection, you'll see the same few weightings again and again -- essentially, these common weightings are different notation schemes.
Many MCell rules, such as Simple and Simple Inverse Fire, use this set of weights:
5 1 5
1 C 1
5 1 5
This set of weights distinguishes between corner cells and side cells -- it captures the same distinction George Maydwell does. All rules with this set of weights are isotropic, and can be represented using Hensel's notation, or Maydwell's.
Other rules use other weighting schemes where (NW = NE = SE = SW) and (N = E = S = W) and N != NW. For example, Ben's Rule uses this set of weights:
3 2 3
2 C 2
3 2 3
Again, the key distinction is between corner cells and side cells. The only difference from Simple's weights is that this set of weights allows the Birth and Survival values to do double duty -- RS6 (or RB6) can refer to three side cells or two corner cells. But you could rewrite Ben's rule to use Simple's weights, it would just need more birth and survival specifications to achieve the same thing. And you can rewrite Ben's rule in Hensel's notation, or Maydwell's. If you want to compare different rules, this sort of rewrite might be helpful. I've provided a script which translates isotropic Weighted Life rules into Alan Hensel's notation, for just this purpose here: viewtopic.php?f=9&t=933#p6816
Jason Summers used this set of weights to represent JustFriends:
Code: Select all
001 002 004 128 ccc 008 064 032 016
For a universal Hensel notation -> Weighted Life converter, Jason Summers' weights can be used.
And these weights can be used to represent any non-totalistic rule in the Moore neighborhood (and in smaller neighborhoods with 6, 4, or 2 neighbors).
Dean Hickerson, being a remarkably clever person, found weights that allowed JustFriends to be represented using fewer birth and survival values:
Dean Hickerson's weights mean that EE + SS == NN + SW. And WW + NN == SS + NE. That's fine for JustFriends, which was the goal. I'm not sure whether these same weights are useful for many other interesting rules as well.
Other common weighting schemes include non-isotropic "rotationally symmetric" weights, like this:
1 1 5
5 C 5
5 1 1
and Hexagonal weights, like this:
1 1 0
1 C 1
0 1 1
Paul Callahan's notation: Paul Callahan came up with a notation for six neighbor hexagonal neighborhoods. If you haven't already, be sure to read his article here:
http://www.radicaleye.com/lifepage/hexrule.txt and download this zip file: http://ruletablerepository.googlecode.c ... oS2m34.zip
As Callahan points out, his notation only covers the case of two neighbors. A good project would be to extend his notation to cover three and four neighbors (five and six neighbors don't need a notation, as there is only one configuration for each, in isotropic rules.)
Also: George Maydwell extended his notation for a 12 neighbor hexagonal neighborhood -- see the link above.
Stephen Wolfram's notation: Wolfram's 1 dimensional elementary cellular automata are non-totalistic. You can read about this notation in many places on the web, including here:
http://en.wikipedia.org/wiki/Elementary ... _automaton
and you can try out these cellular automata in Golly using the Quicklife algorithm.
Finally, of course, Golly's ruletable and ruletree formats are ways to represent non-totalistic rules.
If anyone knows of other useful notations, please comment!