Exploring 2x2 block rules

For discussion of other cellular automata.
Post Reply
User avatar
SuperSupermario24
Posts: 127
Joined: July 22nd, 2014, 12:59 pm
Location: Within the infinite expanses of the Life universe

Exploring 2x2 block rules

Post by SuperSupermario24 » March 4th, 2026, 8:20 pm

2x2 is known for being a 2x2 block CA, where any pattern made of 2x2 blocks will stay that way, emulating a Margolus block rule. While this property is well-known, I haven't seen much interest in the rulespace of 2x2 block CAs as a whole. Since there are only 64 of them, I just decided to go through them myself and see what they all look like. (I don't know if this has been done before, but even if it has, it was fun regardless :D)

Note that I'm only focused on 2x2 block patterns here, so I'll be looking at the simplest outer-totalistic rules that represent each block CA. These rules may or may not have interesting properties outside 2x2 block patterns, but they're not what I'm concerned with here.

Also note that I'm not a CA expert and I did all this on my own, so there might be some open questions, missing stuff, or mistakes in here. If anyone has any insights or corrections, please feel free to share :D

The "methodology"

My process here was pretty informal, and not very in-depth - I'm mostly interested in general properties, so I haven't looked at much more than a few random soups, small objects, and scribbles for each rule. Perhaps more systematic searches could find more stuff, but I wouldn't know where to start :)

To aid with enumerating the rules and making sure I didn't miss any, I came up with a simple Wolfram-like numbering system, where each bit is a specific set of transitions. From most to least significant: S8, B5/S67, B4/S4, B3/S5, B12/S3, and B0. So, for instance, rule 11 (binary 001011) corresponds to B0124/S34. I will be using this shorthand to refer to specific rules sometimes, though I'll always give their rulestring equivalents when introducing them.

I also made some scripts to assist with this, which I'll put at the bottom, so as not to take up a bunch of space here.

The rules

To get this out of the way: there aren't exactly any "Life-like" rules to be found here. Almost every rule is either B1 explosive, or else is incapable of escaping its initial bounding diamond. Strobing B0 rules do pose a theoretical exception to this, and there is in fact a family of B0 rules which are neither B1 explosive nor bounded (though they do still happen to be very explosive), which I'll look at in a bit more detail further down.

Also, many of these rules are black/white reversals of each other (though none are self-complementary). How these will be treated depends on the rule:
  • For rules with S8 and no B0 (even rules >= 32), complementary rules can still act quite differently on finite patterns, so I'll largely be treating them separately.
  • For rules without B0 or S8 (even rules < 32), their B0/S8 complementary rules (odd rules > 32) will be treated as basically equivalent.
  • For strobing B0 rules (odd rules < 32), I'll also be treating their complementary rules as equivalent, though they can sometimes appear to behave slightly different in Golly/LifeViewer due to how they're emulated.
For the latter two cases, I'll generally use the lower rule number as the "canonical" version, though for B0 rules I believe this choice is pretty arbitrary.

I'll start with a bunch of trivial / uninteresting rule families that I really have nothing to say about. Rules in italics are trivial B/W reversals of the rule immediately before it.
  • all finite patterns die: 0 (B/S), 63 (B012345/S345678), 8 (B4/S4), 55 (B01235/S35678), 16 (B5/S67), 61 (B0345/S45678), 24 (B45/S467), 53 (B035/S5678), 32 (B/S8), 40 (B4/S48), 48 (B5/S678), 56 (B45/S4678)
  • patterns stabilize after 1 generation: 1 (B0/S), 31 (B012345/S34567)
  • nonnotable B1 rules: 2 (B12/S3), 47 (B01234/S3458), 10 (B124/S34), 39 (B0123/S358), 26 (B1245/S3467), 37 (B03/S58), 34 (B12/S38), 38 (B123/S358), 42 (B124/S348), 46 (B1234/S3458), 54 (B1235/S35678), 62 (B12345/S345678)
  • nonnotable B1 rules but I kinda like the patterns they make: 6 (B123/S35), 43 (B0124/S348), 14 (B1234/S345), 35 (B012/S38), 22 (B1235/S3567), 41 (B04/S48), 30 (B12345/S34567), 33 (B0/S8), 50 (B125/S3678)
  • B0 rules that just act like B1 ones: 17 (B05/S67), 29 (B0345/S4567), 21 (B035/S567), 25 (B045/S467)
The rest of the rules do have some notable properties, so let's go through them, in roughly increasing order of how interesting I think they are:

Vote-like rules

Rules 3 (B012/S3) and 7 (B0123/S35) exhibit Vote-esque behavior when starting from random patterns, very quickly stabilizing into smoothed-out versions:

Code: Select all

#C [[ THUMBNAIL AUTOSTART WIDTH 600 HEIGHT 600 HISTORYSTATES 15 LOOP 25 GPS 8 ]]
x = 80, y = 80, rule = B01234/S345
4b4o8b8o2b8o2b6o2b6o2b4o2b2o4b2o2b2o2b2o$4b4o8b8o2b8o2b6o2b6o2b4o2b2o
4b2o2b2o2b2o$10b16o12b2o6b4o2b2o8b4o4b4o2b2o$10b16o12b2o6b4o2b2o8b4o4b
4o2b2o$2b4o6b2o4b8o4b4o4b4o8b4o2b4o4b2o4b4o$2b4o6b2o4b8o4b4o4b4o8b4o2b
4o4b2o4b4o$10b12o6b2o2b6o6b2o4b2o2b2o2b4o2b4o2b8o$10b12o6b2o2b6o6b2o4b
2o2b2o2b4o2b4o2b8o$8b6o2b2o2b2o2b4o2b2o2b2o2b4o2b10o2b2o8b4o4b2o2b2o$
8b6o2b2o2b2o2b4o2b2o2b2o2b4o2b10o2b2o8b4o4b2o2b2o$2o4b2o16b2o4b6o6b4o
2b4o2b4o4b4o4b8o$2o4b2o16b2o4b6o6b4o2b4o2b4o4b4o4b8o$4b2o8b2o4b2o4b6o
4b4o4b4o4b4o4b8o8b4o$4b2o8b2o4b2o4b6o4b4o4b4o4b4o4b8o8b4o$2b2o2b2o6b2o
8b2o6b2o4b8o2b4o2b8o10b2o$2b2o2b2o6b2o8b2o6b2o4b8o2b4o2b8o10b2o$4b2o2b
2o6b2o2b6o2b4o6b4o4b2o2b4o4b2o2b2o4b12o$4b2o2b2o6b2o2b6o2b4o6b4o4b2o2b
4o4b2o2b2o4b12o$4b4o2b2o2b2o2b4o2b2o8b2o2b8o4b2o2b2o2b2o2b6o2b2o6b2o$
4b4o2b2o2b2o2b4o2b2o8b2o2b8o4b2o2b2o2b2o2b6o2b2o6b2o$18b4o4b2o4b6o2b2o
2b2o2b6o2b4o2b4o2b10o$18b4o4b2o4b6o2b2o2b2o2b6o2b4o2b4o2b10o$6b4o2b2o
2b2o6b2o4b2o4b4o6b4o2b10o2b2o4b8o$6b4o2b2o2b2o6b2o4b2o4b4o6b4o2b10o2b
2o4b8o$2b2o2b6o2b6o2b4o2b2o2b4o2b8o2b4o2b2o2b2o4b4o4b4o$2b2o2b6o2b6o2b
4o2b2o2b4o2b8o2b4o2b2o2b2o4b4o4b4o$2b2o2b2o2b2o2b2o2b2o2b4o4b14o4b4o2b
4o2b4o8b8o$2b2o2b2o2b2o2b2o2b2o2b4o4b14o4b4o2b4o2b4o8b8o$2o2b8o6b4o4b
2o4b6o8b6o2b4o2b4o2b4o2b2o2b2o$2o2b8o6b4o4b2o4b6o8b6o2b4o2b4o2b4o2b2o
2b2o$2o8b6o2b8o2b2o10b4o4b6o2b2o6b4o10b2o$2o8b6o2b8o2b2o10b4o4b6o2b2o
6b4o10b2o$4b2o10b4o2b2o2b6o2b2o8b4o2b2o4b2o6b4o2b2o6b2o$4b2o10b4o2b2o
2b6o2b2o8b4o2b2o4b2o6b4o2b2o6b2o$10o4b2o6b6o6b4o2b2o2b8o2b4o6b4o4b4o2b
2o$10o4b2o6b6o6b4o2b2o2b8o2b4o6b4o4b4o2b2o$2o8b2o2b4o2b2o2b6o6b10o8b2o
4b6o8b2o2b2o$2o8b2o2b4o2b2o2b6o6b10o8b2o4b6o8b2o2b2o$4o2b2o4b4o2b2o14b
8o6b4o4b2o10b4o4b4o$4o2b2o4b4o2b2o14b8o6b4o4b2o10b4o4b4o$2o2b6o2b2o4b
2o6b4o2b10o4b10o2b4o6b8o$2o2b6o2b2o4b2o6b4o2b10o4b10o2b4o6b8o$6o2b4o2b
2o2b8o6b2o4b2o2b6o10b2o4b2o4b2o2b2o$6o2b4o2b2o2b8o6b2o4b2o2b6o10b2o4b
2o4b2o2b2o$2b14o4b6o4b6o2b8o2b2o2b2o2b2o4b2o2b2o4b2o4b2o$2b14o4b6o4b6o
2b8o2b2o2b2o2b2o4b2o2b2o4b2o4b2o$4o2b2o2b4o10b2o6b2o2b2o2b6o10b2o2b2o
2b14o$4o2b2o2b4o10b2o6b2o2b2o2b6o10b2o2b2o2b14o$4b2o4b6o4b2o2b4o8b4o2b
6o6b6o2b6o2b2o4b2o$4b2o4b6o4b2o2b4o8b4o2b6o6b6o2b6o2b2o4b2o$2o2b2o2b4o
2b2o2b4o2b2o2b4o4b6o4b2o6b2o8b2o8b4o$2o2b2o2b4o2b2o2b4o2b2o2b4o4b6o4b
2o6b2o8b2o8b4o$6b8o4b8o6b6o2b2o4b2o4b2o2b2o2b2o2b2o8b2o$6b8o4b8o6b6o2b
2o4b2o4b2o2b2o2b2o2b2o8b2o$2o14b2o2b2o4b2o2b2o2b2o2b2o2b2o2b2o2b4o10b
2o2b2o4b6o$2o14b2o2b2o4b2o2b2o2b2o2b2o2b2o2b2o2b4o10b2o2b2o4b6o$4o4b6o
2b2o2b2o2b6o6b2o4b2o4b2o2b4o2b2o4b2o8b2o$4o4b6o2b2o2b2o2b6o6b2o4b2o4b
2o2b4o2b2o4b2o8b2o$2b6o2b2o4b4o6b6o2b4o2b2o2b2o4b4o8b2o4b2o6b2o$2b6o2b
2o4b4o6b6o2b4o2b2o2b2o4b4o8b2o4b2o6b2o$2o2b8o2b4o2b6o6b2o2b12o2b2o4b4o
6b4o8b2o$2o2b8o2b4o2b6o6b2o2b12o2b2o4b4o6b4o8b2o$2b4o10b6o10b4o4b2o2b
2o2b2o8b2o2b8o8b2o$2b4o10b6o10b4o4b2o2b2o2b2o8b2o2b8o8b2o$2o6b8o4b2o2b
2o2b2o2b4o6b6o8b2o4b2o8b8o$2o6b8o4b2o2b2o2b2o2b4o6b6o8b2o4b2o8b8o$6b4o
18b6o2b14o8b2o6b6o2b2o$6b4o18b6o2b14o8b2o6b6o2b2o$2b10o2b2o6b6o2b2o2b
4o2b8o6b14o2b4o$2b10o2b2o6b6o2b2o2b4o2b8o6b14o2b4o$10b4o2b2o4b6o6b4o4b
6o4b2o2b4o6b2o2b6o2b2o$10b4o2b2o4b6o6b4o4b6o4b2o2b4o6b2o2b6o2b2o$4o6b
2o2b2o2b6o20b10o2b2o4b4o2b2o4b4o$4o6b2o2b2o2b6o20b10o2b2o4b4o2b2o4b4o$
2o4b8o4b6o4b2o8b2o2b2o6b4o4b4o2b2o2b2o4b2o$2o4b8o4b6o4b2o8b2o2b2o6b4o
4b4o2b2o2b2o4b2o$4o4b4o2b2o2b4o2b10o2b6o2b2o2b4o2b6o2b2o2b4o2b8o$4o4b
4o2b2o2b4o2b10o2b6o2b2o2b4o2b6o2b2o2b4o2b8o$2o2b2o8b2o2b2o2b2o4b2o6b4o
4b4o6b4o4b2o12b2o$2o2b2o8b2o2b2o2b2o4b2o6b4o4b4o6b4o4b2o12b2o!
(Rules 15 (B01234/S345) and 11 (B0124/S34) are the trivial B/W reversals of 3 and 7 respectively.)

Diamond rules

Rules 28 (B345/S4567), 52 (B35/S5678), and 60 (B345/S45678) expand to fill, or nearly fill, their bounding diamonds.

52 and 60 are very similar, creating solid diamonds. I like setting them to a low density and watching them expand to take over most of the pattern:

Code: Select all

#C [[ THUMBNAIL AUTOSTART WIDTH 600 HEIGHT 600 LOOP 270 ZOOM 5 GRID ]]
x = 80, y = 80, rule = B35/S5678
2o2b2o6b2o8b2o18b2o6b2o22b4o$2o2b2o6b2o8b2o18b2o6b2o22b4o$2b2o12b2o2b
2o6b2o4b2o6b2o2b2o30b2o$2b2o12b2o2b2o6b2o4b2o6b2o2b2o30b2o$4b4o2b2o10b
2o4b2o16b2o16b2o4b2o$4b4o2b2o10b2o4b2o16b2o16b2o4b2o$2b2o4b2o16b2o4b2o
8b2o6b4o2b2o$2b2o4b2o16b2o4b2o8b2o6b4o2b2o$48b2o4b2o4b4o$48b2o4b2o4b4o
$6b2o10b2o6b2o2b2o6b2o2b2o12b2o8b2o2b4o$6b2o10b2o6b2o2b2o6b2o2b2o12b2o
8b2o2b4o$2o4b2o6b2o2b2o10b2o6b2o12b2o$2o4b2o6b2o2b2o10b2o6b2o12b2o$28b
2o4b2o24b2o2b2o6b2o2b2o$28b2o4b2o24b2o2b2o6b2o2b2o$22b2o14b8o2b2o2b2o
8b2o14b2o$22b2o14b8o2b2o2b2o8b2o14b2o$18b2o2b2o8b2o6b2o8b2o4b2o2b2o14b
2o$18b2o2b2o8b2o6b2o8b2o4b2o2b2o14b2o$4b8o2b2o10b6o2b2o14b2o10b2o6b2o
4b2o$4b8o2b2o10b6o2b2o14b2o10b2o6b2o4b2o$2b2o4b2o2b2o4b4o2b2o2b4o6b6o
4b2o16b2o$2b2o4b2o2b2o4b4o2b2o2b4o6b6o4b2o16b2o$16b4o2b2o4b2o2b2o8b2o
2b2o16b2o2b2o$16b4o2b2o4b2o2b2o8b2o2b2o16b2o2b2o$2b2o6b2o14b2o10b4o18b
2o2b2o12b2o$2b2o6b2o14b2o10b4o18b2o2b2o12b2o$14b2o6b2o6b2o22b2o8b2o2b
2o$14b2o6b2o6b2o22b2o8b2o2b2o$14b2o4b2o8b2o4b2o4b2o10b2o18b2o$14b2o4b
2o8b2o4b2o4b2o10b2o18b2o$2b2o12b2o2b2o2b2o4b2o6b2o14b2o8b2o12b2o$2b2o
12b2o2b2o2b2o4b2o6b2o14b2o8b2o12b2o$12b2o14b4o8b4o10b2o4b2o8b2o$12b2o
14b4o8b4o10b2o4b2o8b2o$4b2o8b4o4b2o14b2o6b2o2b2o6b2o8b2o2b2o$4b2o8b4o
4b2o14b2o6b2o2b2o6b2o8b2o2b2o$10b2o4b2o12b2o4b2o6b2o10b2o14b2o4b2o$10b
2o4b2o12b2o4b2o6b2o10b2o14b2o4b2o$2b2o6b2o2b2o2b2o14b2o14b2o6b6o6b2o2b
4o$2b2o6b2o2b2o2b2o14b2o14b2o6b6o6b2o2b4o$2b2o8b4o22b2o10b2o6b2o2b2o$
2b2o8b4o22b2o10b2o6b2o2b2o$4b2o24b2o24b2o8b2o2b2o$4b2o24b2o24b2o8b2o2b
2o$18b2o10b4o10b8o$18b2o10b4o10b8o$4b2o2b2o4b4o20b2o2b2o6b2o2b6o10b2o
4b2o$4b2o2b2o4b4o20b2o2b2o6b2o2b6o10b2o4b2o$2b2o4b6o4b4o4b2o2b4o10b4o
6b2o8b4o2b2o2b2o$2b2o4b6o4b4o4b2o2b4o10b4o6b2o8b4o2b2o2b2o$2o12b4o2b2o
2b2o6b2o$2o12b4o2b2o2b2o6b2o$2o14b2o4b2o4b8o10b4o8b2o$2o14b2o4b2o4b8o
10b4o8b2o$2b2o2b2o42b4o$2b2o2b2o42b4o$4o6b2o4b2o8b2o2b2o4b2o16b4o4b2o
12b2o$4o6b2o4b2o8b2o2b2o4b2o16b4o4b2o12b2o$4o2b2o4b4o2b2o8b2o6b2o4b2o
12b4o$4o2b2o4b4o2b2o8b2o6b2o4b2o12b4o$26b2o12b2o2b2o20b2o6b2o2b2o$26b
2o12b2o2b2o20b2o6b2o2b2o$4b2o6b2o4b4o16b2o16b2o8b2o$4b2o6b2o4b4o16b2o
16b2o8b2o$12b2o2b2o6b6o22b4o12b2o$12b2o2b2o6b6o22b4o12b2o$14b2o10b2o4b
2o18b2o16b4o$14b2o10b2o4b2o18b2o16b4o$2o8b2o6b2o14b2o2b4o12b2o6b2o2b2o
$2o8b2o6b2o14b2o2b4o12b2o6b2o2b2o$4b2o4b4o8b2o10b2o2b4o4b2o2b2o20b2o4b
2o$4b2o4b4o8b2o10b2o2b4o4b2o2b2o20b2o4b2o$4b2o14b2o2b6o16b2o2b2o24b2o$
4b2o14b2o2b6o16b2o2b2o24b2o$2b2o2b2o2b2o26b2o2b2o6b2o22b2o$2b2o2b2o2b
2o26b2o2b2o6b2o22b2o$4b2o6b2o6b2o2b2o12b2o12b4o6b2o6b2o$4b2o6b2o6b2o2b
2o12b2o12b4o6b2o6b2o!

Rule 28 (B345/S4567) (and its trivial B/W reversal, 49 (B05/S678)), on the other hand, does not create solid diamonds, but instead very chaotic ones:

Code: Select all

#C [[ THUMBNAIL AUTOSTART WIDTH 600 HEIGHT 600 LOOP 270 ZOOM 4 GRID ]]
x = 80, y = 80, rule = B345/S4567
2o8b2o10b2o16b2o2b2o4b2o26b2o$2o8b2o10b2o16b2o2b2o4b2o26b2o$22b2o16b2o
10b2o24b2o$22b2o16b2o10b2o24b2o$2b4o16b2o2b2o6b2o8b2o$2b4o16b2o2b2o6b
2o8b2o$2b4o18b2o24b2o4b2o6b2o8b2o2b2o$2b4o18b2o24b2o4b2o6b2o8b2o2b2o$
2b2o2b2o2b4o2b2o20b2o4b2o6b4o10b2o$2b2o2b2o2b4o2b2o20b2o4b2o6b4o10b2o$
14b4o8b2o16b2o22b2o2b2o$14b4o8b2o16b2o22b2o2b2o$14b2o4b6o2b2o20b2o6b2o
4b2o$14b2o4b6o2b2o20b2o6b2o4b2o$2b2o48b2o2b2o20b2o$2b2o48b2o2b2o20b2o$
2o2b2o10b2o12b2o16b2o4b4o$2o2b2o10b2o12b2o16b2o4b4o$10b2o6b2o48b2o$10b
2o6b2o48b2o$4b2o2b4o4b4o22b2o6b2o10b2o$4b2o2b4o4b4o22b2o6b2o10b2o$8b4o
2b2o2b4o14b6o6b2o2b2o4b2o16b4o$8b4o2b2o2b4o14b6o6b2o2b2o4b2o16b4o$20b
2o26b2o10b2o12b2o$20b2o26b2o10b2o12b2o$26b2o10b6o2b2o10b2o2b2o10b4o$
26b2o10b6o2b2o10b2o2b2o10b4o$8b4o10b2o8b2o8b4o22b2o2b2o$8b4o10b2o8b2o
8b4o22b2o2b2o$4o2b4o2b4o4b2o12b2o10b2o10b2o8b2o4b4o$4o2b4o2b4o4b2o12b
2o10b2o10b2o8b2o4b4o$22b4o8b2o2b2o2b2o2b4o2b2o24b2o$22b4o8b2o2b2o2b2o
2b4o2b2o24b2o$10b2o22b2o6b2o8b4o8b2o4b2o$10b2o22b2o6b2o8b4o8b2o4b2o$
14b2o6b2o10b2o20b2o8b2o4b2o$14b2o6b2o10b2o20b2o8b2o4b2o$30b2o6b2o22b2o
4b4o6b2o$30b2o6b2o22b2o4b4o6b2o$8b4o16b2o18b2o$8b4o16b2o18b2o$2b2o16b
4o10b4o10b4o$2b2o16b4o10b4o10b4o$4b4o6b2o2b2o4b4o2b2o14b2o14b2o12b2o$
4b4o6b2o2b2o4b4o2b2o14b2o14b2o12b2o$8b2o2b4o4b2o8b2o28b2o4b4o$8b2o2b4o
4b2o8b2o28b2o4b4o$8b2o14b2o8b2o26b2o$8b2o14b2o8b2o26b2o$16b2o2b2o26b2o
2b2o4b2o4b2o4b2o$16b2o2b2o26b2o2b2o4b2o4b2o4b2o$2b2o10b2o10b2o2b2o10b
2o18b2o8b2o4b2o$2b2o10b2o10b2o2b2o10b2o18b2o8b2o4b2o$24b4o30b2o$24b4o
30b2o$4b2o2b2o2b6o2b4o6b2o2b2o10b2o6b2o8b8o2b2o$4b2o2b2o2b6o2b4o6b2o2b
2o10b2o6b2o8b8o2b2o$2b2o16b2o10b4o18b2o6b2o10b2o$2b2o16b2o10b4o18b2o6b
2o10b2o$2o8b4o2b2o16b2o2b2o6b2o18b2o4b2o$2o8b4o2b2o16b2o2b2o6b2o18b2o
4b2o$18b2o4b2o12b2o6b4o8b4o$18b2o4b2o12b2o6b4o8b4o$6b4o10b2o4b4o4b2o
26b2o$6b4o10b2o4b4o4b2o26b2o$4b4o16b4o16b2o14b2o2b2o$4b4o16b4o16b2o14b
2o2b2o$2b2o28b2o16b4o14b2o6b2o$2b2o28b2o16b4o14b2o6b2o$4b2o6b2o44b2o6b
2o$4b2o6b2o44b2o6b2o$2b2o8b2o2b2o6b2o2b2o6b6o26b2o6b2o$2b2o8b2o2b2o6b
2o2b2o6b6o26b2o6b2o$2o14b2o14b4o18b2o2b2o8b2o$2o14b2o14b4o18b2o2b2o8b
2o$14b4o6b2o6b2o2b2o18b4o2b2o12b2o$14b4o6b2o6b2o2b2o18b4o2b2o12b2o$6b
2o14b6o16b2o6b2o8b2o8b2o$6b2o14b6o16b2o6b2o8b2o8b2o!

