In this video:
Stephen Wolfram talks about such an elementary cellular automaton at 17:01. Does anybody have an idea which one exactly he could be talking about?
In this video:
Stephen Wolfram talks about such an elementary cellular automaton at 17:01. Does anybody have an idea which one exactly he could be talking about?
There are more details — quite a lot more details — in the original Announcing the Rule 30 Prizes post on Stephen Wolfram's blog. In particular, the specific rule is named there:
Here’s a somewhat funky example—found by a search—of a rule with 4 possible colors (totalistic code 150898). Run it for 200 steps, and the center column looks quite random:
[Image 1]
After 500 steps, the whole pattern still looks quite random:
[Image 2]
But if one zooms in around the center column, there’s something surprising: after 251 steps, the center column seems to evolve to a fixed value (or at least it’s fixed for more than a million steps):
[Image 3]
As it turns out, the Mathematica code to generate the images (and thus simulate the rule) is also hidden on the blog post; selecting and copy-pasting the first image on the page, for example, yields the following code snippet:
ArrayPlot[
CellularAutomaton[{150898, {4, 1}, 1}, {{1}, 0}, {200, 150 {-1, 1}}],
ColorRules -> {0 -> Hue[0.12, 1, 1], 1 -> Hue[0, 0.73, 0.92],
2 -> Hue[0.13, 0.5, 1], 3 -> Hue[0.17, 0, 1]},
PixelConstrained -> 2, Frame -> False]
If you'd rather not just try to figure out what that code does, I believe ANKoS page 60 (annoyingly, the blog post links to page 61) describes Wolfram's convention for numbering 1D totalistic CA rules and how to decode and simulate them. Specifically:
Just to confirm that decoding and applying the rule like this indeed yields output matching the images in the blog post, here's a simple Python program to simulate this rule on a finite wrap-around lattice:
rule = 150898
states = 4
width = 3
decode rule number
table = tuple((rule // states*k) % states for k in range(width(states-1)+1))
initial cell states
cells = ((0,) * 20) + (1,) + ((0,) * 20)
transition function
def new_state(i):
neighbors = (cells[(i + j - width // 2) % len(cells)] for j in range(width))
return table[sum(neighbors)]
for t in range(20):
print("".join(str(s) for s in cells))
cells = tuple(new_state(i) for i in range(len(cells)))
Simulating this rule on a sufficiently wide lattice, starting from a single 1 cell on a background of 0 cells, one can observe that the center cell indeed eventually gets stuck in state 1 while its neighbors alternate quasi-randomly between states 1 and 3. Indeed, examining the base-4 rule code, it's not too hard to see why this particular configuration at the center of a symmetric pattern is invariant under the rule:
Thus, once the five center columns of a centrally symmetric pattern under this rule end up in the configuration "$a111a$" or "$b313b$", where $a$ is any state and $b$ is any state other than 2, they cannot ever again enter any configuration not of this kind.