I swear I've seen very similar-looking oscillators in another outer-totalistic rule before, but I can't think of it offhand.

2x2-like rules

Rules 4 (B3/S5), 12 (B34/S45), 20 (B35/S567), 36 (B3/S58), and 44 (B34/S458) all show similar dynamics to the classic 2x2 rule. In fact 4 (B3/S5) is exactly the same as 2x2, and 36 (B3/S58) is what LifeWiki calls 2x2 2. (Rules 59 (B01245/S34678), 51 (B0125/S3678), and 57 (B045/S4678) are trivial B/W reversals of 4, 12, and 20 respectively.)

All of these rules quickly stabilize into oscillators when given random seeds, though 20 (B35/S567) results in notably denser ash and a somewhat larger variety of oscillators compared to the others:

Code: Select all

#C [[ THUMBNAIL AUTOSTART WIDTH 600 HEIGHT 600 LOOP 200 GRID ]]
x = 60, y = 60, rule = B35/S567
4b2o8b4o8b4o4b2o6b10o2b2o$4b2o8b4o8b4o4b2o6b10o2b2o$2o2b6o2b2o6b10o2b
4o4b2o2b2o2b2o6b2o$2o2b6o2b2o6b10o2b4o4b2o2b2o2b2o6b2o$4b4o4b2o2b6o6b
2o12b4o4b2o4b2o$4b4o4b2o2b6o6b2o12b4o4b2o4b2o$2b2o6b8o4b2o2b4o4b2o2b4o
2b10o2b4o$2b2o6b8o4b2o2b4o4b2o2b4o2b10o2b4o$4o4b2o2b4o4b2o2b4o6b2o2b2o
2b2o2b4o4b6o$4o4b2o2b4o4b2o2b4o6b2o2b2o2b2o2b4o4b6o$2o4b4o4b4o4b2o12b
6o2b6o2b6o$2o4b4o4b4o4b2o12b6o2b6o2b6o$2o10b2o2b20o4b2o4b2o2b2o2b6o$2o
10b2o2b20o4b2o4b2o2b2o2b6o$8b6o4b2o2b4o2b2o2b2o2b4o6b2o6b2o$8b6o4b2o2b
4o2b2o2b2o2b4o6b2o6b2o$4o2b6o4b4o2b2o2b6o4b2o2b12o2b2o$4o2b6o4b4o2b2o
2b6o4b2o2b12o2b2o$2o4b2o2b4o2b2o4b10o4b2o4b2o6b4o2b4o$2o4b2o2b4o2b2o4b
10o4b2o4b2o6b4o2b4o$2b4o4b2o2b4o2b4o6b4o2b8o2b4o2b8o$2b4o4b2o2b4o2b4o
6b4o2b8o2b4o2b8o$2o2b2o4b4o2b2o2b4o2b6o2b2o2b4o12b2o$2o2b2o4b4o2b2o2b
4o2b6o2b2o2b4o12b2o$2b4o2b6o4b6o2b4o4b4o6b4o2b4o$2b4o2b6o4b6o2b4o4b4o
6b4o2b4o$4b2o4b4o6b2o2b4o2b12o4b4o2b2o4b2o$4b2o4b4o6b2o2b4o2b12o4b4o2b
2o4b2o$2o4b4o2b2o2b6o8b2o2b2o2b6o4b2o4b2o2b2o$2o4b4o2b2o2b6o8b2o2b2o2b
6o4b2o4b2o2b2o$2b6o2b2o2b2o2b2o4b4o2b8o2b4o6b4o$2b6o2b2o2b2o2b2o4b4o2b
8o2b4o6b4o$4b4o2b2o4b2o8b6o4b6o2b4o2b2o2b2o$4b4o2b2o4b2o8b6o4b6o2b4o2b
2o2b2o$4o2b2o4b2o2b2o2b6o4b12o2b4o6b2o$4o2b2o4b2o2b2o2b6o4b12o2b4o6b2o
$2b2o6b6o2b4o6b4o2b4o2b10o4b2o$2b2o6b6o2b4o6b4o2b4o2b10o4b2o$2o2b4o8b
2o2b2o2b2o4b10o2b8o4b4o$2o2b4o8b2o2b2o2b2o4b10o2b8o4b4o$4o2b2o6b2o2b
12o2b18o2b2o$4o2b2o6b2o2b12o2b18o2b2o$2b6o4b4o2b6o6b2o6b6o2b12o$2b6o4b
4o2b6o6b2o6b6o2b12o$2b2o4b4o4b4o2b2o2b4o2b4o2b4o2b2o4b2o2b2o2b2o$2b2o
4b4o4b4o2b2o2b4o2b4o2b4o2b2o4b2o2b2o2b2o$4o12b2o2b2o12b6o2b4o2b4o4b4o$
4o12b2o2b2o12b6o2b4o2b4o4b4o$6b2o4b2o2b4o6b6o2b2o4b6o10b2o$6b2o4b2o2b
4o6b6o2b2o4b6o10b2o$2b2o2b2o2b4o2b4o4b2o4b2o2b2o2b8o2b2o2b2o4b2o$2b2o
2b2o2b4o2b4o4b2o4b2o2b2o2b8o2b2o2b2o4b2o$6o4b2o6b6o2b8o4b2o2b2o4b2o4b
2o$6o4b2o6b6o2b8o4b2o2b2o4b2o4b2o$10o8b4o6b2o6b2o2b2o4b6o6b2o$10o8b4o
6b2o6b2o2b2o4b6o6b2o$4o2b2o4b2o2b6o4b6o14b4o2b4o$4o2b2o4b2o2b6o4b6o14b
4o2b4o$2o8b6o4b2o2b10o2b4o2b4o2b4o2b4o$2o8b6o4b2o2b10o2b4o2b4o2b4o2b4o!

More notable is their behavior when started with long lines. 4 (2x2) and 20 behave the exact same, resulting in complex oscillators:

Code: Select all

#C [[ THUMBNAIL AUTOSTART WIDTH 600 HEIGHT 600 GRID ]]
x = 162, y = 2, rule = B3/S5
162o$162o!

36 (2x2 2) also results in oscillators, with different (but related) behavior:

Code: Select all

#C [[ THUMBNAIL AUTOSTART WIDTH 600 HEIGHT 600 GRID ]]
x = 162, y = 2, rule = B3/S58
162o$162o!

12 instead quickly dies out:

Code: Select all

#C [[ THUMBNAIL AUTOSTART WIDTH 600 HEIGHT 600 LOOP 200 GRID ]]
x = 162, y = 2, rule = B34/S45
162o$162o!

And 44 leaves behind stable objects, reminiscent of Life:

Code: Select all

#C [[ THUMBNAIL AUTOSTART WIDTH 600 HEIGHT 600 LOOP 200 GRID ]]
x = 162, y = 2, rule = B34/S458
162o$162o!

B1 but it's actually interesting

Most B1 rules are pretty boring, but there are a couple with interesting behavior.

Rule 58 (B1245/S34678) is the black/white reversal of 36 (2x2 2), and when started with a complex-enough seed, shows some very complex edge behavior (no preview because you have to run it for a while to see it):

Code: Select all

x = 16, y = 16, rule = B1245/S34678
2o2b4o$2o2b4o$4o4b2o2b4o$4o4b2o2b4o$6b2o2b2o2b2o$6b2o2b2o2b2o$2b4o2b2o
2b2o$2b4o2b2o2b2o$2b2o6b4o$2b2o6b4o$2o2b4o2b2o2b2o$2o2b4o2b2o2b2o$2o4b
6o$2o4b6o$2o2b2o6b2o$2o2b2o6b2o!
Meanwhile, rule 18 (B125/S367) (and its trivial B/W reversal, 45 (B034/S458)) turns out to be a replicator rule specifically for 2x2 block patterns:

Code: Select all

#C [[ THUMBNAIL AUTOSTART WIDTH 600 HEIGHT 600 GPS 8 LOOP 33 ZOOM 6 GRID ]]
x = 12, y = 10, rule = B125/S367
2b2o4b2o$2b2o4b2o$2b2o4b2o$2b2o4b2o3$2o8b2o$2o8b2o$2b8o$2b8o!
Note that this is not just a subset of the standard replicator rules (B1357/S1357 and B1357/S02468), but is fundamentally different. For instance, this rule only creates 4 copies per replication cycle, unlike the other two which make 8 and 9 respectively.

B2-like expansion

Rules 5 (B03/S5) and 13 (B034/S45) are the only rules that don't stay bounded and don't act like B1 rules. (Rules 27 (B01245/S3467) and 19 (B0125/S367) are the trivial B/W reversals of 5 and 13 respectively.)

Now, it turns out they share similar explosive behavior, but it's more reminiscent of B2 (or perhaps B1e?) expansion than B1(c):

Code: Select all

#C [[ THUMBNAIL AUTOSTART WIDTH 600 HEIGHT 600 LOOP 120 ZOOM 2.5 GRID ]]
x = 4, y = 6, rule = B03/S5
2b2o$2b2o$2b2o$2b2o$2o$2o!

These rules are particularly noteworthy for being, as far as I can tell, the only 2x2 block rules where both stable and infinitely expanding / moving objects can exist. For instance, rule 5 has a large pond as a stable object, and it has a simple replicator:

Code: Select all

#C [[ THUMBNAIL AUTOSTART WIDTH 600 HEIGHT 600 GPS 4 LOOP 34 ZOOM 8 GRID ]]
x = 8, y = 27, rule = B03/S5
2b4o$2b4o18$2b4o$2b4o$2o4b2o$2o4b2o$2o4b2o$2o4b2o$2b4o$2b4o!
And in rule 13, every sufficiently large rectangle is stable (it also shares the same replicator, not shown):

Code: Select all

#C [[ THUMBNAIL AUTOSTART WIDTH 600 HEIGHT 600 GPS 4 LOOP 8 GRID ]]
x = 30, y = 30, rule = B034/S45
4o6b6o6b8o$4o6b6o6b8o$4o6b6o6b8o$4o6b6o6b8o7$4o6b6o6b8o$4o6b6o6b8o$4o
6b6o6b8o$4o6b6o6b8o$4o6b6o6b8o$4o6b6o6b8o7$4o6b6o6b8o$4o6b6o6b8o$4o6b
6o6b8o$4o6b6o6b8o$4o6b6o6b8o$4o6b6o6b8o$4o6b6o6b8o$4o6b6o6b8o!

This also means that, I believe, these are the only block rules which can theoretically support spaceships. It's unclear whether either of them actually do in practice, but I have no idea how I'd prove or disprove this.

UPDATE: Apparently there are indeed known spaceships for both of these rules, see this post.

Signals?

Rule 9 (B04/S4) (and its trivial B/W reversal, 23 (B01235/S3567)), while it can't escape its initial bounding box, still seems to show class-4-esque behavior inside its bounding box on random patterns, with regions of chaos that eventually stabilize (no preview because it's hard to see at the small scale I've been using):

Code: Select all

x = 160, y = 160, rule = B04/S4
2b2o2b2o6b2o4b8o4b4o4b16o6b4o2b8o2b2o2b2o4b2o6b20o4b2o2b12o2b4o4b6o$2b
2o2b2o6b2o4b8o4b4o4b16o6b4o2b8o2b2o2b2o4b2o6b20o4b2o2b12o2b4o4b6o$4o2b
4o2b4o4b12o2b4o8b2o4b4o4b2o6b2o2b2o6b2o2b2o12b4o6b4o2b6o2b2o4b4o2b2o2b
2o6b10o2b2o$4o2b4o2b4o4b12o2b4o8b2o4b4o4b2o6b2o2b2o6b2o2b2o12b4o6b4o2b
6o2b2o4b4o2b2o2b2o6b10o2b2o$4o6b2o6b8o2b2o2b4o2b2o4b6o4b14o2b2o4b6o2b
4o4b4o4b10o6b2o4b2o4b2o2b6o10b4o6b2o$4o6b2o6b8o2b2o2b4o2b2o4b6o4b14o2b
2o4b6o2b4o4b4o4b10o6b2o4b2o4b2o2b6o10b4o6b2o$6b2o4b4o4b2o8b10o8b2o2b4o
2b4o2b4o12b2o8b2o2b2o2b2o12b2o4b2o2b4o2b2o2b2o4b4o6b2o6b2o$6b2o4b4o4b
2o8b10o8b2o2b4o2b4o2b4o12b2o8b2o2b2o2b2o12b2o4b2o2b4o2b2o2b2o4b4o6b2o
6b2o$2o4b8o2b6o2b4o2b2o2b2o8b4o2b4o4b8o2b2o2b4o4b2o2b2o4b10o2b2o4b2o2b
2o4b2o4b4o2b4o2b4o4b6o4b2o2b2o$2o4b8o2b6o2b4o2b2o2b2o8b4o2b4o4b8o2b2o
2b4o4b2o2b2o4b10o2b2o4b2o2b2o4b2o4b4o2b4o2b4o4b6o4b2o2b2o$2b6o2b8o2b2o
4b2o2b4o2b2o12b2o2b6o2b2o2b4o6b2o2b2o4b2o8b6o4b4o6b2o6b14o2b4o8b2o$2b
6o2b8o2b2o4b2o2b4o2b2o12b2o2b6o2b2o2b4o6b2o2b2o4b2o8b6o4b4o6b2o6b14o2b
4o8b2o$2o4b6o2b8o2b2o4b2o2b8o2b8o4b2o10b8o2b4o4b6o4b6o4b6o2b2o10b6o2b
6o2b2o6b4o2b2o$2o4b6o2b8o2b2o4b2o2b8o2b8o4b2o10b8o2b4o4b6o4b6o4b6o2b2o
10b6o2b6o2b2o6b4o2b2o$2b2o2b2o4b2o6b2o6b2o2b2o2b2o4b8o2b2o2b2o4b2o4b2o
2b4o2b2o6b2o2b2o4b10o2b2o14b2o2b4o6b6o2b2o$2b2o2b2o4b2o6b2o6b2o2b2o2b
2o4b8o2b2o2b2o4b2o4b2o2b4o2b2o6b2o2b2o4b10o2b2o14b2o2b4o6b6o2b2o$4b10o
2b2o4b2o6b2o4b6o2b6o2b8o2b2o2b8o4b8o8b6o8b2o2b4o6b2o2b8o10b2o8b4o$4b
10o2b2o4b2o6b2o4b6o2b6o2b8o2b2o2b8o4b8o8b6o8b2o2b4o6b2o2b8o10b2o8b4o$
2b4o4b6o8b2o2b2o6b10o2b2o4b2o6b8o2b4o6b2o2b2o2b2o2b8o4b2o2b4o4b2o2b2o
12b2o8b2o8b2o$2b4o4b6o8b2o2b2o6b10o2b2o4b2o6b8o2b4o6b2o2b2o2b2o2b8o4b
2o2b4o4b2o2b2o12b2o8b2o8b2o$2o2b2o2b10o2b2o2b2o6b2o6b6o2b4o2b4o4b6o10b
2o8b2o4b2o2b2o2b4o2b4o4b2o6b2o10b4o2b2o2b10o2b2o$2o2b2o2b10o2b2o2b2o6b
2o6b6o2b4o2b4o4b6o10b2o8b2o4b2o2b2o2b4o2b4o4b2o6b2o10b4o2b2o2b10o2b2o$
8o2b2o2b2o8b2o2b2o2b10o6b2o4b4o6b2o4b6o4b6o2b4o4b2o10b2o4b2o4b2o8b8o2b
2o6b4o4b4o$8o2b2o2b2o8b2o2b2o2b10o6b2o4b4o6b2o4b6o4b6o2b4o4b2o10b2o4b
2o4b2o8b8o2b2o6b4o4b4o$6b2o2b6o2b2o2b4o4b10o4b4o2b2o6b2o4b2o2b4o2b6o2b
2o2b2o2b4o4b4o4b2o2b2o6b4o2b4o6b2o4b2o4b2o6b6o$6b2o2b6o2b2o2b4o4b10o4b
4o2b2o6b2o4b2o2b4o2b6o2b2o2b2o2b4o4b4o4b2o2b2o6b4o2b4o6b2o4b2o4b2o6b6o
$4o2b6o2b4o4b2o6b4o2b2o2b4o2b4o2b2o4b2o8b2o2b2o4b10o4b6o6b2o2b2o2b4o2b
2o4b8o4b6o2b2o4b8o$4o2b6o2b4o4b2o6b4o2b2o2b4o2b4o2b2o4b2o8b2o2b2o4b10o
4b6o6b2o2b2o2b4o2b2o4b8o4b6o2b2o4b8o$2b2o2b4o2b4o10b2o2b12o2b2o14b2o2b
12o4b2o2b2o2b4o4b2o2b2o6b2o10b4o2b4o2b4o2b4o4b4o4b6o$2b2o2b4o2b4o10b2o
2b12o2b2o14b2o2b12o4b2o2b2o2b4o4b2o2b2o6b2o10b4o2b4o2b4o2b4o4b4o4b6o$
2b2o8b2o4b8o2b8o4b2o18b4o4b4o6b4o2b6o2b4o4b4o2b2o6b6o2b2o2b4o2b4o4b18o
$2b2o8b2o4b8o2b8o4b2o18b4o4b4o6b4o2b6o2b4o4b4o2b2o6b6o2b2o2b4o2b4o4b
18o$2o2b2o2b6o2b6o2b4o4b2o4b6o4b4o2b2o2b4o2b6o2b2o2b4o6b4o10b2o8b12o4b
2o4b4o2b2o2b10o2b2o$2o2b2o2b6o2b6o2b4o4b2o4b6o4b4o2b2o2b4o2b6o2b2o2b4o
6b4o10b2o8b12o4b2o4b4o2b2o2b10o2b2o$6b2o2b6o4b4o2b2o4b4o4b12o2b2o2b2o
2b4o4b2o8b2o2b2o10b2o2b2o6b8o2b2o2b10o2b2o2b4o2b2o2b2o8b2o$6b2o2b6o4b
4o2b2o4b4o4b12o2b2o2b2o2b4o4b2o8b2o2b2o10b2o2b2o6b8o2b2o2b10o2b2o2b4o
2b2o2b2o8b2o$2b4o4b10o2b2o4b6o2b2o2b6o4b4o2b2o6b2o4b2o2b2o2b2o4b2o2b6o
2b4o4b2o2b2o2b4o2b4o2b2o4b2o16b4o2b2o2b2o$2b4o4b10o2b2o4b6o2b2o2b6o4b
4o2b2o6b2o4b2o2b2o2b2o4b2o2b6o2b4o4b2o2b2o2b4o2b4o2b2o4b2o16b4o2b2o2b
2o$2o6b2o2b4o2b4o2b2o2b2o2b4o6b8o2b2o4b2o4b10o6b2o2b6o4b4o2b4o2b6o6b2o
4b2o2b4o8b14o2b4o$2o6b2o2b4o2b4o2b2o2b2o2b4o6b8o2b2o4b2o4b10o6b2o2b6o
4b4o2b4o2b6o6b2o4b2o2b4o8b14o2b4o$10o2b4o2b4o2b2o2b4o2b2o4b2o8b2o2b4o
4b2o2b8o2b2o2b2o8b4o2b10o2b4o10b2o2b2o2b2o4b2o4b2o2b2o2b4o4b2o$10o2b4o
2b4o2b2o2b4o2b2o4b2o8b2o2b4o4b2o2b8o2b2o2b2o8b4o2b10o2b4o10b2o2b2o2b2o
4b2o4b2o2b2o2b4o4b2o$6o8b14o2b2o2b10o2b2o8b2o2b2o2b2o4b2o2b6o16b4o2b8o
2b4o6b2o2b2o4b2o2b8o2b10o2b2o$6o8b14o2b2o2b10o2b2o8b2o2b2o2b2o4b2o2b6o
16b4o2b8o2b4o6b2o2b2o4b2o2b8o2b10o2b2o$4b4o2b12o4b2o2b2o8b4o2b2o4b6o2b
8o4b2o4b2o2b2o2b2o4b2o8b2o4b4o2b2o6b2o2b4o2b2o6b2o6b6o2b2o$4b4o2b12o4b
2o2b2o8b4o2b2o4b6o2b8o4b2o4b2o2b2o2b2o4b2o8b2o4b4o2b2o6b2o2b4o2b2o6b2o
6b6o2b2o$2b2o2b2o2b4o2b2o8b2o4b6o4b4o2b2o2b2o2b2o2b4o2b2o6b4o4b4o2b4o
4b2o2b4o6b2o2b2o6b14o12b4o$2b2o2b2o2b4o2b2o8b2o4b6o4b4o2b2o2b2o2b2o2b
4o2b2o6b4o4b4o2b4o4b2o2b4o6b2o2b2o6b14o12b4o$2o2b6o4b2o4b2o2b8o4b2o4b
8o8b4o10b2o2b6o2b2o2b4o2b4o6b6o6b4o6b4o2b8o2b8o6b2o$2o2b6o4b2o4b2o2b8o
4b2o4b8o8b4o10b2o2b6o2b2o2b4o2b4o6b6o6b4o6b4o2b8o2b8o6b2o$4b12o14b4o2b
6o2b2o2b2o2b6o4b8o4b6o6b18o10b2o8b4o6b4o4b4o2b4o4b2o$4b12o14b4o2b6o2b
2o2b2o2b6o4b8o4b6o6b18o10b2o8b4o6b4o4b4o2b4o4b2o$2o4b2o2b2o2b2o2b2o4b
4o2b2o6b10o4b8o2b6o4b2o8b4o2b12o2b2o8b6o2b2o2b6o2b16o2b2o2b6o$2o4b2o2b
2o2b2o2b2o4b4o2b2o6b10o4b8o2b6o4b2o8b4o2b12o2b2o8b6o2b2o2b6o2b16o2b2o
2b6o$4b2o20b2o2b14o6b2o6b2o2b2o8b2o4b2o2b2o6b2o2b8o2b12o10b2o2b4o4b4o
2b4o2b2o2b2o2b2o$4b2o20b2o2b14o6b2o6b2o2b2o8b2o4b2o2b2o6b2o2b8o2b12o
10b2o2b4o4b4o2b4o2b2o2b2o2b2o$12b4o2b4o2b4o4b4o2b4o4b2o4b2o4b2o2b2o22b
2o4b4o8b10o2b6o2b4o8b4o4b8o2b6o$12b4o2b4o2b4o4b4o2b4o4b2o4b2o4b2o2b2o
22b2o4b4o8b10o2b6o2b4o8b4o4b8o2b6o$2b6o2b4o2b6o2b2o2b8o2b4o4b2o2b4o4b
6o2b2o8b2o2b2o2b2o2b8o2b12o8b4o2b2o2b6o6b6o6b4o$2b6o2b4o2b6o2b2o2b8o2b
4o4b2o2b4o4b6o2b2o8b2o2b2o2b2o2b8o2b12o8b4o2b2o2b6o6b6o6b4o$8o4b4o6b2o
2b4o4b8o8b2o2b4o2b4o10b2o8b2o2b4o2b6o2b10o4b2o2b4o2b4o2b2o2b4o2b2o6b4o
2b4o$8o4b4o6b2o2b4o4b8o8b2o2b4o2b4o10b2o8b2o2b4o2b6o2b10o4b2o2b4o2b4o
2b2o2b4o2b2o6b4o2b4o$4b4o6b4o2b6o2b2o2b2o2b8o2b4o8b4o8b8o2b4o4b2o4b2o
4b2o4b10o6b2o2b4o2b8o2b6o4b2o2b4o$4b4o6b4o2b6o2b2o2b2o2b8o2b4o8b4o8b8o
2b4o4b2o4b2o4b2o4b10o6b2o2b4o2b8o2b6o4b2o2b4o$2o2b10o2b6o2b2o2b4o2b2o
6b8o10b2o2b8o2b4o2b4o4b4o2b2o8b4o2b2o4b4o8b2o2b2o8b4o6b4o$2o2b10o2b6o
2b2o2b4o2b2o6b8o10b2o2b8o2b4o2b4o4b4o2b2o8b4o2b2o4b4o8b2o2b2o8b4o6b4o$
8b4o2b8o2b4o6b4o2b8o2b2o6b2o2b4o4b8o4b2o2b6o6b4o6b4o4b8o4b4o4b10o6b2o
2b2o$8b4o2b8o2b4o6b4o2b8o2b2o6b2o2b4o4b8o4b2o2b6o6b4o6b4o4b8o4b4o4b10o
6b2o2b2o$8b4o4b10o2b2o10b4o2b4o8b2o2b4o2b2o2b8o2b2o4b6o2b8o2b6o2b2o8b
8o2b8o4b12o$8b4o4b10o2b2o10b4o2b4o8b2o2b4o2b2o2b8o2b2o4b6o2b8o2b6o2b2o
8b8o2b8o4b12o$4b2o4b2o2b4o4b2o2b2o2b6o6b2o2b4o12b4o4b16o2b4o12b4o4b4o
2b4o2b4o4b2o2b2o6b6o2b2o4b2o$4b2o4b2o2b4o4b2o2b2o2b6o6b2o2b4o12b4o4b
16o2b4o12b4o4b4o2b4o2b4o4b2o2b2o6b6o2b2o4b2o$6b2o6b2o6b8o2b2o6b2o4b4o
6b2o2b12o6b10o10b4o2b4o4b4o4b6o2b10o2b8o2b4o$6b2o6b2o6b8o2b2o6b2o4b4o
6b2o2b12o6b10o10b4o2b4o4b4o4b6o2b10o2b8o2b4o$2o8b4o6b4o10b6o8b10o2b2o
4b2o8b2o2b2o8b4o2b20o2b8o2b4o2b4o4b8o2b2o2b2o$2o8b4o6b4o10b6o8b10o2b2o
4b2o8b2o2b2o8b4o2b20o2b8o2b4o2b4o4b8o2b2o2b2o$6b4o2b4o8b2o4b4o2b2o6b2o
4b6o2b4o10b4o4b6o4b2o2b6o12b4o2b2o4b4o2b8o2b4o2b4o2b4o2b2o$6b4o2b4o8b
2o4b4o2b2o6b2o4b6o2b4o10b4o4b6o4b2o2b6o12b4o2b2o4b4o2b8o2b4o2b4o2b4o2b
2o$2b4o4b12o2b4o4b2o2b4o6b4o2b2o2b4o2b2o2b4o2b2o6b4o2b4o10b2o6b8o8b6o
4b2o2b6o4b4o2b2o$2b4o4b12o2b4o4b2o2b4o6b4o2b2o2b4o2b2o2b4o2b2o6b4o2b4o
10b2o6b8o8b6o4b2o2b6o4b4o2b2o$6o2b4o2b4o4b4o4b2o2b8o4b4o6b12o2b4o4b4o
2b2o2b2o2b8o2b2o2b4o6b6o2b2o4b2o4b2o2b2o12b2o$6o2b4o2b4o4b4o4b2o2b8o4b
4o6b12o2b4o4b4o2b2o2b2o2b8o2b2o2b4o6b6o2b2o4b2o4b2o2b2o12b2o$10b2o4b4o
14b2o4b8o6b2o2b2o2b2o2b6o4b6o2b4o4b4o4b4o2b2o2b6o2b4o2b2o2b2o4b12o2b4o
2b6o$10b2o4b4o14b2o4b8o6b2o2b2o2b2o2b6o4b6o2b4o4b4o4b4o2b2o2b6o2b4o2b
2o2b2o4b12o2b4o2b6o$8b2o6b4o4b2o2b12o4b4o4b10o2b6o2b10o8b2o2b6o4b2o2b
12o6b4o6b10o4b10o$8b2o6b4o4b2o2b12o4b4o4b10o2b6o2b10o8b2o2b6o4b2o2b12o
6b4o6b10o4b10o$2b6o6b8o10b2o2b6o4b2o2b2o2b4o6b6o2b2o2b6o4b2o4b2o2b6o2b
2o4b2o2b4o4b2o2b2o2b4o6b2o4b2o2b10o$2b6o6b8o10b2o2b6o4b2o2b2o2b4o6b6o
2b2o2b6o4b2o4b2o2b6o2b2o4b2o2b4o4b2o2b2o2b4o6b2o4b2o2b10o$4b2o2b10o2b
2o2b2o8b6o2b8o2b4o8b8o2b2o2b6o2b2o6b2o2b4o6b2o4b2o2b4o2b6o2b2o4b6o8b4o
2b2o$4b2o2b10o2b2o2b2o8b6o2b8o2b4o8b8o2b2o2b6o2b2o6b2o2b4o6b2o4b2o2b4o
2b6o2b2o4b6o8b4o2b2o$2o2b10o6b6o8b2o6b2o2b8o4b6o4b8o6b10o2b4o6b2o2b2o
4b8o4b6o2b2o2b2o2b2o2b10o$2o2b10o6b6o8b2o6b2o2b8o4b6o4b8o6b10o2b4o6b2o
2b2o4b8o4b6o2b2o2b2o2b2o2b10o$2o8b6o2b8o2b2o2b2o4b6o4b4o2b4o2b2o2b2o2b
2o2b2o2b10o2b4o2b8o8b4o10b2o4b12o4b2o4b2o2b4o$2o8b6o2b8o2b2o2b2o4b6o4b
4o2b4o2b2o2b2o2b2o2b2o2b10o2b4o2b8o8b4o10b2o4b12o4b2o4b2o2b4o$2o2b6o
14b4o4b2o2b6o4b2o2b4o2b2o2b4o4b2o2b2o2b2o4b2o10b4o2b2o4b2o2b2o4b10o2b
4o2b4o2b4o2b2o4b2o2b4o$2o2b6o14b4o4b2o2b6o4b2o2b4o2b2o2b4o4b2o2b2o2b2o
4b2o10b4o2b2o4b2o2b2o4b10o2b4o2b4o2b4o2b2o4b2o2b4o$2o2b2o6b6o2b2o2b4o
2b2o2b2o2b2o4b4o4b4o4b2o2b6o2b6o2b2o8b4o2b14o8b2o2b6o6b2o4b2o4b4o4b4o$
2o2b2o6b6o2b2o2b4o2b2o2b2o2b2o4b4o4b4o4b2o2b6o2b6o2b2o8b4o2b14o8b2o2b
6o6b2o4b2o4b4o4b4o$2o4b2o6b4o2b4o2b2o6b6o2b4o2b8o10b4o8b2o2b6o2b6o2b2o
2b2o6b4o2b2o2b6o6b4o4b2o4b2o2b4o$2o4b2o6b4o2b4o2b2o6b6o2b4o2b8o10b4o8b
2o2b6o2b6o2b2o2b2o6b4o2b2o2b6o6b4o4b2o4b2o2b4o$2b4o2b12o6b4o8b8o4b6o2b
2o8b2o2b2o2b6o4b6o2b2o6b4o2b2o4b6o2b4o2b4o8b2o2b8o4b2o$2b4o2b12o6b4o8b
8o4b6o2b2o8b2o2b2o2b6o4b6o2b2o6b4o2b2o4b6o2b4o2b4o8b2o2b8o4b2o$2o2b8o
2b6o2b2o2b4o6b4o2b6o4b4o4b4o10b2o8b4o2b4o4b2o2b2o2b2o2b4o4b2o2b2o6b2o
2b4o2b2o4b4o4b2o2b2o$2o2b8o2b6o2b2o2b4o6b4o2b6o4b4o4b4o10b2o8b4o2b4o4b
2o2b2o2b2o2b4o4b2o2b2o6b2o2b4o2b2o4b4o4b2o2b2o$10o2b2o2b2o4b8o4b2o2b6o
6b2o2b4o2b2o10b2o2b2o2b2o2b4o16b6o2b6o8b4o4b2o2b2o2b12o4b2o$10o2b2o2b
2o4b8o4b2o2b6o6b2o2b4o2b2o10b2o2b2o2b2o2b4o16b6o2b6o8b4o4b2o2b2o2b12o
4b2o$2o4b2o6b2o2b6o2b4o2b2o6b6o2b2o2b10o12b6o2b2o4b8o4b2o4b4o6b2o6b8o
4b2o2b2o2b4o4b2o$2o4b2o6b2o2b6o2b4o2b2o6b6o2b2o2b10o12b6o2b2o4b8o4b2o
4b4o6b2o6b8o4b2o2b2o2b4o4b2o$6o2b6o6b8o6b6o2b2o2b2o2b2o2b2o2b2o4b6o2b
14o2b2o2b2o2b2o2b2o8b2o2b2o8b4o2b4o14b4o2b4o$6o2b6o6b8o6b6o2b2o2b2o2b
2o2b2o2b2o4b6o2b14o2b2o2b2o2b2o2b2o8b2o2b2o8b4o2b4o14b4o2b4o$2o2b8o2b
2o2b6o10b2o2b2o6b2o2b4o2b2o2b2o4b2o4b8o2b2o6b2o12b2o6b2o4b6o2b2o4b6o8b
2o4b2o$2o2b8o2b2o2b6o10b2o2b2o6b2o2b4o2b2o2b2o4b2o4b8o2b2o6b2o12b2o6b
2o4b6o2b2o4b6o8b2o4b2o$2o4b2o2b2o4b4o6b6o4b4o4b2o4b10o2b2o4b2o4b2o4b2o
4b8o2b6o2b2o2b2o4b2o2b2o4b12o2b2o2b4o2b6o2b2o$2o4b2o2b2o4b4o6b6o4b4o4b
2o4b10o2b2o4b2o4b2o4b2o4b8o2b6o2b2o2b2o4b2o2b2o4b12o2b2o2b4o2b6o2b2o$
8b2o2b2o2b2o2b2o2b2o2b2o8b8o4b2o2b10o16b2o4b2o2b12o2b4o2b2o4b6o4b2o4b
2o8b2o6b2o2b6o$8b2o2b2o2b2o2b2o2b2o2b2o8b8o4b2o2b10o16b2o4b2o2b12o2b4o
2b2o4b6o4b2o4b2o8b2o6b2o2b6o$2o6b2o4b10o4b6o2b2o2b6o4b2o4b2o2b4o4b4o4b
2o12b2o4b4o4b2o4b2o4b2o6b4o2b6o2b10o2b4o$2o6b2o4b10o4b6o2b2o2b6o4b2o4b
2o2b4o4b4o4b2o12b2o4b4o4b2o4b2o4b2o6b4o2b6o2b10o2b4o$4o2b4o2b2o6b2o2b
10o4b2o8b4o8b4o2b8o10b2o6b4o2b4o4b2o2b2o4b2o10b2o4b4o4b12o2b4o$4o2b4o
2b2o6b2o2b10o4b2o8b4o8b4o2b8o10b2o6b4o2b4o4b2o2b2o4b2o10b2o4b4o4b12o2b
4o$6o2b2o8b2o8b2o8b4o4b2o12b2o4b2o2b2o10b12o2b6o2b2o2b2o2b2o2b2o2b2o2b
4o2b4o2b4o2b6o8b4o$6o2b2o8b2o8b2o8b4o4b2o12b2o4b2o2b2o10b12o2b6o2b2o2b
2o2b2o2b2o2b2o2b4o2b4o2b4o2b6o8b4o$4b2o4b4o2b4o2b6o4b4o2b6o4b4o2b10o2b
2o8b2o4b2o2b4o4b4o4b6o4b4o4b4o4b4o4b2o4b2o8b6o$4b2o4b4o2b4o2b6o4b4o2b
6o4b4o2b10o2b2o8b2o4b2o2b4o4b4o4b6o4b4o4b4o4b4o4b2o4b2o8b6o$2o4b2o2b4o
2b4o2b4o10b2o8b10o4b10o2b2o4b4o2b2o4b8o2b2o2b2o16b4o2b10o2b2o4b2o2b6o$
2o4b2o2b4o2b4o2b4o10b2o8b10o4b10o2b2o4b4o2b2o4b8o2b2o2b2o16b4o2b10o2b
2o4b2o2b6o$2b4o4b4o4b2o4b2o2b2o2b6o2b2o4b4o2b4o2b14o2b2o6b4o6b2o6b2o6b
4o8b4o6b4o2b6o4b2o2b10o$2b4o4b4o4b2o4b2o2b2o2b6o2b2o4b4o2b4o2b14o2b2o
6b4o6b2o6b2o6b4o8b4o6b4o2b6o4b2o2b10o$2b2o4b8o4b10o2b2o6b2o4b2o8b2o2b
2o2b6o8b2o6b4o14b2o4b12o4b2o4b2o2b4o6b2o2b2o6b2o$2b2o4b8o4b10o2b2o6b2o
4b2o8b2o2b2o2b6o8b2o6b4o14b2o4b12o4b2o4b2o2b4o6b2o2b2o6b2o$2o4b4o2b4o
4b2o2b2o8b2o4b2o8b2o2b8o2b2o4b2o2b2o2b2o2b8o2b8o4b12o10b4o4b2o2b2o2b2o
6b2o2b2o2b2o$2o4b4o2b4o4b2o2b2o8b2o4b2o8b2o2b8o2b2o4b2o2b2o2b2o2b8o2b
8o4b12o10b4o4b2o2b2o2b2o6b2o2b2o2b2o$2b6o2b4o8b2o2b8o4b4o2b2o4b2o2b6o
6b6o12b4o2b2o4b2o4b2o2b4o2b8o10b2o4b4o10b4o2b4o$2b6o2b4o8b2o2b8o4b4o2b
2o4b2o2b6o6b6o12b4o2b2o4b2o4b2o2b4o2b8o10b2o4b4o10b4o2b4o$2o6b4o2b2o2b
2o2b2o8b2o2b2o2b8o4b2o4b14o2b4o2b4o2b4o4b2o4b4o2b2o2b4o8b8o2b6o2b2o16b
2o$2o6b4o2b2o2b2o2b2o8b2o2b2o2b8o4b2o4b14o2b4o2b4o2b4o4b2o4b4o2b2o2b4o
8b8o2b6o2b2o16b2o$2b2o10b2o2b6o2b4o2b2o6b2o2b2o2b6o6b2o4b4o2b10o2b4o2b
2o2b4o6b4o2b2o2b6o2b4o4b2o4b2o2b2o6b4o2b2o$2b2o10b2o2b6o2b4o2b2o6b2o2b
2o2b6o6b2o4b4o2b10o2b4o2b2o2b4o6b4o2b2o2b6o2b4o4b2o4b2o2b2o6b4o2b2o$2o
4b4o2b2o4b4o2b2o4b4o2b2o8b2o6b8o2b6o4b6o2b2o4b4o4b4o2b2o6b6o6b2o2b6o
12b4o2b2o4b4o$2o4b4o2b2o4b4o2b2o4b4o2b2o8b2o6b8o2b6o4b6o2b2o4b4o4b4o2b
2o6b6o6b2o2b6o12b4o2b2o4b4o$2b8o6b6o12b2o8b4o2b2o2b2o2b2o6b2o4b2o2b2o
2b2o8b4o2b2o2b2o2b2o6b2o6b2o2b6o4b2o2b2o8b12o$2b8o6b6o12b2o8b4o2b2o2b
2o2b2o6b2o4b2o2b2o2b2o8b4o2b2o2b2o2b2o6b2o6b2o2b6o4b2o2b2o8b12o$2b2o2b
4o4b2o4b4o2b4o2b4o2b2o2b6o4b2o8b6o2b2o2b2o6b4o12b6o2b2o2b2o2b4o2b2o2b
2o2b8o2b4o4b6o4b2o$2b2o2b4o4b2o4b4o2b4o2b4o2b2o2b6o4b2o8b6o2b2o2b2o6b
4o12b6o2b2o2b2o2b4o2b2o2b2o2b8o2b4o4b6o4b2o$2o10b2o2b2o4b2o4b4o2b8o2b
4o2b2o6b4o2b4o8b4o4b2o2b2o2b4o4b2o4b6o4b2o2b6o4b2o6b10o6b6o$2o10b2o2b
2o4b2o4b4o2b8o2b4o2b2o6b4o2b4o8b4o4b2o2b2o2b4o4b2o4b6o4b2o2b6o4b2o6b
10o6b6o$4o2b4o2b2o2b4o2b4o4b2o8b4o4b4o6b2o6b4o4b2o20b2o8b16o2b10o6b6o
2b2o2b2o4b2o$4o2b4o2b2o2b4o2b4o4b2o8b4o4b4o6b2o6b4o4b2o20b2o8b16o2b10o
6b6o2b2o2b2o4b2o$2o2b2o10b4o2b4o6b4o6b4o2b6o6b2o4b6o2b2o2b4o12b4o2b2o
2b6o2b6o2b6o4b4o2b2o6b6o$2o2b2o10b4o2b4o6b4o6b4o2b6o6b2o4b6o2b2o2b4o
12b4o2b2o2b6o2b6o2b6o4b4o2b2o6b6o$14b8o2b2o2b4o6b2o2b4o4b4o2b10o6b16o
6b4o10b4o4b2o2b4o2b10o2b2o6b2o2b4o2b4o$14b8o2b2o2b4o6b2o2b4o4b4o2b10o
6b16o6b4o10b4o4b2o2b4o2b10o2b2o6b2o2b4o2b4o$2b6o6b2o2b2o2b2o4b4o4b2o6b
2o6b2o4b4o2b4o2b2o2b4o2b6o4b4o10b16o12b8o2b4o$2b6o6b2o2b2o2b2o4b4o4b2o
6b2o6b2o4b4o2b4o2b2o2b4o2b6o4b4o10b16o12b8o2b4o$4b4o2b2o4b2o2b6o2b2o4b
6o2b4o8b2o4b2o4b4o4b2o2b4o2b8o2b2o18b6o2b6o2b2o10b2o4b4o2b6o$4b4o2b2o
4b2o2b6o2b2o4b6o2b4o8b2o4b2o4b4o4b2o2b4o2b8o2b2o18b6o2b6o2b2o10b2o4b4o
2b6o$8b6o2b2o2b8o2b2o6b4o2b2o8b2o4b10o2b8o4b8o2b2o4b2o4b2o2b6o4b4o2b4o
2b2o6b4o4b6o2b2o$8b6o2b2o2b8o2b2o6b4o2b2o8b2o4b10o2b8o4b8o2b2o4b2o4b2o
2b6o4b4o2b4o2b2o6b4o4b6o2b2o$6b2o4b10o4b2o2b2o2b2o4b2o8b4o4b2o2b4o8b2o
2b6o2b6o4b10o8b2o4b6o2b2o2b8o6b4o4b6o$6b2o4b10o4b2o2b2o2b2o4b2o8b4o4b
2o2b4o8b2o2b6o2b6o4b10o8b2o4b6o2b2o2b8o6b4o4b6o!
The action seems to primarily happen on the edges that divide regions of black and white, which seems like it might be exploitable to create some sort of circuitry. I'm not experienced enough to give this a real go, but it does feel like there might be some potential:

Code: Select all

#C [[ THUMBNAIL AUTOSTART WIDTH 600 HEIGHT 600 GPS 16 LOOP 70 GRID ]]
x = 50, y = 10, rule = B04/S4
22b2o$22b2o$8b2o12b2o$8b2o12b2o$6o4b40o$6o4b40o$40o4b6o$40o4b6o$40b2o$
40b2o!

Scaling similarity

One interesting property of the classic 2x2 rule (rule 4) is what I'll call "scaling similarity" (for lack of a seemingly well-established term), which means that the rule effectively simulates itself over a larger time scale when patterns are scaled up by factors of 2. For instance, a pattern made of 4x4 blocks will stay as 4x4 blocks every other generation, and simulate the same 2x2 block rule on those generations. A pattern made of 8x8 blocks will do the same, but every 4th generation; and so on.

It turns out scaling similarity is not universal for 2x2 block rules. Here's a list of all the rules which seem to show this behavior, listed together with their B/W reversals:

Code: Select all

 0 (B/S), 63 (B012345/S345678) (trivially)
 2 (B12/S3), 47 (B01234/S3458)
 4 (B3/S5), 59 (B01245/S34678) (2x2)
10 (B124/S34), 39 (B0123/S358)
18 (B125/S367), 45 (B034/S458) (replicator rule)
22 (B1235/S3567), 41 (B04/S48)
26 (B1245/S3467), 37 (B03/S58)
30 (B12345/S34567), 33 (B0/S8)
32 (B/S8), 62 (B12345/S345678)
36 (B3/S58), 58 (B1245/S34678) (2x2 2)
38 (B123/S358), 42 (B124/S348)
Strobing B0 rules all lack this property, and for convenience, here's all the rest which also lack it:

Code: Select all

 6 (B123/S35), 43 (B0124/S348)
 8 (B4/S4), 55 (B01235/S35678)
12 (B34/S45), 51 (B0125/S3678)
14 (B1234/S345), 35 (B012/S38)
16 (B5/S67), 61 (B0345/S45678)
20 (B35/S567), 57 (B045/S4678)
24 (B45/S467), 53 (B035/S5678)
28 (B345/S4567), 49 (B05/S678)
34 (B12/S38), 46 (B1234/S3458)
40 (B4/S48), 54 (B1235/S35678)
44 (B34/S458), 50 (B125/S3678)
48 (B5/S678), 60 (B345/S45678)
52 (B35/S5678), 56 (B45/S4678)
I'm honestly not sure what the differentiating factor is. There are some noticeable trends, like being much more common on B1 rules, but the exact criteria is unclear to me from this list. Maybe it'll jump out at someone else?

Scripts

Finally, here's a bunch of scripts I made to help with investigating 2x2 block rules.

First, here's one that converts my rule numbers into regular OT rulestrings:

Code: Select all

-- quickly generates any possible 2x2 block rule
-- https://conwaylife.com/wiki/OCA:2%C3%972#Block_evolution

local g = golly()
local gp = require "gplus"

local ruleNum = gp.int(tonumber(g.getstring("Enter 2x2 rule (0-63):")))

if ruleNum < 0 or ruleNum > 63 then g.exit("Given rule is out of range.") end

local bStr = ""
local sStr = ""

local function getbit(num, bit)
    return (num >> bit) % 2 == 1
end

if getbit(ruleNum, 0) then -- B0
    bStr = bStr .. "0"
end
if getbit(ruleNum, 1) then -- B12/S3
    bStr = bStr .. "12"
    sStr = sStr .. "3"
end
if getbit(ruleNum, 2) then -- B3/S5
    bStr = bStr .. "3"
    sStr = sStr .. "5"
end
if getbit(ruleNum, 3) then -- B4/S4
    bStr = bStr .. "4"
    sStr = sStr .. "4"
end
if getbit(ruleNum, 4) then -- B5/S67
    bStr = bStr .. "5"
    sStr = sStr .. "67"
end
if getbit(ruleNum, 5) then -- S8
    sStr = sStr .. "8"
end

local ruleString = "B"..bStr.."/S"..sStr
g.setrule(ruleString)
g.show("Set rule to "..g.getrule())
Here's one I called "2x2ifier", which blows up a given pattern into 2x2 blocks (for every cell at (x,y), it puts a 2x2 block at (2x, 2y)). Running this multiple times is a convenient way to test scaling similarity for a rule.

Code: Select all

-- turns patterns into 2x2 blocks

local g = golly()

if g.empty() then g.exit("Pattern is empty.") end

local rect = g.getrect()
local cells = g.getcells(rect)
local newcells = {}

local n = 1

while n < #cells do
    local x, y = cells[n], cells[n+1]
    local block = {2*x, 2*y, 2*x + 1, 2*y, 2*x, 2*y + 1, 2*x + 1, 2*y + 1}
    for _,v in ipairs(block) do
        table.insert(newcells, v)
    end
    n = n + 2
end

g.select(rect)
g.clear(0)
g.select({})

g.putcells(newcells)

g.fit()
Here's a draw tool that works in 2x2 blocks, including undo / redo support:

Code: Select all

-- draw tool that works entirely in 2x2 blocks
-- left click to place, right click to cycle through parity of 2x2 blocks

local g = golly()
local gp = require "gplus"

--- config ---

local undoKeys = "z ctrl" -- change if your undo isn't ctrl-Z
local redoKeys = "z ctrlshift" -- change if your redo isn't ctrl-shift-Z

--- end config ---

--- history stuff ---

local historyStack = {} -- list of "before" and "after" cell arrays (always in multistate form)
local currHistoryIndex = 0 -- current place in history
local currVisitedCells = {} -- set of cell coordinates in string form, to avoid adding duplicates in a history state

local function createNewHistory()
    currHistoryIndex = currHistoryIndex + 1
    historyStack[currHistoryIndex] = {before = {}, after = {}}
    -- delete future states that are now invalid
    for i,v in ipairs(historyStack) do
        if i > currHistoryIndex then
            table.remove(historyStack, i)
        end
    end
    currVisitedCells = {}
end

local function setCellBefore(x, y, state)
    historyStack[currHistoryIndex].before = g.join(historyStack[currHistoryIndex].before, {x, y, state})
end

local function setCellAfter(x, y, state)
    historyStack[currHistoryIndex].after = g.join(historyStack[currHistoryIndex].after, {x, y, state})
end

local function undo()
    if currHistoryIndex > 0 then
        g.putcells(historyStack[currHistoryIndex].before, 0, 0, 1, 0, 0, 1, "copy")
        currHistoryIndex = currHistoryIndex - 1
    end
end

local function redo()
    if currHistoryIndex < #historyStack then
        currHistoryIndex = currHistoryIndex + 1
        g.putcells(historyStack[currHistoryIndex].after, 0, 0, 1, 0, 0, 1, "copy")
    end
end

--- end history stuff ---

local function getBlockCoords(x, y, offsetX, offsetY)
    return math.floor((x - offsetX) / 2) * 2 + offsetX, math.floor((y - offsetY) / 2) * 2 + offsetY
end

local function coordsStr(x, y) -- tables can't be used as table keys but strings can
    return tostring(x).." "..tostring(y)
end

local function setBlock(blockX, blockY, state)
    local x, y
    for x = blockX, blockX + 1 do
        for y = blockY, blockY + 1 do
            if not currVisitedCells[coordsStr(x, y)] then
                setCellBefore(x, y, g.getcell(x, y))
                g.setcell(x, y, state)
                setCellAfter(x, y, state)
                currVisitedCells[coordsStr(x, y)] = true
            end
        end
    end
end

local offsets = { {0, 0}, {1, 1}, {1, 0}, {0, 1} }

local function update()
    local modIndex = 0
    -- gets the current pattern's offset, using the leftmost and topmost cell coordinates
    -- apparently the offsets work fine even if they're not strictly 0 or 1
    local offsetX, offsetY = table.unpack(#g.getrect() > 0 and g.getrect() or {0, 0})
    local drawing = false
    local drawingState
    local oldBlockX, oldBlockY
    while true do
        local event = g.getevent()
        --if #event > 0 then g.show(event) end -- show event for debugging
        if event:find("click") == 1 and not event:find("middle") then
            local evt, x, y, button, mods = gp.split(event)
            if button == "left" then 
                -- start drawing
                drawing = true
                local blockX, blockY = getBlockCoords(x, y, offsetX, offsetY)
                local cellState = g.getcell(blockX, blockY)
                drawingState = g.getoption("drawingstate")
                if cellState == drawingState then drawingState = 0 end
                createNewHistory()
                setBlock(blockX, blockY, drawingState)
            elseif button == "right" then
                modIndex = (modIndex + 1) % 4
                offsetX = offsets[modIndex + 1][1]
                offsetY = offsets[modIndex + 1][2]
            end
        elseif event == "mup left" then
            drawing = false
        elseif not drawing and event == "key "..undoKeys then
            undo()
        elseif not drawing and event == "key "..redoKeys then
            redo()
        else
            if #event > 0 then g.doevent(event) end -- pass event as-is
            local mousepos = g.getxy()
            if #mousepos == 0 then
                drawing = false -- end drawing when mouse goes outside viewport (mouseup events aren't processed there)
            else
                local x, y = gp.split(mousepos)
                local blockX, blockY = getBlockCoords(tonumber(x), tonumber(y), offsetX, offsetY)
                if not (blockX == oldBlockX and blockY == oldBlockY) then
                    g.select{blockX, blockY, 2, 2}
                    if drawing then
                        setBlock(blockX, blockY, drawingState)
                        oldBlockX, oldBlockY = blockX, blockY
                    end
                end
            end
        end
        g.update()
    end
end

g.show("Left click to add/remove 2x2 blocks. Right click to change the parity of the blocks.")
local oldcursor = g.getcursor()
g.setcursor("Draw")
local oldselrect = g.getselrect()

local status, err = xpcall(update, gp.trace)
if err then g.continue(err) end
-- the following code is executed even if error occurred or user aborted script

g.setcursor(oldcursor)
g.select(oldselrect)
And finally, here's a Python script I shamelessly stole from LaundryPizza03 and adapted to quickly calculate the minimal inverse of 2x2 rules, by inverting the rulestring normally and then just deleting the irrelevant transitions. This definitely could've been done better but I was feeling exceptionally lazy :D

Code: Select all

# adapted from https://conwaylife.com/forums/viewtopic.php?f=9&t=45&p=147334#p147334
# full INT support was not really necessary (in fact i think this breaks on INT rules)
# but this was the first script i found that did the work for me LOL

import golly as g

Hensel = [
    ['0'],
    ['1c', '1e'],
    ['2a', '2c', '2e', '2i', '2k', '2n'],
    ['3a', '3c', '3e', '3i', '3j', '3k', '3n', '3q', '3r', '3y'],
    ['4a', '4c', '4e', '4i', '4j', '4k', '4n', '4q', '4r', '4t', '4w', '4y', '4z'],
    ['5a', '5c', '5e', '5i', '5j', '5k', '5n', '5q', '5r', '5y'],
    ['6a', '6c', '6e', '6i', '6k', '6n'],
    ['7c', '7e'],
    ['8']
]
HenselC = [
    ['8'],
    ['7c', '7e'],
    ['6a', '6c', '6e', '6i', '6k', '6n'],
    ['5a', '5c', '5e', '5i', '5j', '5k', '5n', '5q', '5r', '5y'],
    ['4a', '4e', '4c', '4t', '4y', '4k', '4r', '4w', '4n', '4i', '4q', '4j', '4z'],
    ['3a', '3c', '3e', '3i', '3j', '3k', '3n', '3q', '3r', '3y'],
    ['2a', '2c', '2e', '2i', '2k', '2n'],
    ['1c', '1e'],
    ['0']
] #Used for computing the inverse of a transition

def parseTransitions(ruleTrans):
    ruleElem = []
    if not ruleTrans:
        return ruleElem
    context = ruleTrans[0]
    bNonTot = False
    bNegate = False
    for ch in ruleTrans[1:] + '9':
        if ch in '0123456789':
            if not bNonTot:
                ruleElem += Hensel[int(context)]
            context = ch
            bNonTot = False
            bNegate = False
        elif ch == '-':
            bNegate = True
            ruleElem += Hensel[int(context)]
        else:
            bNonTot = True
            if bNegate:
                ruleElem.remove(context + ch)
            else:
                ruleElem.append(context + ch)
    return ruleElem

#invert a rule in place
def invertRule(rule):
    # Parse rule string to list of transitions for Birth and Survival
    Bstr, Sstr = rule.split('/')
    Bstr = Bstr.lstrip('B')
    Sstr = Sstr.lstrip('S')
    b = parseTransitions(Bstr)
    s = parseTransitions(Sstr)

    def cTrans(x): #Calculate the B/W reversal of a list of transitions
        H = []; HC = [] #Load flattened transition list
        for n in range(9):
            H.extend(Hensel[n])
            HC.extend(HenselC[n])

        for trans in x:
            i = H.index(trans)
            HC[i] = ''

        return ''.join(HC)
    
    cRule = 'B' + cTrans(s) + '/S' + cTrans(b)
    g.show(cRule)
    g.setrule(cRule)
    return g.getrule()

rule = invertRule(g.getrule())
# delete irrelevant transitions for 2x2 (B678, S012)
rule = rule.split("/")
for b in "678":
    rule[0] = rule[0].replace(b, "")
for s in "012":
    rule[1] = rule[1].replace(s, "")
rule = str.join("/", rule)
g.setrule(rule)

g.show("Set rule to " + rule)
g.setclipstr(rule)
Last edited by SuperSupermario24 on March 27th, 2026, 8:28 pm, edited 4 times in total.

Code: Select all

7b2o2bo4bobo$obob2o5bo2bo4bobo$2bo4bo2b2o3bo4b2o$2o2bobo3bob2obo3bo$ob
ob2obo3bobobob3obo$4bo6b2o3bobo2bo$2o2bo2b2o11bo!

User avatar
I6_I6
Posts: 733
Joined: July 26th, 2025, 8:44 pm
Location: Here, there, somewhere, anywhere, everywhere.
Contact:

Re: Exploring 2x2 block rules

Post by I6_I6 » March 5th, 2026, 12:49 pm

SuperSupermario24 wrote:
March 4th, 2026, 8:20 pm
The "methodology"

My process here was pretty informal, and not very in-depth - I'm mostly interested in general properties, so I haven't looked at much more than a few random soups, small objects, and scribbles for each rule. Perhaps more systematic searches could find more stuff, but I wouldn't know where to start :)

To aid with enumerating the rules and making sure I didn't miss any, I came up with a simple Wolfram-like numbering system, where each bit is a specific set of transitions. From most to least significant: S8, B5/S67, B4/S4, B3/S5, B12/S3, and B0. So, for instance, rule 11 (binary 001011) corresponds to B0124/S34. I will be using this shorthand to refer to specific rules sometimes, though I'll always give their rulestring equivalents when introducing them.

I also made some scripts to assist with this, which I'll put at the bottom, so as not to take up a bunch of space here.
I don't really understand how the notation works; could you explain it better?

Also, I propose the term 'tile' for a 2x2 block. (I think 'block' should be reserved for a still life.)

I also propose a rulestring system for 2x2 block evolution itself, somewhat akin to INT rulestrings.
Here are the different transitions:

Code: Select all

#C [[ THUMBNAIL WIDTH 2000 HEIGHT 1200 VIEWONLY ]]
#C [[ LABEL 6 2 5 "0" LABEL 18 2 5 "1" LABEL 6 10 5 "2a" LABEL 18 10 5 "2c" LABEL 6 18 5 "3" LABEL 18 18 5 "4"
x = 16, y = 20, rule = B36/S125History
4D8.2C2D$4D8.2C2D$4D8.4D$4D8.4D5$2C2D8.2C2D$2C2D8.2C2D$2C2D8.2D2C$2C2D
8.2D2C5$2C2D8.4C$2C2D8.4C$4C8.4C$4C8.4C!
EDIT:
This wouldn't need survival transitions, only birth. For example, 2x2 could be written as B2a. I think there should also be a prefix indicating that the rulestring is for 2x2 block evolution. How about starting with the letters 'BE' (for 'block evolution') and then listing the transitions?

Code: Select all

#C [[ THEME Golly ]]
x = 27, y = 15, rule = LifeHistory
8.A$A6.A.A$3A4.BA2B.B2D$3.A4.2B.2B2DB$2.2A2.3B.6B2.3B$2.20B$4.19B$4.2B
C10BD4B$4.2B2C10BD4B$4.B2C11B2D3B$4.13B2D4B$5.12BD3B.B2A$6.13B3.BA.A$
6.3B.B3.B10.A$25.2A!
User:I6 I6/Elementary Emulators

User avatar
b-engine
Posts: 3746
Joined: October 26th, 2023, 4:11 am
Location: Somewhere on where Earth At
Contact:

Re: Exploring 2x2 block rules

Post by b-engine » March 5th, 2026, 5:45 pm

I believe that this spaceship can exist in a strobing block rule:

Code: Select all

x = 6, y = 4, rule = B1c2a/S3a|B3i/S5i
2o2b2o$2o2b2o$4o$4o!

User avatar
SuperSupermario24
Posts: 127
Joined: July 22nd, 2014, 12:59 pm
Location: Within the infinite expanses of the Life universe

Re: Exploring 2x2 block rules

Post by SuperSupermario24 » March 5th, 2026, 7:23 pm

I6_I6 wrote:
March 5th, 2026, 12:49 pm
SuperSupermario24 wrote:
March 4th, 2026, 8:20 pm
To aid with enumerating the rules and making sure I didn't miss any, I came up with a simple Wolfram-like numbering system, where each bit is a specific set of transitions. From most to least significant: S8, B5/S67, B4/S4, B3/S5, B12/S3, and B0. So, for instance, rule 11 (binary 001011) corresponds to B0124/S34.
I don't really understand how the notation works; could you explain it better?
It's basically the same idea as how Wolfram rules are numbered, where each bit of the number's binary representation corresponds to a single block transition (which is represented by a group of transitions in OT/INT rulestrings). To spell out the example of 11 (binary 001011) more clearly:
  • the highest bit is 0, so S8 is missing
  • the next bit is 0, so B5/S67 is missing
  • the next bit is 1, so B4/S4 is present
  • the next bit is 0, so B3/S5 is missing
  • the next bit is 1, so B12/S3 is present
  • the lowest bit is 1, so B0 is present
So the overall rulestring is B0124/S34. Or to use your proposed notation, it would be BE012c.

I'm definitely not attached to the number notation - it was mostly to help ensure that I covered every rule exhaustively. A more descriptive notation like yours doesn't sound like a bad idea to me.

Code: Select all

7b2o2bo4bobo$obob2o5bo2bo4bobo$2bo4bo2b2o3bo4b2o$2o2bobo3bob2obo3bo$ob
ob2obo3bobobob3obo$4bo6b2o3bobo2bo$2o2bo2b2o11bo!

User avatar
rabbit
Posts: 193
Joined: March 4th, 2024, 6:00 am
Location: Stuck inside a magician's hat. it hurts so bad

Re: Exploring 2x2 block rules

Post by rabbit » March 6th, 2026, 6:30 pm

Here's a tiny 2x2 2c/2 in B03/S5 (and the rule it emulates):

Code: Select all

x = 12, y = 8, rule = B03/S5
4b8o$4b8o3$4o$4o$4o4b4o$4o4b4o!

Code: Select all

x = 6, y = 4, rule = B1e2ci3ejkqy4aceiqrt5ceiy6ckn78/S012ckn3ceiy4ceinrtw5-jnqr6-a78
2b4o2$2o$2o2b2o!
Perhaps it's already known via gliderdb or another database.

EDIT: Yes, it is known due to LaundryPizza03. They also found this very small diagonal spaceship:
LaundryPizza03 wrote:
August 18th, 2020, 12:34 am
I also found a third spaceship made of 2x2 blocks, a 2c/4 diagonal in B03/S5.

Code: Select all

#C B03/S5 - B03678/S0125
x = 8, y = 6, rule = B03/S5
8o$8o$8o$8o$2b2o2b2o$2b2o2b2o!
Here's a sort of failed replicator (shown in the emulated rule because B0 rules don't work with History/Super):

Code: Select all

x = 43, y = 4, rule = B1e2ci3ejkqy4aceiqrt5ceiy6ckn78/S012ckn3ceiy4ceinrtw5-jnqr6-a78History
D.D19.A.A15.D.D$.D.D17.A.A15.D.D$.D.D17.A.A15.D.D$D.D19.A.A15.D.D!
As well as a small p4 (shown in the original rule):

Code: Select all

x = 10, y = 10, rule = B03/S5
2b4o2b2o$2b4o2b2o$4o$4o$2o6b2o$2o6b2o$6b4o$6b4o$2o2b4o$2o2b4o!
And a... replicator gun? Whatever it is, it's stable:

Code: Select all

x = 26, y = 10, rule = B03/S5
2b4o2b2o6b2o2b4o$2b4o2b2o6b2o2b4o$4o18b4o$4o18b4o$2o6b2o6b2o6b2o$2o6b
2o6b2o6b2o$6b4o6b4o$6b4o6b4o$2o2b4o10b4o2b2o$2o2b4o10b4o2b2o!
Last edited by rabbit on March 6th, 2026, 7:01 pm, edited 3 times in total.
That's the bunny. (she/her)

User avatar
SuperSupermario24
Posts: 127
Joined: July 22nd, 2014, 12:59 pm
Location: Within the infinite expanses of the Life universe

Re: Exploring 2x2 block rules

Post by SuperSupermario24 » March 6th, 2026, 6:50 pm

rabbit wrote:
March 6th, 2026, 6:30 pm
Here's a tiny 2x2 2c/2 in B03/S5 (and the rule it emulates):
-snip-
Perhaps it's already known via gliderdb or another database.

EDIT: Yes, it is known due to LaundryPizza03. They also found this very small diagonal spaceship:
-snip-
Very cool, updated the post to mention these. (Probably won't bother updating it for every new discovery, but explicitly outdated info warrants one, I think :P)

Code: Select all

7b2o2bo4bobo$obob2o5bo2bo4bobo$2bo4bo2b2o3bo4b2o$2o2bobo3bob2obo3bo$ob
ob2obo3bobobob3obo$4bo6b2o3bobo2bo$2o2bo2b2o11bo!

kiho park
Posts: 92
Joined: September 24th, 2010, 12:16 am

Re: Exploring 2x2 block rules

Post by kiho park » March 8th, 2026, 1:59 am

This is 2c4o wickstretcher i found a few years before.
kiho park wrote:
October 13th, 2020, 2:41 am
I found this 2c4o wick stretcher in 2x2 rule using my method. It seems 2x2 rules can have more than photons and c2d's.

Code: Select all

x = 108, y = 36, rule = B03i4w/S4q5i
36b4o6b62o$36b4o6b62o$14b4o10b4o8b4o2b2o2b58o$14b4o10b4o8b4o2b2o2b58o$
14b2o2b2o4b4o2b2o10b2o2b4o$14b2o2b2o4b4o2b2o10b2o2b4o$30b2o10b4o$30b2o
10b4o$4b4o4b2o2b8o2b4o6b4o8b60o$4b4o4b2o2b8o2b4o6b4o8b60o$2b4o4b8o4b
10o6b4o2b4o6b54o$2b4o4b8o4b10o6b4o2b4o6b54o$6o4b8o2b14o2b2o2b4o6b2o4b
52o$6o4b8o2b14o2b2o2b4o6b2o4b52o$2b2o2b4o8b20o2b4o2b2o6b2o$2b2o2b4o8b
20o2b4o2b2o6b2o$2o6b2o32b2o2b6o4b2o$2o6b2o32b2o2b6o4b2o$2o6b2o32b2o2b
6o4b2o$2o6b2o32b2o2b6o4b2o$2b2o2b4o8b20o2b4o2b2o6b2o$2b2o2b4o8b20o2b4o
2b2o6b2o$6o4b8o2b14o2b2o2b4o6b2o4b52o$6o4b8o2b14o2b2o2b4o6b2o4b52o$2b
4o4b8o4b10o6b4o2b4o6b54o$2b4o4b8o4b10o6b4o2b4o6b54o$4b4o4b2o2b8o2b4o6b
4o8b60o$4b4o4b2o2b8o2b4o6b4o8b60o$30b2o10b4o$30b2o10b4o$14b2o2b2o4b4o
2b2o10b2o2b4o$14b2o2b2o4b4o2b2o10b2o2b4o$14b4o10b4o8b4o2b2o2b58o$14b4o
10b4o8b4o2b2o2b58o$36b4o6b62o$36b4o6b62o!
Can small adjustable spaceships overrun the speed limit of (|x|+|y|)/P = 1?

## B0 rules are the best! ##
日本語を勉強しています!

User avatar
I6_I6
Posts: 733
Joined: July 26th, 2025, 8:44 pm
Location: Here, there, somewhere, anywhere, everywhere.
Contact:

Re: Exploring 2x2 block rules

Post by I6_I6 » March 8th, 2026, 2:14 am

kiho park wrote:
March 8th, 2026, 1:59 am
This is 2c4o wickstretcher i found a few years before.
kiho park wrote:
October 13th, 2020, 2:41 am
I found this 2c4o wick stretcher in 2x2 rule using my method. It seems 2x2 rules can have more than photons and c2d's.

Code: Select all

x = 108, y = 36, rule = B03i4w/S4q5i
36b4o6b62o$36b4o6b62o$14b4o10b4o8b4o2b2o2b58o$14b4o10b4o8b4o2b2o2b58o$
14b2o2b2o4b4o2b2o10b2o2b4o$14b2o2b2o4b4o2b2o10b2o2b4o$30b2o10b4o$30b2o
10b4o$4b4o4b2o2b8o2b4o6b4o8b60o$4b4o4b2o2b8o2b4o6b4o8b60o$2b4o4b8o4b
10o6b4o2b4o6b54o$2b4o4b8o4b10o6b4o2b4o6b54o$6o4b8o2b14o2b2o2b4o6b2o4b
52o$6o4b8o2b14o2b2o2b4o6b2o4b52o$2b2o2b4o8b20o2b4o2b2o6b2o$2b2o2b4o8b
20o2b4o2b2o6b2o$2o6b2o32b2o2b6o4b2o$2o6b2o32b2o2b6o4b2o$2o6b2o32b2o2b
6o4b2o$2o6b2o32b2o2b6o4b2o$2b2o2b4o8b20o2b4o2b2o6b2o$2b2o2b4o8b20o2b4o
2b2o6b2o$6o4b8o2b14o2b2o2b4o6b2o4b52o$6o4b8o2b14o2b2o2b4o6b2o4b52o$2b
4o4b8o4b10o6b4o2b4o6b54o$2b4o4b8o4b10o6b4o2b4o6b54o$4b4o4b2o2b8o2b4o6b
4o8b60o$4b4o4b2o2b8o2b4o6b4o8b60o$30b2o10b4o$30b2o10b4o$14b2o2b2o4b4o
2b2o10b2o2b4o$14b2o2b2o4b4o2b2o10b2o2b4o$14b4o10b4o8b4o2b2o2b58o$14b4o
10b4o8b4o2b2o2b58o$36b4o6b62o$36b4o6b62o!
What's "your method"? Could it help find more interesting patterns in 2x2 rules?

Code: Select all

#C [[ THEME Golly ]]
x = 27, y = 15, rule = LifeHistory
8.A$A6.A.A$3A4.BA2B.B2D$3.A4.2B.2B2DB$2.2A2.3B.6B2.3B$2.20B$4.19B$4.2B
C10BD4B$4.2B2C10BD4B$4.B2C11B2D3B$4.13B2D4B$5.12BD3B.B2A$6.13B3.BA.A$
6.3B.B3.B10.A$25.2A!
User:I6 I6/Elementary Emulators

kiho park
Posts: 92
Joined: September 24th, 2010, 12:16 am

Re: Exploring 2x2 block rules

Post by kiho park » March 8th, 2026, 6:42 am

I6_I6 wrote:
March 8th, 2026, 2:14 am
What's "your method"? Could it help find more interesting patterns in 2x2 rules?
It’s easy. You just simulate two generations at a time. For example, consider the following 3×3 neighbourhood. The 3×3 pattern below represents the B2a transition.
110
000
000

If you apply the 2×2 rule to this, the result is four cells with unknown values forming a 2×2 block.
??
??

If you apply the 2×2 rule again to that result, it becomes 0 or 1. By repeating this operation from B0 to S8, you can obtain a range 1 INT rulestring.
It is same as B03/S5 is become B1e2ci3ejkqy4aceiqrt5ceiy6ckn78/S012ckn3ceiy4ceinrtw5-jnqr6-a78.

Edit : Same pattern in original rule and it's equivalent INT rule.

Code: Select all

x = 108, y = 36, rule = B034/S45
36b4o6b62o$36b4o6b62o$14b4o10b4o8b4o2b2o2b58o$14b4o10b4o8b4o2b2o2b58o$
14b2o2b2o4b4o2b2o10b2o2b4o$14b2o2b2o4b4o2b2o10b2o2b4o$30b2o10b4o$30b2o
10b4o$4b4o4b2o2b8o2b4o6b4o8b60o$4b4o4b2o2b8o2b4o6b4o8b60o$2b4o4b8o4b
10o6b4o2b4o6b54o$2b4o4b8o4b10o6b4o2b4o6b54o$6o4b8o2b14o2b2o2b4o6b2o4b
52o$6o4b8o2b14o2b2o2b4o6b2o4b52o$2b2o2b4o8b20o2b4o2b2o6b2o$2b2o2b4o8b
20o2b4o2b2o6b2o$2o6b2o32b2o2b6o4b2o$2o6b2o32b2o2b6o4b2o$2o6b2o32b2o2b
6o4b2o$2o6b2o32b2o2b6o4b2o$2b2o2b4o8b20o2b4o2b2o6b2o$2b2o2b4o8b20o2b4o
2b2o6b2o$6o4b8o2b14o2b2o2b4o6b2o4b52o$6o4b8o2b14o2b2o2b4o6b2o4b52o$2b
4o4b8o4b10o6b4o2b4o6b54o$2b4o4b8o4b10o6b4o2b4o6b54o$4b4o4b2o2b8o2b4o6b
4o8b60o$4b4o4b2o2b8o2b4o6b4o8b60o$30b2o10b4o$30b2o10b4o$14b2o2b2o4b4o
2b2o10b2o2b4o$14b2o2b2o4b4o2b2o10b2o2b4o$14b4o10b4o8b4o2b2o2b58o$14b4o
10b4o8b4o2b2o2b58o$36b4o6b62o$36b4o6b62o!

Code: Select all

x = 54, y = 18, rule = B1e2-ak3enqy4acikqtz5einq6cen7e8/S01e2cen3aeinq4eikrtwz5-knqr6-ae78
18b2o3b31o$7b2o5b2o4b2obob29o$7bobo2b2obo5bob2o$15bo5b2o$2b2o2bob4ob2o
3b2o4b30o$b2o2b4o2b5o3b2ob2o3b27o$3o2b4ob7obob2o3bo2b26o$bob2o4b10ob2o
bo3bo$o3bo16bob3o2bo$o3bo16bob3o2bo$bob2o4b10ob2obo3bo$3o2b4ob7obob2o
3bo2b26o$b2o2b4o2b5o3b2ob2o3b27o$2b2o2bob4ob2o3b2o4b30o$15bo5b2o$7bobo
2b2obo5bob2o$7b2o5b2o4b2obob29o$18b2o3b31o!

And attached messy program computes the range 1 INT rulestring that alternately applies two 2×2 rules.
Attachments
2x2 to INT LL.zip
(2.95 KiB) Downloaded 25 times
Can small adjustable spaceships overrun the speed limit of (|x|+|y|)/P = 1?

## B0 rules are the best! ##
日本語を勉強しています!

User avatar
I6_I6
Posts: 733
Joined: July 26th, 2025, 8:44 pm
Location: Here, there, somewhere, anywhere, everywhere.
Contact:

Re: Exploring 2x2 block rules

Post by I6_I6 » March 8th, 2026, 8:00 am

kiho park wrote:
March 8th, 2026, 6:42 am
I6_I6 wrote:
March 8th, 2026, 2:14 am
What's "your method"? Could it help find more interesting patterns in 2x2 rules?
It’s easy. You just simulate two generations at a time. For example, consider the following 3×3 neighbourhood. The 3×3 pattern below represents the B2a transition.
110
000
000

If you apply the 2×2 rule to this, the result is four cells with unknown values forming a 2×2 block.
??
??

If you apply the 2×2 rule again to that result, it becomes 0 or 1. By repeating this operation from B0 to S8, you can obtain a range 1 INT rulestring.
It is same as B03/S5 is become B1e2ci3ejkqy4aceiqrt5ceiy6ckn78/S012ckn3ceiy4ceinrtw5-jnqr6-a78.
...
That's smart! So that means any 2x2 inflated pattern in a block CA emulates an INT rule every 2 steps, right?
Your script works well, but note that for INT block CA, the "Rule B" (which I'm guessing is the block transition for every odd step) is always the same as Rule A.

EDIT:
Here's a Golly Python script that checks whether the current rule is a 2x2 block rule:

Code: Select all

# Checks if the current rule is a 2x2 block rule. This script does
# not work if the rule is neither INT nor OT.
# For a rule to support 2x2 block evolution, it must satisfy the
# following criteria:
# Has all or none of {B2a, B1c, S3a}
# Has all or none of {B3i, S5i}
# Has all or none of {B4w, S4q}
# Has all or none of {B5a, S6a, S7c}

import golly as g

def check_blockevo(rule):
    """Check if a rule is a 2x2 block rule."""
    
    def has_trans(rulestr, tr):
        """Check if a transition exists in a rulestring."""
        mode, n, letter = tr[0], tr[1], tr[2]

        # Select the relevant part of the rulestring (B or S)
        part = rulestr.split('/')[0] if mode == 'B' else rulestr.split('/')[1]

        # Loop
        i = 0
        while i < len(part):
            if part[i].isdigit():
                num = int(part[i])
                i += 1
                letters = ""
                # Collect letters after number
                while i < len(part) and part[i].isalpha():
                    letters += part[i]
                    i += 1
                # Check for negation
                if letters.startswith('-'):
                    neg_letters = letters[1:]
                    if num == int(n) and letter not in neg_letters:
                        return True
                # Specified transitions
                elif letters:
                    if num == int(n) and letter in letters:
                        return True
                # No letters imply all transitions
                else:
                    if num == int(n):
                        return True
            else:
                i += 1  # Skip any unexpected characters

        return False


    groups = [['B2a', 'B1c', 'S3a'],
             ['B3i', 'S5i'],
             ['B4w', 'S4q'] ,
             ['B5a', 'S6a', 'S7c']]

    # Output (boolean)
    return all(
        sum(has_trans(rule, t) for t in group) in (0, len(group))
        for group in groups
    )


# Show
if check_blockevo(g.getrule()):
    g.show("Current rule is a 2x2 block rule.")
else:
    g.show("Current rule is not a 2x2 block rule.")
And a Golly Python implementation of kiho park's script (it works completely differently, but is shorter but probably slower):

Code: Select all

# Finds the INT rule that the current rule emulates in 2x2 block
# evolution, then copies it to the system clipboard. Works by 
# simulating an inflated transition table pattern for 2 ticks. 
# If the current rule is not a 2x2 block rule, it aborts.

import golly as g
from check_blockevo import check_blockevo

def compress_rulestr(ruledict):
    """Compress a dictionary with transitions into a rulestring"""
    letters = ['', 'ce', 'aceikn', 'aceijknqry', 'aceiknqrtwyz', 'aceijknqry', 'aceikn', 'ce', '']
    result = []

    for n, item in ruledict.items():
        if len(item) == len(letters[n]):
            item = ""
        elif len(item) > len(letters[n]) / 2:
            item = '-' + "".join(sorted(set(letters[n]) - set(item)))
        result.append(f"{n}{item}")

    return "".join(result)

# Pattern with all transitions inflated to 2x2
trans_patt = g.parse("""10b2o10b2o6b2o2b2o6b2o8b2o6b4o8b2o6b2o8b2o2b2o6b2o8b2o6b4o6b2o8b2o2b2o
4b2o2b2o4b2o12b2o6b4o4b2o2b2o6b2o8b4o4b2o8b2o2b2o4b2o8b2o2b2o4b4o10b2o
6b4o4b6o4b2o8b4o8b2o6b2o2b2o4b2o2b2o8b2o6b4o6b2o8b2o8b4o4b4o6b2o10b2o
6b2o2b2o4b2o2b2o8b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$10b2o10b2o6b2o2b2o6b
2o8b2o6b4o8b2o6b2o8b2o2b2o6b2o8b2o6b4o6b2o8b2o2b2o4b2o2b2o4b2o12b2o6b
4o4b2o2b2o6b2o8b4o4b2o8b2o2b2o4b2o8b2o2b2o4b4o10b2o6b4o4b6o4b2o8b4o8b
2o6b2o2b2o4b2o2b2o8b2o6b4o6b2o8b2o8b4o4b4o6b2o10b2o6b2o2b2o4b2o2b2o8b
2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$40b2o58b2o2b2o4b2o8b2o8b2o8b2o18b2o12b
2o24b2o2b2o4b2o8b2o8b2o2b2o4b2o18b2o8b2o2b2o8b2o14b2o18b2o2b2o18b2o8b
2o8b2o8b2o4b2o2b2o8b2o4b2o2b2o4b2o2b2o4b2o2b2o8b2o4b2o2b2o4b2o2b2o4b2o
2b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o$40b2o58b2o2b2o4b2o8b2o8b2o8b2o18b
2o12b2o24b2o2b2o4b2o8b2o8b2o2b2o4b2o18b2o8b2o2b2o8b2o14b2o18b2o2b2o18b
2o8b2o8b2o8b2o4b2o2b2o8b2o4b2o2b2o4b2o2b2o4b2o2b2o8b2o4b2o2b2o4b2o2b2o
4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o$54b2o16b2o10b2o8b2o18b2o14b2o
20b2o10b2o6b2o8b2o6b2o2b2o6b2o10b2o4b4o16b2o2b2o4b4o10b2o6b2o8b2o8b2o
8b4o6b4o4b4o6b6o4b4o6b6o6b4o4b6o4b2o2b2o4b4o6b2o8b2o2b2o4b6o4b6o4b4o6b
6o4b2o2b2o4b4o6b6o4b6o4b6o$54b2o16b2o10b2o8b2o18b2o14b2o20b2o10b2o6b2o
8b2o6b2o2b2o6b2o10b2o4b4o16b2o2b2o4b4o10b2o6b2o8b2o8b2o8b4o6b4o4b4o6b
6o4b4o6b6o6b4o4b6o4b2o2b2o4b4o6b2o8b2o2b2o4b6o4b6o4b4o6b6o4b2o2b2o4b4o
6b6o4b6o4b6o5$10b2o10b2o6b2o2b2o6b2o8b2o6b4o8b2o6b2o8b2o2b2o6b2o8b2o6b
4o6b2o8b2o2b2o4b2o2b2o4b2o12b2o6b4o4b2o2b2o6b2o8b4o4b2o8b2o2b2o4b2o8b
2o2b2o4b4o10b2o6b4o4b6o4b2o8b4o8b2o6b2o2b2o4b2o2b2o8b2o6b4o6b2o8b2o8b
4o4b4o6b2o10b2o6b2o2b2o4b2o2b2o8b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$10b2o
10b2o6b2o2b2o6b2o8b2o6b4o8b2o6b2o8b2o2b2o6b2o8b2o6b4o6b2o8b2o2b2o4b2o
2b2o4b2o12b2o6b4o4b2o2b2o6b2o8b4o4b2o8b2o2b2o4b2o8b2o2b2o4b4o10b2o6b4o
4b6o4b2o8b4o8b2o6b2o2b2o4b2o2b2o8b2o6b4o6b2o8b2o8b4o4b4o6b2o10b2o6b2o
2b2o4b2o2b2o8b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$2b2o8b2o8b2o8b2o6b4o8b2o
8b2o8b2o8b2o8b2o6b6o4b4o6b4o6b4o6b4o8b2o6b4o8b4o6b2o8b2o6b6o4b4o6b4o6b
6o4b4o8b2o6b4o6b6o6b4o6b2o6b4o8b2o6b6o6b2o8b4o6b4o6b4o6b4o4b6o6b4o4b6o
4b6o4b6o6b4o4b6o4b6o4b6o4b6o4b6o4b6o4b6o$2b2o8b2o8b2o8b2o6b4o8b2o8b2o
8b2o8b2o8b2o6b6o4b4o6b4o6b4o6b4o8b2o6b4o8b4o6b2o8b2o6b6o4b4o6b4o6b6o4b
4o8b2o6b4o6b6o6b4o6b2o6b4o8b2o6b6o6b2o8b4o6b4o6b4o6b4o4b6o6b4o4b6o4b6o
4b6o6b4o4b6o4b6o4b6o4b6o4b6o4b6o4b6o$54b2o16b2o10b2o8b2o18b2o14b2o20b
2o10b2o6b2o8b2o6b2o2b2o6b2o10b2o4b4o16b2o2b2o4b4o10b2o6b2o8b2o8b2o8b4o
6b4o4b4o6b6o4b4o6b6o6b4o4b6o4b2o2b2o4b4o6b2o8b2o2b2o4b6o4b6o4b4o6b6o4b
2o2b2o4b4o6b6o4b6o4b6o$54b2o16b2o10b2o8b2o18b2o14b2o20b2o10b2o6b2o8b2o
6b2o2b2o6b2o10b2o4b4o16b2o2b2o4b4o10b2o6b2o8b2o8b2o8b4o6b4o4b4o6b6o4b
4o6b6o6b4o4b6o4b2o2b2o4b4o6b2o8b2o2b2o4b6o4b6o4b4o6b6o4b2o2b2o4b4o6b6o
4b6o4b6o!
""")

# Check if rule supports 2x2 block evolution
if not check_blockevo(g.getrule()):
    g.exit("Rule does not support 2x2 block evolution.")

# Add layer, simulate inflated transitions pattern for 2 ticks
g.addlayer()
g.putcells(trans_patt)
g.run(2)

# Transitions
trans_lst = [(0, ''),
             (1, 'c'), (1, 'e'),
             (2, 'a'), (2, 'c'), (2, 'e'), (2, 'i'), (2, 'k'), (2, 'n'),
             (3, 'a'), (3, 'c'), (3, 'e'), (3, 'i'), (3, 'j'), (3, 'k'), (3, 'n'), (3, 'r'), (3, 'q'), (3, 'y'),
             (4, 'a'), (4, 'c'), (4, 'e'), (4, 'i'), (4, 'j'), (4, 'k'), (4, 'n'), (4, 'q'), (4, 'r'), (4, 't'), (4, 'w'), (4, 'y'), (4, 'z'),
             (5, 'a'), (5, 'c'), (5, 'e'), (5, 'i'), (5, 'j'), (5, 'k'), (5, 'n'), (5, 'r'), (5, 'q'), (5, 'y'),
             (6, 'a'), (6, 'c'), (6, 'e'), (6, 'i'), (6, 'k'), (6, 'n'),
             (7, 'c'), (7, 'e'),
             (8, '')]

btrans = {}
strans = {}

# Find emulated birth & survival transitions
for i in range(51):
    num, l = trans_lst[i]
    if g.getcell(10*i+2, 2) == 1:
        btrans[num] = btrans.get(num, "") + l
    if g.getcell(10*i+2, 12) == 1:
        strans[num] = strans.get(num, "") + l

g.dellayer()  # Delete layer

rule = f"B{compress_rulestr(btrans)}/S{compress_rulestr(strans)}"
g.show(f"2x2 block evolution emulates: {rule}.")  # Show result
g.setclip(rule)  # Copy to clipboard
Remember that the second script imports a function from the first (check_blockevo()), so remember to put them in the same directory (or specify the path or paste the function into the second script).

Code: Select all

#C [[ THEME Golly ]]
x = 27, y = 15, rule = LifeHistory
8.A$A6.A.A$3A4.BA2B.B2D$3.A4.2B.2B2DB$2.2A2.3B.6B2.3B$2.20B$4.19B$4.2B
C10BD4B$4.2B2C10BD4B$4.B2C11B2D3B$4.13B2D4B$5.12BD3B.B2A$6.13B3.BA.A$
6.3B.B3.B10.A$25.2A!
User:I6 I6/Elementary Emulators

User avatar
SuperSupermario24
Posts: 127
Joined: July 22nd, 2014, 12:59 pm
Location: Within the infinite expanses of the Life universe

Re: Exploring 2x2 block rules

Post by SuperSupermario24 » March 8th, 2026, 10:35 pm

I6_I6 wrote:
March 8th, 2026, 8:00 am
So that means any 2x2 inflated pattern in a block CA emulates an INT rule every 2 steps, right?
Huh, and a corollary is that strobing B0 2x2 rules simulate non-strobing INT rules.
I6_I6 wrote:
March 8th, 2026, 8:00 am
And a Golly Python implementation of kiho park's script (it works completely differently, but is shorter but probably slower):
-snip-
This script doesn't seem to be working properly for me - for instance, when I give it B125/S367 (rule 18 / BE13), the replicator rule, it generates B1c2ei3aeiqy4knrt5aeiy6ei7c/S1c2ei3aeiqy4knrt5aeiy6ei7c instead of the correct result of of B1c2ka3ckajr4nyjr5ckajr6ka7c/S1c2ka3ckajr4nyjr5ckajr6ka7c. (Also, the correct function for copying to clipboard is g.setclipstr(), not g.setclip().)

-----

For convenience, here are the INT equivalents for every rule I went over in the main body of my post (not counting trivial B/W reversals), with the help of kiho park's program (thanks!):

Code: Select all

Vote-like rules
3 (B012/S3) (01): B4ejw5-eij678/S2eki3-i45678
7 (B0123/S35) (012a): B3e4ejr5cinyq6-ei78/S2c3-kaqr4-qz5678
Diamond rules
28 (B345/S4567) (2ac3): B3eij4-ceyq5-cy6ea/S1e2-i3-ekyr4anqrw5-ekyr6-i7e
52 (B35/S5678) (2a34): B3i4aint5-ckq6-n78/S1e2-cn3-c4-c5678
60 (B345/S45678) (2ac34): B3eij4-cyq5678/S1e2345678
2x2-like rules
4 (B3/S5) (2a): B3i4int5ey6k7e/S1e2k3ey4irt5i
12 (B34/S45) (2ac): B3eij4kintz5eanq6cen7e/S1e2cen3eanq4kirtz5eij
20 (B35/S567) (2a3): B3i4aint5-ckq6-in7c/S1e2eka3-cear4knyrw5-ayjr6cka7e
36 (B3/S58) (2a4): B3i4int5ey6ki7e/S1e2ki3ey4ait5iqj6c7e8
44 (B34/S458) (2ac4): B3eij4ekintz5eanyq6-ka7e/S1e2-ka3enyq4-enyjrw5einq6cen7e8
B1 but it's actually interesting
58 (B1245/S34678) (12c34): B1c2-c3-iqj4-ait5-ey6-ki7c8/S01c2-ki3-ey4-irt5-i678
18 (B125/S367) (13): B1c2ka3ckajr4nyjr5ckajr6ka7c/S1c2ka3ckajr4nyjr5ckajr6ka7c
B2-like expansion
5 (B03/S5) (02a): B1e2ci3ekyqj4-knyjwz5ceiy6ckn78/S012ckn3ceiy4-kayqjz5-nqjr6-a78
13 (B034/S45) (02ac): B1e2-ka3enyq4-enyjrw5einq6cen7e8/S01e2cen3eainq4-canyqj5-knqr6-ea78
Signals
9 (B04/S4) (02c): B2ein3yjr4-ekanjr5eijr6-ck7e8/S01e2-ck3eaijr4-cknyq5-ekj6-e78
For any others you'll have to run the scripts yourself, sorry :P

Code: Select all

7b2o2bo4bobo$obob2o5bo2bo4bobo$2bo4bo2b2o3bo4b2o$2o2bobo3bob2obo3bo$ob
ob2obo3bobobob3obo$4bo6b2o3bobo2bo$2o2bo2b2o11bo!

User avatar
b-engine
Posts: 3746
Joined: October 26th, 2023, 4:11 am
Location: Somewhere on where Earth At
Contact:

Re: Exploring 2x2 block rules

Post by b-engine » March 9th, 2026, 3:53 am

b-engine wrote:
March 5th, 2026, 5:45 pm
I believe that this spaceship can exist in a strobing block rule:

Code: Select all

x = 6, y = 4, rule = B1c2a/S3a|B3i/S5i
2o2b2o$2o2b2o$4o$4o!
Which emulates these ships:

Code: Select all

x = 3, y = 2, rule = B1e2c4r/S2a
obo$2o!

Code: Select all

x = 4, y = 3, rule = B2a3nr5n/S3n
4o$3bo$obo!

User avatar
I6_I6
Posts: 733
Joined: July 26th, 2025, 8:44 pm
Location: Here, there, somewhere, anywhere, everywhere.
Contact:

Re: Exploring 2x2 block rules

Post by I6_I6 » March 9th, 2026, 3:57 am

SuperSupermario24 wrote:
March 8th, 2026, 10:35 pm
I6_I6 wrote:
March 8th, 2026, 8:00 am
So that means any 2x2 inflated pattern in a block CA emulates an INT rule every 2 steps, right?
Huh, and a corollary is that strobing B0 2x2 rules simulate non-strobing INT rules.
I6_I6 wrote:
March 8th, 2026, 8:00 am
And a Golly Python implementation of kiho park's script (it works completely differently, but is shorter but probably slower):
-snip-
This script doesn't seem to be working properly for me - for instance, when I give it B125/S367 (rule 18 / BE13), the replicator rule, it generates B1c2ei3aeiqy4knrt5aeiy6ei7c/S1c2ei3aeiqy4knrt5aeiy6ei7c instead of the correct result of of B1c2ka3ckajr4nyjr5ckajr6ka7c/S1c2ka3ckajr4nyjr5ckajr6ka7c. (Also, the correct function for copying to clipboard is g.setclipstr(), not g.setclip().)
...
Oh, that was just a silly mistake -- it seems like trans_patt was using the wrong RLE. (Idk why i used g.setclip() :P )
Here's the fixed script:

Code: Select all

# Finds the INT rule that the current rule emulates in 2x2 block
# evolution, then copies it to the system clipboard. Works by
# simulating an inflated transition table pattern for 2 ticks.
# If the current rule is not a 2x2 block rule, it aborts.

import golly as g
from check_blockevo import check_blockevo

def compress_rulestr(ruledict):
    """Compress a dictionary with transitions into a rulestring"""
    letters = ['', 'ce', 'aceikn', 'aceijknqry', 'aceijknqrtwyz', 'aceijknqry', 'aceikn', 'ce', '']
    result = []

    for n, item in ruledict.items():
        if len(item) == len(letters[n]):
            item = ""
        elif len(item) > len(letters[n]) / 2:
            item = '-' + "".join(sorted(set(letters[n]) - set(item)))
        result.append(f"{n}{item}")

    return "".join(result)

# Pattern with all transitions inflated to 2x2
trans_patt = g.parse("""
10b2o10b2o6b4o6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o2b2o6b2o6b2o12b2o6b2o6b
2o2b2o4b2o8b4o6b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o8b2o6b4o4b2o8b4o8b4o4b6o
4b2o8b2o2b2o4b4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o2b2o6b2o8b4o4b2o2b2o6b2o
10b2o6b2o6b2o2b2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$10b2o10b2o6b4o6b
2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o2b2o6b2o6b2o12b2o6b2o6b2o2b2o4b2o8b4o6b
2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o8b2o6b4o4b2o8b4o8b4o4b6o4b2o8b2o2b2o4b4o
10b2o6b2o6b2o2b2o6b4o4b4o6b2o2b2o6b2o8b4o4b2o2b2o6b2o10b2o6b2o6b2o2b2o
4b2o2b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$50b2o38b2o18b2o2b2o4b2o12b2o4b2o
8b2o8b2o28b2o18b2o2b2o4b2o2b2o4b2o2b2o4b2o8b2o8b2o12b2o14b2o32b2o4b2o
2b2o18b2o4b2o12b2o8b2o8b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o8b2o4b2o2b2o
4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o$50b2o38b2o18b2o2b2o4b2o12b2o
4b2o8b2o8b2o28b2o18b2o2b2o4b2o2b2o4b2o2b2o4b2o8b2o8b2o12b2o14b2o32b2o
4b2o2b2o18b2o4b2o12b2o8b2o8b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o8b2o4b2o
2b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o$62b2o10b2o8b2o18b2o14b2o
10b2o10b2o18b2o4b2o10b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b2o8b2o
8b4o4b4o8b4o4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b6o4b6o
4b6o4b2o2b2o4b4o6b4o6b6o4b6o4b6o$62b2o10b2o8b2o18b2o14b2o10b2o10b2o18b
2o4b2o10b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b2o8b2o8b4o4b4o8b4o
4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b6o4b6o4b6o4b2o2b2o
4b4o6b4o6b6o4b6o4b6o5$10b2o10b2o6b4o6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o2b
2o6b2o6b2o12b2o6b2o6b2o2b2o4b2o8b4o6b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o8b
2o6b4o4b2o8b4o8b4o4b6o4b2o8b2o2b2o4b4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o2b
2o6b2o8b4o4b2o2b2o6b2o10b2o6b2o6b2o2b2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o2b
2o4b6o$10b2o10b2o6b4o6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o2b2o6b2o6b2o12b2o
6b2o6b2o2b2o4b2o8b4o6b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o8b2o6b4o4b2o8b4o8b
4o4b6o4b2o8b2o2b2o4b4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o2b2o6b2o8b4o4b2o2b
2o6b2o10b2o6b2o6b2o2b2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$2b2o8b2o8b
2o8b2o8b2o6b4o8b2o8b2o8b2o6b4o8b2o6b6o4b4o8b4o4b4o6b4o6b4o8b2o8b2o6b4o
8b2o6b6o4b6o4b6o4b4o6b4o6b4o8b4o6b2o6b4o8b2o8b2o8b4o4b6o6b2o8b4o4b4o8b
4o6b4o6b4o4b6o4b6o4b6o4b6o6b4o4b6o4b6o4b6o4b6o4b6o4b6o$2b2o8b2o8b2o8b
2o8b2o6b4o8b2o8b2o8b2o6b4o8b2o6b6o4b4o8b4o4b4o6b4o6b4o8b2o8b2o6b4o8b2o
6b6o4b6o4b6o4b4o6b4o6b4o8b4o6b2o6b4o8b2o8b2o8b4o4b6o6b2o8b4o4b4o8b4o6b
4o6b4o4b6o4b6o4b6o4b6o6b4o4b6o4b6o4b6o4b6o4b6o4b6o$62b2o10b2o8b2o18b2o
14b2o10b2o10b2o18b2o4b2o10b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b
2o8b2o8b4o4b4o8b4o4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b
6o4b6o4b6o4b2o2b2o4b4o6b4o6b6o4b6o4b6o$62b2o10b2o8b2o18b2o14b2o10b2o
10b2o18b2o4b2o10b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b2o8b2o8b4o
4b4o8b4o4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b6o4b6o4b6o
4b2o2b2o4b4o6b4o6b6o4b6o4b6o!
""")

# Check if rule supports 2x2 block evolution
if not check_blockevo(g.getrule()):
    g.exit("Rule does not support 2x2 block evolution.")

# Add layer, simulate inflated transitions pattern for 2 ticks
g.addlayer()
g.putcells(trans_patt, 0, 0)
g.run(2)

# Transitions
trans_lst = [(0, ''),
             (1, 'c'), (1, 'e'),
             (2, 'a'), (2, 'c'), (2, 'e'), (2, 'i'), (2, 'k'), (2, 'n'),
             (3, 'a'), (3, 'c'), (3, 'e'), (3, 'i'), (3, 'j'), (3, 'k'), (3, 'n'), (3, 'q'), (3, 'r'), (3, 'y'),
             (4, 'a'), (4, 'c'), (4, 'e'), (4, 'i'), (4, 'j'), (4, 'k'), (4, 'n'), (4, 'q'), (4, 'r'), (4, 't'), (4, 'w'), (4, 'y'), (4, 'z'),
             (5, 'a'), (5, 'c'), (5, 'e'), (5, 'i'), (5, 'j'), (5, 'k'), (5, 'n'), (5, 'q'), (5, 'r'), (5, 'y'),
             (6, 'a'), (6, 'c'), (6, 'e'), (6, 'i'), (6, 'k'), (6, 'n'),
             (7, 'c'), (7, 'e'),
             (8, '')]

btrans = {}
strans = {}

# Find emulated birth & survival transitions
for i in range(51):
    num, l = trans_lst[i]
    if g.getcell(10*i+2, 2) == 1:
        btrans[num] = btrans.get(num, "") + l
    if g.getcell(10*i+2, 12) == 1:
        strans[num] = strans.get(num, "") + l

g.dellayer()  # Delete layer

rule = f"B{compress_rulestr(btrans)}/S{compress_rulestr(strans)}"
g.show(f"2x2 block evolution emulates: {rule}.")  # Show result
g.setclipstr(rule)  # Copy to clipboard
When running it on B125/S367, it outputs B1c2ak3acjk4jnry5acjkr6ak7c/S1c2ak3acjk4jnry5acjkr6ak7c. That's the same as your given correct answer, except without B3r and S3r. Assuming my script works, there's probably a difference between my script and kiho park's (other than the fact that the transitions in my script are ordered alphabetically). I don't really understand how kiho park's script works, but for some reason it's giving different answers. What my script does is it runs this inflated transition table for 2 ticks:

Code: Select all

x = 504, y = 16, rule = B125/S367
8b2o10b2o6b4o6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o2b2o6b2o6b2o12b2o6b2o6b2o
2b2o4b2o8b4o6b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o8b2o6b4o4b2o8b4o8b4o4b6o4b
2o8b2o2b2o4b4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o2b2o6b2o8b4o4b2o2b2o6b2o10b
2o6b2o6b2o2b2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$8b2o10b2o6b4o6b2o2b
2o6b2o8b2o8b2o6b2o8b4o6b2o2b2o6b2o6b2o12b2o6b2o6b2o2b2o4b2o8b4o6b2o2b
2o4b2o8b2o2b2o6b2o6b2o2b2o8b2o6b4o4b2o8b4o8b4o4b6o4b2o8b2o2b2o4b4o10b
2o6b2o6b2o2b2o6b4o4b4o6b2o2b2o6b2o8b4o4b2o2b2o6b2o10b2o6b2o6b2o2b2o4b
2o2b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$48b2o38b2o18b2o2b2o4b2o12b2o4b2o8b
2o8b2o28b2o18b2o2b2o4b2o2b2o4b2o2b2o4b2o8b2o8b2o12b2o14b2o32b2o4b2o2b
2o18b2o4b2o12b2o8b2o8b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o8b2o4b2o2b2o4b
2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o$48b2o38b2o18b2o2b2o4b2o12b2o4b
2o8b2o8b2o28b2o18b2o2b2o4b2o2b2o4b2o2b2o4b2o8b2o8b2o12b2o14b2o32b2o4b
2o2b2o18b2o4b2o12b2o8b2o8b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o8b2o4b2o2b
2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o$60b2o10b2o8b2o18b2o14b2o10b
2o10b2o18b2o4b2o10b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b2o8b2o8b
4o4b4o8b4o4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b6o4b6o4b
6o4b2o2b2o4b4o6b4o6b6o4b6o4b6o$60b2o10b2o8b2o18b2o14b2o10b2o10b2o18b2o
4b2o10b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b2o8b2o8b4o4b4o8b4o4b
6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b6o4b6o4b6o4b2o2b2o4b
4o6b4o6b6o4b6o4b6o5$8b2o10b2o6b4o6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o2b2o
6b2o6b2o12b2o6b2o6b2o2b2o4b2o8b4o6b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o8b2o
6b4o4b2o8b4o8b4o4b6o4b2o8b2o2b2o4b4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o2b2o
6b2o8b4o4b2o2b2o6b2o10b2o6b2o6b2o2b2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o2b2o
4b6o$8b2o10b2o6b4o6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o2b2o6b2o6b2o12b2o6b
2o6b2o2b2o4b2o8b4o6b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o8b2o6b4o4b2o8b4o8b4o
4b6o4b2o8b2o2b2o4b4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o2b2o6b2o8b4o4b2o2b2o
6b2o10b2o6b2o6b2o2b2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$2o8b2o8b2o8b
2o8b2o6b4o8b2o8b2o8b2o6b4o8b2o6b6o4b4o8b4o4b4o6b4o6b4o8b2o8b2o6b4o8b2o
6b6o4b6o4b6o4b4o6b4o6b4o8b4o6b2o6b4o8b2o8b2o8b4o4b6o6b2o8b4o4b4o8b4o6b
4o6b4o4b6o4b6o4b6o4b6o6b4o4b6o4b6o4b6o4b6o4b6o4b6o$2o8b2o8b2o8b2o8b2o
6b4o8b2o8b2o8b2o6b4o8b2o6b6o4b4o8b4o4b4o6b4o6b4o8b2o8b2o6b4o8b2o6b6o4b
6o4b6o4b4o6b4o6b4o8b4o6b2o6b4o8b2o8b2o8b4o4b6o6b2o8b4o4b4o8b4o6b4o6b4o
4b6o4b6o4b6o4b6o6b4o4b6o4b6o4b6o4b6o4b6o4b6o$60b2o10b2o8b2o18b2o14b2o
10b2o10b2o18b2o4b2o10b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b2o8b2o
8b4o4b4o8b4o4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b6o4b6o
4b6o4b2o2b2o4b4o6b4o6b6o4b6o4b6o$60b2o10b2o8b2o18b2o14b2o10b2o10b2o18b
2o4b2o10b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b2o8b2o8b4o4b4o8b4o
4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b6o4b6o4b6o4b2o2b2o
4b4o6b4o6b6o4b6o4b6o!
Then records the emulated transitions.
Looking closely, though, neither B3r nor S3r are triggered:

Code: Select all

x = 26, y = 6, rule = B125/S367History
4C2D14.4C2D$4C2D14.4C2D$2D2.2D14.2D2A2D$2D2.2D14.2D2A2D$2C4D14.2C4D$2C
4D14.2C4D!
[[ STOP 2 ]]
So either kiho park's script is wrong or I'm not understanding this properly. Both scripts give a rule that has replicating behavior, though.

Code: Select all

#C [[ THEME Golly ]]
x = 27, y = 15, rule = LifeHistory
8.A$A6.A.A$3A4.BA2B.B2D$3.A4.2B.2B2DB$2.2A2.3B.6B2.3B$2.20B$4.19B$4.2B
C10BD4B$4.2B2C10BD4B$4.B2C11B2D3B$4.13B2D4B$5.12BD3B.B2A$6.13B3.BA.A$
6.3B.B3.B10.A$25.2A!
User:I6 I6/Elementary Emulators

User avatar
SuperSupermario24
Posts: 127
Joined: July 22nd, 2014, 12:59 pm
Location: Within the infinite expanses of the Life universe

Re: Exploring 2x2 block rules

Post by SuperSupermario24 » March 9th, 2026, 5:22 am

I6_I6 wrote:
March 9th, 2026, 3:57 am
Looking closely, though, neither B3r nor S3r are triggered:
-snip-
So either kiho park's script is wrong or I'm not understanding this properly. Both scripts give a rule that has replicating behavior, though.
That's 3n, not 3r. 3r looks like this:

Code: Select all

x = 26, y = 6, rule = B125/S367History
2D4C14.2D4C$2D4C14.2D4C$2D2.2D14.2D2A2D$2D2.2D14.2D2A2D$2D2C2D14.2D2C
2D$2D2C2D14.2D2C2D!
[[ STOP 2 ]]
Looking at the RLE in the script it looks like that makes the same mistake, accidentally checking 3n again where it should check 3r. This RLE fixes that mistake, and swapping it out in the script seems to give correct results for every rule I've tested:

Code: Select all

10b2o10b2o6b4o6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o2b2o6b2o6b2o12b2o6b2o6b
2o2b2o4b2o10b4o4b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o8b2o6b4o4b2o8b4o8b4o4b
6o4b2o8b2o2b2o4b4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o2b2o6b2o8b4o4b2o2b2o6b
2o10b2o6b2o6b2o2b2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$10b2o10b2o6b4o
6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o2b2o6b2o6b2o12b2o6b2o6b2o2b2o4b2o10b4o
4b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o8b2o6b4o4b2o8b4o8b4o4b6o4b2o8b2o2b2o4b
4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o2b2o6b2o8b4o4b2o2b2o6b2o10b2o6b2o6b2o2b
2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$50b2o38b2o18b2o2b2o4b2o12b2o4b
2o8b2o8b2o28b2o18b2o2b2o4b2o2b2o4b2o2b2o4b2o8b2o8b2o12b2o14b2o32b2o4b
2o2b2o18b2o4b2o12b2o8b2o8b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o8b2o4b2o2b
2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o$50b2o38b2o18b2o2b2o4b2o12b
2o4b2o8b2o8b2o28b2o18b2o2b2o4b2o2b2o4b2o2b2o4b2o8b2o8b2o12b2o14b2o32b
2o4b2o2b2o18b2o4b2o12b2o8b2o8b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o8b2o4b
2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o$62b2o10b2o8b2o18b2o14b
2o10b2o10b2o18b2o6b2o8b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b2o8b
2o8b4o4b4o8b4o4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b6o4b
6o4b6o4b2o2b2o4b4o6b4o6b6o4b6o4b6o$62b2o10b2o8b2o18b2o14b2o10b2o10b2o
18b2o6b2o8b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b2o8b2o8b4o4b4o8b
4o4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b6o4b6o4b6o4b2o2b
2o4b4o6b4o6b6o4b6o4b6o5$10b2o10b2o6b4o6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o
2b2o6b2o6b2o12b2o6b2o6b2o2b2o4b2o10b4o4b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o
8b2o6b4o4b2o8b4o8b4o4b6o4b2o8b2o2b2o4b4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o
2b2o6b2o8b4o4b2o2b2o6b2o10b2o6b2o6b2o2b2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o
2b2o4b6o$10b2o10b2o6b4o6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o2b2o6b2o6b2o12b
2o6b2o6b2o2b2o4b2o10b4o4b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o8b2o6b4o4b2o8b
4o8b4o4b6o4b2o8b2o2b2o4b4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o2b2o6b2o8b4o4b
2o2b2o6b2o10b2o6b2o6b2o2b2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$2b2o8b
2o8b2o8b2o8b2o6b4o8b2o8b2o8b2o6b4o8b2o6b6o4b4o8b4o4b4o6b4o6b4o8b2o8b2o
6b4o8b2o6b6o4b6o4b6o4b4o6b4o6b4o8b4o6b2o6b4o8b2o8b2o8b4o4b6o6b2o8b4o4b
4o8b4o6b4o6b4o4b6o4b6o4b6o4b6o6b4o4b6o4b6o4b6o4b6o4b6o4b6o$2b2o8b2o8b
2o8b2o8b2o6b4o8b2o8b2o8b2o6b4o8b2o6b6o4b4o8b4o4b4o6b4o6b4o8b2o8b2o6b4o
8b2o6b6o4b6o4b6o4b4o6b4o6b4o8b4o6b2o6b4o8b2o8b2o8b4o4b6o6b2o8b4o4b4o8b
4o6b4o6b4o4b6o4b6o4b6o4b6o6b4o4b6o4b6o4b6o4b6o4b6o4b6o$62b2o10b2o8b2o
18b2o14b2o10b2o10b2o18b2o6b2o8b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b
2o6b2o8b2o8b4o4b4o8b4o4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b
2o4b6o4b6o4b6o4b2o2b2o4b4o6b4o6b6o4b6o4b6o$62b2o10b2o8b2o18b2o14b2o10b
2o10b2o18b2o6b2o8b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b2o8b2o8b4o
4b4o8b4o4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b6o4b6o4b6o
4b2o2b2o4b4o6b4o6b6o4b6o4b6o!
For everyone else's convenience, here's the, for real this time (I hope), fixed version of I6_I6's script (which I also made self-contained by including the check_blockevo function so it doesn't need to reference a different script):

Code: Select all

# Finds the INT rule that the current rule emulates in 2x2 block
# evolution, then copies it to the system clipboard. Works by
# simulating an inflated transition table pattern for 2 ticks.
# If the current rule is not a 2x2 block rule, it aborts.

import golly as g

def check_blockevo(rule):
    """Check if a rule is a 2x2 block rule."""

    def has_trans(rulestr, tr):
        """Check if a transition exists in a rulestring."""
        mode, n, letter = tr[0], int(tr[1]), tr[2]
        # Select the relevant part of the rulestring (B or S)
        part = (rulestr.split('/')[0] if mode == 'B' else rulestr.split('/')[1])[1:]

        # Loop
        i = 0
        while i < len(part):
            if part[i].isdigit():
                num = int(part[i])
                i += 1
                letters = ""
                # Collect characters after number
                while i < len(part) and (part[i].isalpha() or part[i] == '-'):
                    letters += part[i]
                    i += 1
                if num == n:
                    if not letters:
                        return True
                    elif letters[0] == '-':
                        return letter not in letters[1:]
                    return letter in letters
            else:
                i += 1
        return False


    groups = [['B2a', 'B1c', 'S3a'],
             ['B3i', 'S5i'],
             ['B4w', 'S4q'] ,
             ['B5a', 'S6a', 'S7c']]

    # Output (boolean)
    return all(
        sum(has_trans(rule, t) for t in group) in (0, len(group))
        for group in groups
    )

def compress_rulestr(ruledict):
    """Compress a dictionary with transitions into a rulestring"""
    letters = ['', 'ce', 'aceikn', 'aceijknqry', 'aceijknqrtwyz', 'aceijknqry', 'aceikn', 'ce', '']
    result = []

    for n, item in ruledict.items():
        if len(item) == len(letters[n]):
            item = ""
        elif len(item) > len(letters[n]) / 2:
            item = '-' + "".join(sorted(set(letters[n]) - set(item)))
        result.append(f"{n}{item}")

    return "".join(result)

# Pattern with all transitions inflated to 2x2
trans_patt = g.parse("""
10b2o10b2o6b4o6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o2b2o6b2o6b2o12b2o6b2o6b
2o2b2o4b2o10b4o4b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o8b2o6b4o4b2o8b4o8b4o4b
6o4b2o8b2o2b2o4b4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o2b2o6b2o8b4o4b2o2b2o6b
2o10b2o6b2o6b2o2b2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$10b2o10b2o6b4o
6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o2b2o6b2o6b2o12b2o6b2o6b2o2b2o4b2o10b4o
4b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o8b2o6b4o4b2o8b4o8b4o4b6o4b2o8b2o2b2o4b
4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o2b2o6b2o8b4o4b2o2b2o6b2o10b2o6b2o6b2o2b
2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$50b2o38b2o18b2o2b2o4b2o12b2o4b
2o8b2o8b2o28b2o18b2o2b2o4b2o2b2o4b2o2b2o4b2o8b2o8b2o12b2o14b2o32b2o4b
2o2b2o18b2o4b2o12b2o8b2o8b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o8b2o4b2o2b
2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o$50b2o38b2o18b2o2b2o4b2o12b
2o4b2o8b2o8b2o28b2o18b2o2b2o4b2o2b2o4b2o2b2o4b2o8b2o8b2o12b2o14b2o32b
2o4b2o2b2o18b2o4b2o12b2o8b2o8b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o8b2o4b
2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o4b2o2b2o$62b2o10b2o8b2o18b2o14b
2o10b2o10b2o18b2o6b2o8b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b2o8b
2o8b4o4b4o8b4o4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b6o4b
6o4b6o4b2o2b2o4b4o6b4o6b6o4b6o4b6o$62b2o10b2o8b2o18b2o14b2o10b2o10b2o
18b2o6b2o8b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b2o8b2o8b4o4b4o8b
4o4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b6o4b6o4b6o4b2o2b
2o4b4o6b4o6b6o4b6o4b6o5$10b2o10b2o6b4o6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o
2b2o6b2o6b2o12b2o6b2o6b2o2b2o4b2o10b4o4b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o
8b2o6b4o4b2o8b4o8b4o4b6o4b2o8b2o2b2o4b4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o
2b2o6b2o8b4o4b2o2b2o6b2o10b2o6b2o6b2o2b2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o
2b2o4b6o$10b2o10b2o6b4o6b2o2b2o6b2o8b2o8b2o6b2o8b4o6b2o2b2o6b2o6b2o12b
2o6b2o6b2o2b2o4b2o10b4o4b2o2b2o4b2o8b2o2b2o6b2o6b2o2b2o8b2o6b4o4b2o8b
4o8b4o4b6o4b2o8b2o2b2o4b4o10b2o6b2o6b2o2b2o6b4o4b4o6b2o2b2o6b2o8b4o4b
2o2b2o6b2o10b2o6b2o6b2o2b2o4b2o2b2o4b2o2b2o6b4o6b4o4b2o2b2o4b6o$2b2o8b
2o8b2o8b2o8b2o6b4o8b2o8b2o8b2o6b4o8b2o6b6o4b4o8b4o4b4o6b4o6b4o8b2o8b2o
6b4o8b2o6b6o4b6o4b6o4b4o6b4o6b4o8b4o6b2o6b4o8b2o8b2o8b4o4b6o6b2o8b4o4b
4o8b4o6b4o6b4o4b6o4b6o4b6o4b6o6b4o4b6o4b6o4b6o4b6o4b6o4b6o$2b2o8b2o8b
2o8b2o8b2o6b4o8b2o8b2o8b2o6b4o8b2o6b6o4b4o8b4o4b4o6b4o6b4o8b2o8b2o6b4o
8b2o6b6o4b6o4b6o4b4o6b4o6b4o8b4o6b2o6b4o8b2o8b2o8b4o4b6o6b2o8b4o4b4o8b
4o6b4o6b4o4b6o4b6o4b6o4b6o6b4o4b6o4b6o4b6o4b6o4b6o4b6o$62b2o10b2o8b2o
18b2o14b2o10b2o10b2o18b2o6b2o8b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b
2o6b2o8b2o8b4o4b4o8b4o4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b
2o4b6o4b6o4b6o4b2o2b2o4b4o6b4o6b6o4b6o4b6o$62b2o10b2o8b2o18b2o14b2o10b
2o10b2o18b2o6b2o8b2o6b4o6b2o2b2o6b2o18b2o10b2o4b2o2b2o8b2o6b2o8b2o8b4o
4b4o8b4o4b6o4b4o6b6o6b4o4b2o2b2o4b4o6b6o4b4o10b2o4b2o2b2o4b6o4b6o4b6o
4b2o2b2o4b4o6b4o6b6o4b6o4b6o!
""")

# Check if rule supports 2x2 block evolution
if not check_blockevo(g.getrule()):
    g.exit("Rule does not support 2x2 block evolution.")

# Add layer, simulate inflated transitions pattern for 2 ticks
g.addlayer()
g.putcells(trans_patt, 0, 0)
g.run(2)

# Transitions
trans_lst = [(0, ''),
             (1, 'c'), (1, 'e'),
             (2, 'a'), (2, 'c'), (2, 'e'), (2, 'i'), (2, 'k'), (2, 'n'),
             (3, 'a'), (3, 'c'), (3, 'e'), (3, 'i'), (3, 'j'), (3, 'k'), (3, 'n'), (3, 'q'), (3, 'r'), (3, 'y'),
             (4, 'a'), (4, 'c'), (4, 'e'), (4, 'i'), (4, 'j'), (4, 'k'), (4, 'n'), (4, 'q'), (4, 'r'), (4, 't'), (4, 'w'), (4, 'y'), (4, 'z'),
             (5, 'a'), (5, 'c'), (5, 'e'), (5, 'i'), (5, 'j'), (5, 'k'), (5, 'n'), (5, 'q'), (5, 'r'), (5, 'y'),
             (6, 'a'), (6, 'c'), (6, 'e'), (6, 'i'), (6, 'k'), (6, 'n'),
             (7, 'c'), (7, 'e'),
             (8, '')]

btrans = {}
strans = {}

# Find emulated birth & survival transitions
for i in range(51):
    num, l = trans_lst[i]
    if g.getcell(10*i+2, 2) == 1:
        btrans[num] = btrans.get(num, "") + l
    if g.getcell(10*i+2, 12) == 1:
        strans[num] = strans.get(num, "") + l

g.dellayer()  # Delete layer

rule = f"B{compress_rulestr(btrans)}/S{compress_rulestr(strans)}"
g.show(f"2x2 block evolution emulates: {rule}.")  # Show result
g.setclipstr(rule)  # Copy to clipboard
(EDIT: replaced check_blockevo with the fixed version below)
Last edited by SuperSupermario24 on March 9th, 2026, 9:18 pm, edited 2 times in total.

Code: Select all

7b2o2bo4bobo$obob2o5bo2bo4bobo$2bo4bo2b2o3bo4b2o$2o2bobo3bob2obo3bo$ob
ob2obo3bobobob3obo$4bo6b2o3bobo2bo$2o2bo2b2o11bo!

User avatar
I6_I6
Posts: 733
Joined: July 26th, 2025, 8:44 pm
Location: Here, there, somewhere, anywhere, everywhere.
Contact:

Re: Exploring 2x2 block rules

Post by I6_I6 » March 9th, 2026, 6:14 am

SuperSupermario24 wrote:
March 9th, 2026, 5:22 am
stuff
*Sigh*
I knew I was doing something wrong :roll:
Seems like it finally works properly.

Code: Select all

#C [[ THEME Golly ]]
x = 27, y = 15, rule = LifeHistory
8.A$A6.A.A$3A4.BA2B.B2D$3.A4.2B.2B2DB$2.2A2.3B.6B2.3B$2.20B$4.19B$4.2B
C10BD4B$4.2B2C10BD4B$4.B2C11B2D3B$4.13B2D4B$5.12BD3B.B2A$6.13B3.BA.A$
6.3B.B3.B10.A$25.2A!
User:I6 I6/Elementary Emulators

kiho park
Posts: 92
Joined: September 24th, 2010, 12:16 am

Re: Exploring 2x2 block rules

Post by kiho park » March 9th, 2026, 7:28 am

According to my theory, Only B0 rules can have spaceships. Moreover, there are only 4 rules which possible to have any spaceship. B02a, B02, B012c3 and B013.

And.. Unfortunately, B02a and B012c3, B02 and B013 is showing different "phase of specific rule". So, We can only find any spaceship that works in 2x2 rule from B02a and B02 (or B012c3 and B013).

I also found two "c2o" spaceships in B02 (actual speed is 2c4o).

Code: Select all

x = 61, y = 42, rule = B1e2-ak3enqy4acikqtz5einq6cen7e8/S01e2cen3aeinq4eikrtwz5-knqr6-ae78
11b40o$9b2obobob14ob6obob9o2b3o$8b2o7b12obo6bobo13b2o$7b3o2b2o4b6ob5o
9bo8b3obobobo$2b2o2b2o4b3ob2o6b2obo2b8obob4o2b4obo$b2o2b3o3b7o4b3obobo
2b2ob2o3bob4obo2bo2bobob2o$3o2b3o2bo11bo3bob3o2bo2b2o3b3o3bobob3o3bo$b
ob2o5bo7b3obo9bob5obo6bob2obo2bo2b2o$o3bo4bo9bobo4bo6bo2bobo2b6o6b3o2b
3o$o3bo4bo9bobo4bo6bo2bobo2b6o6b3o2b3o$bob2o5bo7b3obo9bob5obo6bob2obo
2bo2b2o$3o2b3o2bo11bo3bob3o2bo2b2o3b3o3bobob3o3bo$b2o2b3o3b7o4b3obobo
2b2ob2o3bob4obo2bo2bobob2o$2b2o2b2o4b3ob2o6b2obo2b8obob4o2b4obo$7b3o2b
2o4b6ob5o9bo8b3obobobo$8b2o7b12obo6bobo13b2o$9b2obobob14ob6obob9o2b3o$
11b40o7$25b3o8b13o$18b7obobob4o2b3ob4obobob2o$15b3ob6o11b2obo4b3ob4o$
9b5ob3o2b3o3bo8b2o2bo2b2o2bob4o$7bob3obobob4ob5o8b2o3b2o3b2o2b3o$2bob
2obobo2b2obobob2ob3o15b4o3bob3o$4o3b5o2b2o2b6o2b2o14bobo2bob2o$o3bo24b
3o11b4o$3b2o24b2o2b8o$3b2o24b2o2b8o$o3bo24b3o11b4o$4o3b5o2b2o2b6o2b2o
14bobo2bob2o$2bob2obobo2b2obobob2ob3o15b4o3bob3o$7bob3obobob4ob5o8b2o
3b2o3b2o2b3o$9b5ob3o2b3o3bo8b2o2bo2b2o2bob4o$15b3ob6o11b2obo4b3ob4o$
18b7obobob4o2b3ob4obobob2o$25b3o8b13o!
Edit : Same spaceships in original rule

Code: Select all

x = 122, y = 84, rule = B034/S45
22b80o$22b80o$18b4o2b2o2b2o2b28o2b12o2b2o2b18o4b6o$18b4o2b2o2b2o2b28o
2b12o2b2o2b18o4b6o$16b4o14b24o2b2o12b2o2b2o26b4o$16b4o14b24o2b2o12b2o
2b2o26b4o$14b6o4b4o8b12o2b10o18b2o16b6o2b2o2b2o2b2o$14b6o4b4o8b12o2b
10o18b2o16b6o2b2o2b2o2b2o$4b4o4b4o8b6o2b4o12b4o2b2o4b16o2b2o2b8o4b8o2b
2o$4b4o4b4o8b6o2b4o12b4o2b2o4b16o2b2o2b8o4b8o2b2o$2b4o4b6o6b14o8b6o2b
2o2b2o4b4o2b4o6b2o2b8o2b2o4b2o4b2o2b2o2b4o$2b4o4b6o6b14o8b6o2b2o2b2o4b
4o2b4o6b2o2b8o2b2o4b2o4b2o2b2o2b4o$6o4b6o4b2o22b2o6b2o2b6o4b2o4b4o6b6o
6b2o2b2o2b6o6b2o$6o4b6o4b2o22b2o6b2o2b6o4b2o4b4o6b6o6b2o2b2o2b6o6b2o$
2b2o2b4o10b2o14b6o2b2o18b2o2b10o2b2o12b2o2b4o2b2o4b2o4b4o$2b2o2b4o10b
2o14b6o2b2o18b2o2b10o2b2o12b2o2b4o2b2o4b2o4b4o$2o6b2o8b2o18b2o2b2o8b2o
12b2o4b2o2b2o4b12o12b6o4b6o$2o6b2o8b2o18b2o2b2o8b2o12b2o4b2o2b2o4b12o
12b6o4b6o$2o6b2o8b2o18b2o2b2o8b2o12b2o4b2o2b2o4b12o12b6o4b6o$2o6b2o8b
2o18b2o2b2o8b2o12b2o4b2o2b2o4b12o12b6o4b6o$2b2o2b4o10b2o14b6o2b2o18b2o
2b10o2b2o12b2o2b4o2b2o4b2o4b4o$2b2o2b4o10b2o14b6o2b2o18b2o2b10o2b2o12b
2o2b4o2b2o4b2o4b4o$6o4b6o4b2o22b2o6b2o2b6o4b2o4b4o6b6o6b2o2b2o2b6o6b2o
$6o4b6o4b2o22b2o6b2o2b6o4b2o4b4o6b6o6b2o2b2o2b6o6b2o$2b4o4b6o6b14o8b6o
2b2o2b2o4b4o2b4o6b2o2b8o2b2o4b2o4b2o2b2o2b4o$2b4o4b6o6b14o8b6o2b2o2b2o
4b4o2b4o6b2o2b8o2b2o4b2o4b2o2b2o2b4o$4b4o4b4o8b6o2b4o12b4o2b2o4b16o2b
2o2b8o4b8o2b2o$4b4o4b4o8b6o2b4o12b4o2b2o4b16o2b2o2b8o4b8o2b2o$14b6o4b
4o8b12o2b10o18b2o16b6o2b2o2b2o2b2o$14b6o4b4o8b12o2b10o18b2o16b6o2b2o2b
2o2b2o$16b4o14b24o2b2o12b2o2b2o26b4o$16b4o14b24o2b2o12b2o2b2o26b4o$18b
4o2b2o2b2o2b28o2b12o2b2o2b18o4b6o$18b4o2b2o2b2o2b28o2b12o2b2o2b18o4b6o
$22b80o$22b80o13$50b6o16b26o$50b6o16b26o$36b14o2b2o2b2o2b8o4b6o2b8o2b
2o2b2o2b4o$36b14o2b2o2b2o2b8o4b6o2b8o2b2o2b2o2b4o$30b6o2b12o22b4o2b2o
8b6o2b8o$30b6o2b12o22b4o2b2o8b6o2b8o$18b10o2b6o4b6o6b2o16b4o4b2o4b4o4b
2o2b8o$18b10o2b6o4b6o6b2o16b4o4b2o4b4o4b2o2b8o$14b2o2b6o2b2o2b2o2b8o2b
10o16b4o6b4o6b4o4b6o$14b2o2b6o2b2o2b2o2b8o2b10o16b4o6b4o6b4o4b6o$4b2o
2b4o2b2o2b2o4b4o2b2o2b2o2b4o2b6o30b8o6b2o2b6o$4b2o2b4o2b2o2b2o4b4o2b2o
2b2o2b4o2b6o30b8o6b2o2b6o$8o6b10o4b4o4b12o4b4o28b2o2b2o4b2o2b4o$8o6b
10o4b4o4b12o4b4o28b2o2b2o4b2o2b4o$2o6b2o48b6o22b8o$2o6b2o48b6o22b8o$6b
4o48b4o4b16o$6b4o48b4o4b16o$6b4o48b4o4b16o$6b4o48b4o4b16o$2o6b2o48b6o
22b8o$2o6b2o48b6o22b8o$8o6b10o4b4o4b12o4b4o28b2o2b2o4b2o2b4o$8o6b10o4b
4o4b12o4b4o28b2o2b2o4b2o2b4o$4b2o2b4o2b2o2b2o4b4o2b2o2b2o2b4o2b6o30b8o
6b2o2b6o$4b2o2b4o2b2o2b2o4b4o2b2o2b2o2b4o2b6o30b8o6b2o2b6o$14b2o2b6o2b
2o2b2o2b8o2b10o16b4o6b4o6b4o4b6o$14b2o2b6o2b2o2b2o2b8o2b10o16b4o6b4o6b
4o4b6o$18b10o2b6o4b6o6b2o16b4o4b2o4b4o4b2o2b8o$18b10o2b6o4b6o6b2o16b4o
4b2o4b4o4b2o2b8o$30b6o2b12o22b4o2b2o8b6o2b8o$30b6o2b12o22b4o2b2o8b6o2b
8o$36b14o2b2o2b2o2b8o4b6o2b8o2b2o2b2o2b4o$36b14o2b2o2b2o2b8o4b6o2b8o2b
2o2b2o2b4o$50b6o16b26o$50b6o16b26o!
Can small adjustable spaceships overrun the speed limit of (|x|+|y|)/P = 1?

## B0 rules are the best! ##
日本語を勉強しています!

User avatar
I6_I6
Posts: 733
Joined: July 26th, 2025, 8:44 pm
Location: Here, there, somewhere, anywhere, everywhere.
Contact:

Re: Exploring 2x2 block rules

Post by I6_I6 » March 9th, 2026, 9:30 am

Turns out my scripts were still not fully fixed. While I was using the block rule checker script on B3/S23-a5 (Travelling Ts), it said it wasn't a 2x2 block rule (which is incorrect).
It was because of broken transition negation detection. Here's the full fixed script, also reduced a bit:

Code: Select all

# Checks if the current rule is a 2x2 block rule. This script
# does not work if the rule is neither INT nor OT.
# For a rule to support 2x2 block evolution, it must satisfy
# the following criteria:
# Has all or none of {B2a, B1c, S3a}
# Has all or none of {B3i, S5i}
# Has all or none of {B4w, S4q}
# Has all or none of {B5a, S6a, S7c}

import golly as g

def check_blockevo(rule):
    """Check if a rule is a 2x2 block rule."""

    def has_trans(rulestr, tr):
        """Check if a transition exists in a rulestring."""
        mode, n, letter = tr[0], int(tr[1]), tr[2]
        # Select the relevant part of the rulestring (B or S)
        part = (rulestr.split('/')[0] if mode == 'B' else rulestr.split('/')[1])[1:]

        # Loop
        i = 0
        while i < len(part):
            if part[i].isdigit():
                num = int(part[i])
                i += 1
                letters = ""
                # Collect characters after number
                while i < len(part) and (part[i].isalpha() or part[i] == '-'):
                    letters += part[i]
                    i += 1
                if num == n:
                    if not letters:
                        return True
                    elif letters[0] == '-':
                        return letter not in letters[1:]
                    return letter in letters
            else:
                i += 1
        return False


    groups = [['B2a', 'B1c', 'S3a'],
             ['B3i', 'S5i'],
             ['B4w', 'S4q'] ,
             ['B5a', 'S6a', 'S7c']]

    # Output (boolean)
    return all(
        sum(has_trans(rule, t) for t in group) in (0, len(group))
        for group in groups
    )


# Show
if check_blockevo(g.getrule()):
    g.show("Current rule is a 2x2 block rule.")
else:
    g.show("Current rule is not a 2x2 block rule.")
EDIT:
I brute-force enumerated all 64 unique block evolution rules and recorded the INT rules that they each emulate:

Code: Select all

B01c2a3i4w5a/S3a4q5i6a7c8 (BE012ac34): B/S
B01c2a3i4w5a/S3a4q5i6a7c (BE012ac3): B/S3a4aqr5-ekry6-i78
B01c2a3i4w/S3a4q5i8 (BE012ac4): B1c2a3j4ajn5knqr6ae/S2ek3acjnq4anw5a
B01c2a3i4w/S3a4q5i (BE012ac): B5i6acn78/S3eij4-cqy5678
B01c2a3i5a/S3a5i6a7c8 (BE012a34): B6n/S2n
B01c2a3i5a/S3a5i6a7c (BE012a3): B2e3ejk4ejkrw5cknqy6ck7c/S1c2ck3-eijr4acknry5-jry6ack78
B01c2a3i/S3a5i8 (BE012a4): B1c2an3an4anwz5kqr6-ci7c/S2e3ajk4akqw5ajk6e
B01c2a3i/S3a5i (BE012a): B3e4ejr5cinqy6-ei78/S2c3-akqr4-qz5678
B01c2a4w5a/S3a4q6a7c8 (BE012c34): B3i4int5ey6k7e/S1e2k3ey4irt5i
B01c2a4w5a/S3a4q6a7c (BE012c3): B2a3jnqr4ajkwyz5-ceiy6aei/S2aei3-ceiy4jkqryz5acinr6-ci7c8
B01c2a4w/S3a4q8 (BE012c4): B12ac3ei4jr5inqy6ak7e/S2c3-akqr4-ceqz5-ceky6a
B01c2a4w/S3a4q (BE012c): B4wz5akqr6-c78/S2ei3aejkr4-cny5-e678
B01c2a5a/S3a6a7c8 (BE0134): B3eij4ikntz5aenq6cen7e/S1e2cen3aenq4ikrtz5eij
B01c2a5a/S3a6a7c (BE013): B2ae3knqr4aejrwy5cjkry6aik7c/S1c2aik3-einq4cjnqry5-enqy6ak7c8
B01c2a/S3a8 (BE014): B12acn3ai4a5ai6acn7/S3eij4-ceqy5-cy6ae
B01c2a/S3a (BE01): B4ejw5-eij678/S2eik3-i45678
B03i4w5a/S4q5i6a7c8 (BE02ac34): B7c/S4jw5ckr6k
B03i4w5a/S4q5i6a7c (BE02ac3): B12-k3-cikr4-eqwy5-acy6ae/S01e2-i3-ekry4anqrw5-ekry6-i7e8
B03i4w/S4q5i8 (BE02ac4): B1c2ak3acjkr4jnry5acjkr6ak7c/S1c2ak3acjkr4jnry5acjkr6ak7c
B03i4w/S4q5i (BE02ac): B1e2-ak3enqy4-ejnrwy5einq6cen7e8/S01e2cen3aeinq4-acjnqy5-knqr6-ae78
B03i5a/S5i6a7c8 (BE02a34): B/S2n3ckq4jknwyz5acnr6ekn
B03i5a/S5i6a7c (BE02a3): B12aci3ejkqy4-jkqryz5-ackq6-in7c/S012-i3-aer4cknrwy5-ajry6ack7e8
B03i/S5i8 (BE02a4): B1c2-ci3acnr4jknwyz5-ceiy6ae/S2ae3-ceiy4jkqryz5acnr6-ci7c
B03i/S5i (BE02a): B1e2ci3ejkqy4-jknwyz5ceiy6ckn78/S012ckn3ceiy4-ajkqyz5-jnqr6-a78
B04w5a/S4q6a7c8 (BE02c34): B3i4aint5-ckq6-in7c/S1e2aek3-acer4knrwy5-ajry6ack7e
B04w5a/S4q6a7c (BE02c3): B1c2ein3ajry4-ejknqr5aer6i/S01e2in3ackq4jknwyz5acinr6ekn8
B04w/S4q8 (BE02c4): B12ack3-jry4ajknr5-eijr6ck7c/S1c2ck3-eijr4aknry5-jry6ack7
B04w/S4q (BE02c): B2ein3jry4-aejknr5eijr6-ck7e8/S01e2-ck3aeijr4-cknqy5-ejk6-e78
B05a/S6a7c8 (BE034): B3eij4-ceqy5-cy6ae/S1e2-i3-ekry4anqrw5-ekry6-i7e
B05a/S6a7c (BE03): B1c2i3ekry4-anqrw5ekry6i7c/S012-ae3acy4cjqw5cikr6k8
B0/S8 (BE04): B12-i3-ekry4anw5a/S3a4aqr5-ekry6-i7
B0/S (BE0): B2i3ekry4-anw5-a678/S012345678
B1c2a3i4w5a/S3a4q5i6a7c8 (BE12ac34): B12345678/S012345678
B1c2a3i4w5a/S3a4q5i6a7c (BE12ac3): B12-i3-ekry4anw5a/S3a4aqr5-ekry6-i7
B1c2a3i4w/S3a4q5i8 (BE12ac4): B12-ek3-cjnq4-nqrw5-cjnq6-ek7/S012-ae3-knqr4-aery5-jy6-ai7e8
B1c2a3i4w/S3a4q5i (BE12ac): B12acn3ai4a5ai6acn7/S3eij4-ceqy5-cy6ae
B1c2a3i5a/S3a5i6a7c8 (BE12a34): B12-en3-j4-ew56-n78/S012-n34-c5678
B1c2a3i5a/S3a5i6a7c (BE12a3): B12ack3-jry4ajknr5-eijr6ck7c/S1c2ck3-eijr4aknry5-jry6ack7
B1c2a3i/S3a5i8 (BE12a4): B12aci3eiry4-aeknqw5-acjk6aik7e/S01e2ci3-kqr4-aceqrz5cijqr6cek7e8
B1c2a3i/S3a5i (BE12a): B12ac3ei4jr5inqy6ak7e/S2c3-akqr4-ceqz5-ceky6a
B1c2a4w5a/S3a4q6a7c8 (BE12c34): B1c2-c3-ijq4-ait5-ey6-ik7c8/S01c2-ik3-ey4-irt5-i678
B1c2a4w5a/S3a4q6a7c (BE12c3): B1c2-ci3acnr4jknwyz5-ceiy6ae/S2ae3-ceiy4jkqryz5acnr6-ci7c
B1c2a4w/S3a4q8 (BE12c4): B1c2ain3aekny4acenwz5kqr6-ci7c/S01c2cen3acjk4ackqrw5-eiry6ekn8
B1c2a4w/S3a4q (BE12c): B1c2an3an4anwz5kqr6-ci7c/S2e3ajk4akqw5ajk6e
B1c2a5a/S3a6a7c8 (BE134): B1c2aik3-einq4cjnqry5-enqy6ak7c8/S01c2ak3cijkr4-cikrtz5-eij678
B1c2a5a/S3a6a7c (BE13): B1c2ak3acjkr4jnry5acjkr6ak7c/S1c2ak3acjkr4jnry5acjkr6ak7c
B1c2a/S3a8 (BE14): B1c2ai3jy4acjn5knqr6ae/S02ek3cjnq4nqrw5cjnq6ek8
B1c2a/S3a (BE1): B1c2a3j4ajn5knqr6ae/S2ek3acjnq4anw5a
B3i4w5a/S4q5i6a7c8 (BE2ac34): B3eij4-cqy5678/S1e2345678
B3i4w5a/S4q5i6a7c (BE2ac3): B3eij4-ceqy5-cy6ae/S1e2-i3-ekry4anqrw5-ekry6-i7e
B3i4w/S4q5i8 (BE2ac4): B3eij4eikntz5aenqy6-ak7e/S1e2-ak3enqy4-ejnrwy5einq6cen7e8
B3i4w/S4q5i (BE2ac): B3eij4ikntz5aenq6cen7e/S1e2cen3aenq4ikrtz5eij
B3i5a/S5i6a7c8 (BE2a34): B3i4aint5-ckq6-n78/S1e2-cn3-c4-c5678
B3i5a/S5i6a7c (BE2a3): B3i4aint5-ckq6-in7c/S1e2aek3-acer4knrwy5-ajry6ack7e
B3i/S5i8 (BE2a4): B3i4int5ey6ik7e/S1e2ik3ey4ait5ijq6c7e8
B3i/S5i (BE2a): B3i4int5ey6k7e/S1e2k3ey4irt5i
B4w5a/S4q6a7c8 (BE2c34): B4e5c6cn7c8/S2n3ckq4-airt5-i678
B4w5a/S4q6a7c (BE2c3): B/S2n3ckq4jknwyz5acnr6ekn
B4w/S4q8 (BE2c4): B4e6n/S2n4cq5j6en8
B4w/S4q (BE2c): B6n/S2n
B5a/S6a7c8 (BE34): B7c8/S4ejw5-eij678
B5a/S6a7c (BE3): B7c/S4jw5ckr6k
B/S8 (BE4): B/S8
B/S (BE): B/S
EDIT 2:
A couple of p8 photons in BE02a (really B03i/S5i):

Code: Select all

x = 44, y = 56, rule = B03i/S5i
2o6b2o12b2o4b2o4b2o4b2o$2o6b2o12b2o4b2o4b2o4b2o$2o6b2o12b2o4b2o4b2o4b
2o$2o6b2o12b2o4b2o4b2o4b2o$2o6b2o12b2o16b2o$2o6b2o12b2o16b2o$2o2b2o2b
2o12b2o16b2o$2o2b2o2b2o12b2o16b2o$8b2o16b4o4b4o$8b2o16b4o4b4o$4b2o2b2o
16b4o4b4o$4b2o2b2o16b4o4b4o$6b4o10b2o20b2o$6b4o10b2o20b2o$20b2o2b2o12b
2o2b2o$20b2o2b2o12b2o2b2o$20b4o16b4o$20b4o16b4o$22b4o2b2o4b2o2b4o$22b
4o2b2o4b2o2b4o$24b2o4b4o4b2o$24b2o4b4o4b2o3$22b2o16b2o$22b2o16b2o3$22b
2o4b2o4b2o4b2o$22b2o4b2o4b2o4b2o$22b2o4b8o4b2o$22b2o4b8o4b2o$22b20o$
22b20o$24b2o2b2o4b2o2b2o$24b2o2b2o4b2o2b2o3$22b2o16b2o$22b2o16b2o$22b
4o12b4o$22b4o12b4o$30b4o$30b4o3$26b2o2b4o2b2o$26b2o2b4o2b2o$26b12o$26b
12o$30b4o$30b4o$28b2o4b2o$28b2o4b2o$28b8o$28b8o!
Emulates B1e2ci3ejkqy4aceiqrt5ceiy6ckn78/S012ckn3ceiy4ceinrtw5-jnqr6-a78.
In the process, I realized that patterns in B03i/S5i starting with only 2x1 rectangles will remain as 2x1 rectangles:

Code: Select all

x = 40, y = 20, rule = B03i/S5i
2b2o8b6o4b6o6b2o$2o6b6o4b2o4b10o2b4o$4o2b4o2b2o2b6o2b2o2b8o$4o8b6o2b2o
2b2o2b6o$2o2b2o2b6o2b6o2b4o2b4o$6b4o2b2o2b4o4b10o2b2o$2b2o4b2o2b2o2b
12o8b4o$2b6o2b2o2b2o2b4o4b12o$2o6b2o2b6o2b4o4b6o2b4o$6o4b2o8b2o2b4o2b
2o4b2o$2b2o4b2o2b4o4b2o6b2o2b2o2b4o$2o6b6o2b6o2b6o6b4o$2b2o2b4o2b4o6b
6o2b4o2b2o$2b2o12b2o2b2o2b4o2b6o$6b2o4b4o6b2o2b4o6b2o$4o4b2o4b26o$2o2b
4o2b4o4b2o2b8o$4b4o2b2o4b2o2b4o2b4o6b4o$2b2o2b2o2b6o2b4o4b2o6b2o2b2o$
2o4b2o4b2o2b2o4b4o2b6o2b4o!

Code: Select all

#C [[ THEME Golly ]]
x = 27, y = 15, rule = LifeHistory
8.A$A6.A.A$3A4.BA2B.B2D$3.A4.2B.2B2DB$2.2A2.3B.6B2.3B$2.20B$4.19B$4.2B
C10BD4B$4.2B2C10BD4B$4.B2C11B2D3B$4.13B2D4B$5.12BD3B.B2A$6.13B3.BA.A$
6.3B.B3.B10.A$25.2A!
User:I6 I6/Elementary Emulators

User avatar
rabbit
Posts: 193
Joined: March 4th, 2024, 6:00 am
Location: Stuck inside a magician's hat. it hurts so bad

Re: Exploring 2x2 block rules

Post by rabbit » March 13th, 2026, 7:10 pm

Here's a simple Sierpinski builder in B03/S5:

Code: Select all

x = 8, y = 4, rule = B03/S5
2o$2o$2o2b4o$2o2b4o!
It can be slightly disturbed to produce a different Sierpinski wave:

Code: Select all

x = 16, y = 22, rule = B03/S5
8b4o$8b4o3$2o$2o$2o$2o5$2o6b2o$2o6b2o$2o6b2o2b4o$2o6b2o2b4o3$4b2o$4b2o
$4b2o$4b2o!
That's the bunny. (she/her)

User avatar
LaundryPizza03
Posts: 2596
Joined: December 15th, 2017, 12:05 am
Location: Unidentified location "https://en.wikipedia.org/wiki/Texas"

Re: Exploring 2x2 block rules

Post by LaundryPizza03 » March 27th, 2026, 2:18 am

I began apgsearching BE2ac and discovered this p10 quickly:

Code: Select all

x = 6, y = 12, rule = B34/S45
6o$6o3$6o$6o$6o$6o3$6o$6o!
This was the 2c/4o I originally discovered in BE02ac in 2020 (at this post):

Code: Select all

x = 142, y = 32, rule = B034/S45
66b4o16b4o$66b4o16b4o$30b6o30b4o20b42o$30b6o30b4o20b42o$14b12o8b4o24b
10o2b4o8b4o2b2o2b10o2b22o2b4o$14b12o8b4o24b10o2b4o8b4o2b2o2b10o2b22o2b
4o$4b4o4b4o2b8o8b4o22b12o2b2o4b2o2b2o2b14o4b2o22b8o$4b4o4b4o2b8o8b4o
22b12o2b2o4b2o2b2o2b14o4b2o22b8o$2b4o4b4o2b2o2b4o14b2o6b10o2b2o2b2o16b
2o4b4o4b2o8b2o2b2o4b4o10b2o2b6o$2b4o4b4o2b2o2b4o14b2o6b10o2b2o2b2o16b
2o4b4o4b2o8b2o2b2o4b4o10b2o2b6o$6o4b10o20b2o2b2o2b2o2b2o4b8o12b6o2b2o
2b2o4b4o2b2o8b8o10b4o2b2o$6o4b10o20b2o2b2o2b2o2b2o4b8o12b6o2b2o2b2o4b
4o2b2o8b8o10b4o2b2o$2b2o2b4o28b2o2b4o22b4o2b14o4b4o8b2o6b4o6b4o6b4o$2b
2o2b4o28b2o2b4o22b4o2b14o4b4o8b2o6b4o6b4o6b4o$2o6b2o32b2o6b4o20b2o12b
2o24b2o22b4o$2o6b2o32b2o6b4o20b2o12b2o24b2o22b4o$2o6b2o32b2o6b4o20b2o
12b2o24b2o22b4o$2o6b2o32b2o6b4o20b2o12b2o24b2o22b4o$2b2o2b4o28b2o2b4o
22b4o2b14o4b4o8b2o6b4o6b4o6b4o$2b2o2b4o28b2o2b4o22b4o2b14o4b4o8b2o6b4o
6b4o6b4o$6o4b10o20b2o2b2o2b2o2b2o4b8o12b6o2b2o2b2o4b4o2b2o8b8o10b4o2b
2o$6o4b10o20b2o2b2o2b2o2b2o4b8o12b6o2b2o2b2o4b4o2b2o8b8o10b4o2b2o$2b4o
4b4o2b2o2b4o14b2o6b10o2b2o2b2o16b2o4b4o4b2o8b2o2b2o4b4o10b2o2b6o$2b4o
4b4o2b2o2b4o14b2o6b10o2b2o2b2o16b2o4b4o4b2o8b2o2b2o4b4o10b2o2b6o$4b4o
4b4o2b8o8b4o22b12o2b2o4b2o2b2o2b14o4b2o22b8o$4b4o4b4o2b8o8b4o22b12o2b
2o4b2o2b2o2b14o4b2o22b8o$14b12o8b4o24b10o2b4o8b4o2b2o2b10o2b22o2b4o$
14b12o8b4o24b10o2b4o8b4o2b2o2b10o2b22o2b4o$30b6o30b4o20b42o$30b6o30b4o
20b42o$66b4o16b4o$66b4o16b4o!
All known spaceships in BE02a and BE02ac:

Code: Select all

>>>B03/S5
#C Glider 15411, c/1 orthogonal (period 4/2)
#C Discovered by LaundryPizza03, 2019
#C
#C B012345678 S012345678
#C  X--X--        --X---
#C
x = 8, y = 12, rule = B03/S5
4b4o$4b4o$4b4o$4b4o$2o$2o$2o$2o$2o4b2o$2o4b2o$2o4b2o$2o4b2o!

#C Glider 23623, c/2 diagonal (period 4/2)
#C Discovered by LaundryPizza03, 2020
#C
#C B012345678 S012345678
#C  X--X--        --X---
#C
x = 8, y = 6, rule = B03/S5
8o$8o$8o$8o$2b2o2b2o$2b2o2b2o!

#C Glider 26388, c/2 orthogonal (period 4)
#C Discovered by LaundryPizza03, 2021
#C
#C B012345678 S012345678
#C  X--X--        --X---
#C
x = 88, y = 34, rule = B03/S5
6b4o4b4o8b4o4b4o12b4o4b4o8b4o4b4o$6b4o4b4o8b4o4b4o12b4o4b4o8b4o4b4o$6b2o
2b4o2b2o8b2o2b4o2b2o12b2o2b4o2b2o8b2o2b4o2b2o$6b2o2b4o2b2o8b2o2b4o2b2o
12b2o2b4o2b2o8b2o2b4o2b2o$6b2o8b2o8b2o8b2o12b2o8b2o8b2o8b2o$6b2o8b2o8b2o
8b2o12b2o8b2o8b2o8b2o$8b72o$8b72o$8b8o2b6o2b2o2b28o2b2o2b6o2b8o$8b8o2b6o
2b2o2b28o2b2o2b6o2b8o$8b6o6b4o2b2o2b12o4b12o2b2o2b4o6b6o$8b6o6b4o2b2o2b
12o4b12o2b2o2b4o6b6o$4b10o4b6o6b2o6b4o4b4o6b2o6b6o4b10o$4b10o4b6o6b2o6b
4o4b4o6b2o6b6o4b10o$10b6o14b2o6b4o4b4o6b2o14b6o$10b6o14b2o6b4o4b4o6b2o
14b6o$4b16o4b2o4b2o8b2o4b2o8b2o4b2o4b16o$4b16o4b2o4b2o8b2o4b2o8b2o4b2o4b
16o$2b2o10b2o6b2o16b8o16b2o6b2o10b2o$2b2o10b2o6b2o16b8o16b2o6b2o10b2o$4o
16b2o4b2o6b4o4b4o4b4o6b2o4b2o16b4o$4o16b2o4b2o6b4o4b4o4b4o6b2o4b2o16b4o$
4o2b2o2b10o4b2o6b8o8b8o6b2o4b10o2b2o2b4o$4o2b2o2b10o4b2o6b8o8b8o6b2o4b
10o2b2o2b4o$6o4b2o8b6o4b2o8b2o4b2o8b2o4b6o8b2o4b6o$6o4b2o8b6o4b2o8b2o4b
2o8b2o4b6o8b2o4b6o$2o18b6o4b6o4b2o4b2o4b6o4b6o18b2o$2o18b6o4b6o4b2o4b2o
4b6o4b6o18b2o$8b2o8b10o8b16o8b10o8b2o$8b2o8b10o8b16o8b10o8b2o$6o10b6o6b
2o10b2o4b2o10b2o6b6o10b6o$6o10b6o6b2o10b2o4b2o10b2o6b6o10b6o$4b2o2b2o2b
4o2b2o2b4o2b2o2b4o2b2o2b4o2b2o2b4o2b2o2b4o2b2o2b4o2b2o2b2o$4b2o2b2o2b4o
2b2o2b4o2b2o2b4o2b2o2b4o2b2o2b4o2b2o2b4o2b2o2b4o2b2o2b2o!

#C Glider 30639, c/1 orthogonal (period 8/2)
#C Discovered by I6_I6, 2026
#C
#C B012345678 S012345678
#C  X--X--        --X---
#C
x = 10, y = 14, rule = B03/S5
2o6b2o$2o6b2o$2o6b2o$2o6b2o3$4b2o$4b2o$2o2b4o$2o2b4o$2o2b4o$2o2b4o$2b4o$
2b4o!

>>>B034/S45
#C Glider 15412, c/1 orthogonal (period 2)
#C Discovered by LaundryPizza03, 2020
#C
#C B012345678 S012345678
#C  X--XX-        -XX---
#C
x = 24, y = 22, rule = B034/S45
10b4o$10b4o$2b8o$2b8o$12o2b2o$12o2b2o$10o6b2o$10o6b2o$2b6o4b4o2b2o$2b6o
4b4o2b2o$8b16o$8b16o$6b2o4b4o2b2o$6b2o4b4o2b2o$4b6o6b2o$4b6o6b2o$4b8o2b
2o$4b8o2b2o$6b4o$6b4o$10b4o$10b4o!

#C Glider 15597, c/1 orthogonal (period 4/2)
#C
#C B012345678 S012345678
#C  X--XX-        -XX---
#C
x = 24, y = 28, rule = B034/S45
16b4o$16b4o$2b6o4b4o$2b6o4b4o$8o2b8o2b2o$8o2b8o2b2o$2o2b4o10b2o$2o2b4o
10b2o$18b2o2b2o$18b2o2b2o$2b10o4b6o$2b10o4b6o$10o2b2o$10o2b2o$12o$12o$2b
10o4b6o$2b10o4b6o$14b6o2b2o$14b6o2b2o$2o2b4o10b2o$2o2b4o10b2o$8o2b8o2b2o
$8o2b8o2b2o$2b6o4b4o$2b6o4b4o$16b4o$16b4o!

#C Glider 26489, c/2 diagonal (period 4/2)
#C Discovered by LaundryPizza03, 2021
#C
#C B012345678 S012345678
#C  X--XX-        -XX---
#C
x = 56, y = 58, rule = B034/S45
20b4o$20b4o$22b2o2b4o$22b2o2b4o$20b4o2b6o$20b4o2b6o$22b2o4b4o$22b2o4b4o$
22b10o$22b10o$22b2o2b6o$22b2o2b6o$24b2o2b8o$24b2o2b8o$34b4o$34b4o$34b4o$
34b4o$26b4o10b4o$26b4o10b4o$6o20b2o2b2o10b4o$6o20b2o2b2o10b4o$2b6o22b2o
12b2o$2b6o22b2o12b2o$14o12b6o12b2o$14o12b6o12b2o$2o4b2o2b6o6b14o8b2o$2o
4b2o2b6o6b14o8b2o$2b2o10b2o2b2o6b2o2b2o2b2o2b6o$2b2o10b2o2b2o6b2o2b2o2b
2o2b6o$4b8o6b6o2b10o4b4o$4b8o6b6o2b10o4b4o$6b4o2b2o4b2o6b12o4b2o$6b4o2b
2o4b2o6b12o4b2o$12b2o4b2o8b8o4b4o$12b2o4b2o8b8o4b4o$16b2o8b4o2b6o4b6o$
16b2o8b4o2b6o4b6o$16b2o8b4o2b4o2b2o4b2o4b4o$16b2o8b4o2b4o2b2o4b2o4b4o$
16b2o12b6o12b2o2b4o$16b2o12b6o12b2o2b4o$28b10o10b2o2b4o$28b10o10b2o2b4o$
20b4o6b4o2b2o4b2o4b6o$20b4o6b4o2b2o4b2o4b6o$38b4o4b2o2b2o$38b4o4b2o2b2o$
38b4o4b6o$38b4o4b6o$44b2o2b8o$44b2o2b8o$38b2o2b4o4b6o$38b2o2b4o4b6o$44b
4o4b4o$44b4o4b4o$50b4o$50b4o!

#C Glider 30638, c/2 orthogonal (period 4)
#C Discovered by rabbit, 2026
#C
#C B012345678 S012345678
#C  X--XX-        -XX---
#C
x = 104, y = 36, rule = B034/S45
50b6o16b26o$50b6o16b26o$36b14o2b2o2b2o2b8o4b6o2b8o2b2o2b2o2b4o$36b14o2b
2o2b2o2b8o4b6o2b8o2b2o2b2o2b4o$30b6o2b12o22b4o2b2o8b6o2b8o$30b6o2b12o22b
4o2b2o8b6o2b8o$18b10o2b6o4b6o6b2o16b4o4b2o4b4o4b2o2b8o$18b10o2b6o4b6o6b
2o16b4o4b2o4b4o4b2o2b8o$14b2o2b6o2b2o2b2o2b8o2b10o16b4o6b4o6b4o4b6o$14b
2o2b6o2b2o2b2o2b8o2b10o16b4o6b4o6b4o4b6o$4b2o2b4o2b2o2b2o4b4o2b2o2b2o2b
4o2b6o30b8o6b2o2b6o$4b2o2b4o2b2o2b2o4b4o2b2o2b2o2b4o2b6o30b8o6b2o2b6o$8o
6b10o4b4o4b12o4b4o28b2o2b2o4b2o2b4o$8o6b10o4b4o4b12o4b4o28b2o2b2o4b2o2b
4o$2o6b2o48b6o22b8o$2o6b2o48b6o22b8o$6b4o48b4o4b16o$6b4o48b4o4b16o$6b4o
48b4o4b16o$6b4o48b4o4b16o$2o6b2o48b6o22b8o$2o6b2o48b6o22b8o$8o6b10o4b4o
4b12o4b4o28b2o2b2o4b2o2b4o$8o6b10o4b4o4b12o4b4o28b2o2b2o4b2o2b4o$4b2o2b
4o2b2o2b2o4b4o2b2o2b2o2b4o2b6o30b8o6b2o2b6o$4b2o2b4o2b2o2b2o4b4o2b2o2b2o
2b4o2b6o30b8o6b2o2b6o$14b2o2b6o2b2o2b2o2b8o2b10o16b4o6b4o6b4o4b6o$14b2o
2b6o2b2o2b2o2b8o2b10o16b4o6b4o6b4o4b6o$18b10o2b6o4b6o6b2o16b4o4b2o4b4o4b
2o2b8o$18b10o2b6o4b6o6b2o16b4o4b2o4b4o4b2o2b8o$30b6o2b12o22b4o2b2o8b6o2b
8o$30b6o2b12o22b4o2b2o8b6o2b8o$36b14o2b2o2b2o2b8o4b6o2b8o2b2o2b2o2b4o$
36b14o2b2o2b2o2b8o4b6o2b8o2b2o2b2o2b4o$50b6o16b26o$50b6o16b26o!

Code: Select all

x = 4, y = 3, rule = B3-q4z5y/S234k5j
2b2o$b2o$2o!
LaundryPizza03 at Wikipedia

User avatar
hotcrystal0
Posts: 4337
Joined: July 3rd, 2020, 5:32 pm
Location: wherever you think I am

Re: Exploring 2x2 block rules

Post by hotcrystal0 » April 10th, 2026, 10:54 am

Is a 2x2 block rule where the 2x2 blocks emulate some other well-known CA (probably an INT rule) every other generation possible? Also, are there 2x2 rules with natural spaceships?
wherever I go on the internet I bring with myself nothing but problems.

Code: Select all

x = 192, y = 53, rule = B3/S23
33$42b4o$41b6o$40b2ob4o$41b2o3$41b2o$39bo6bo$38bo8bo$38bo8bo$38b9o3$42b
4o$41b6o$40b2ob4o$41b2o!

User avatar
I6_I6
Posts: 733
Joined: July 26th, 2025, 8:44 pm
Location: Here, there, somewhere, anywhere, everywhere.
Contact:

Re: Exploring 2x2 block rules

Post by I6_I6 » April 10th, 2026, 2:27 pm

hotcrystal0 wrote:
April 10th, 2026, 10:54 am
Is a 2x2 block rule where the 2x2 blocks emulate some other well-known CA (probably an INT rule) every other generation possible? Also, are there 2x2 rules with natural spaceships?
Every 2x2 block rule actually does emulate an INT rule. (Reading the rest of this thread explains a lot.)

There are natural spaceships in 2x2 rules, such as the c/8d in the original 2x2 rule (B36/S125). I don't think there are any rules with natural 2x2 block ships, though. The only rules that can have block spaceships are explosive.

Code: Select all

#C [[ THEME Golly ]]
x = 27, y = 15, rule = LifeHistory
8.A$A6.A.A$3A4.BA2B.B2D$3.A4.2B.2B2DB$2.2A2.3B.6B2.3B$2.20B$4.19B$4.2B
C10BD4B$4.2B2C10BD4B$4.B2C11B2D3B$4.13B2D4B$5.12BD3B.B2A$6.13B3.BA.A$
6.3B.B3.B10.A$25.2A!
User:I6 I6/Elementary Emulators

Post Reply