Evolutionary meme inspired algorithm​
​by Daniel Carvalho
To explore a digital cell division process...
This algorithm evolves in time, starting with a given initial condition and applying the rule to get the next step.
Facebook meme state the algorithm:​​
https://www.facebook.com/photo?fbid=10158490152094865&set=gm.1148745835610201
This process proposed in the meme can be made by a substitution systems.
It is possible to implement it with string replace function, and of course providing an initial condition as parameter:
In[]:=
StringReplace["o",{"o"->"O","O"->"8","8"->"oo"}]
Out[]=
O
Let's test with a bigger string
In[]:=
StringReplace["oO8",{"o"->"O","O"->"8","8"->"oo"}]
Out[]=
O8oo
And test with a larger one
In[]:=
StringReplace["oO88ooOOo8oO",{"o"->"O","O"->"8","8"->"oo"}]
Out[]=
O8ooooOO88OooO8
Let's create a function with the string replace rule defined in the meme:
In[]:=
nextStep[s_String]:=StringReplace[s,{"o"->"O","O"->"8","8"->"oo"}];
We can apply the string replace rule in a nested manner in the initial condition, we can do it with NestList function, such as:
In[]:=
NestList[Framed[#]&,i,4]
Out[]=
i,
i
,
i
,
i
,
i

Test with "o" as initial condition, and apply it repetitively for 5 times:
In[]:=
NestList[nextStep,"o",5]
Out[]=
{o,O,8,oo,OO,88}
It behaves such as the meme suggested.
Test again nesting 10 times:
In[]:=
NestList[nextStep,"o",10]
Out[]=
{o,O,8,oo,OO,88,oooo,OOOO,8888,oooooooo,OOOOOOOO}
Now 20 times on top of a single cell as initial condition
In[]:=
NestList[nextStep,"o",20]//Column
Out[]=
o
O
8
oo
OO
88
oooo
OOOO
8888
oooooooo
OOOOOOOO
88888888
oooooooooooooooo
OOOOOOOOOOOOOOOO
8888888888888888
oooooooooooooooooooooooooooooooo
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
88888888888888888888888888888888
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
8888888888888888888888888888888888888888888888888888888888888888
Create a random initial condition with the 4 options, according the meme:
In[]:=
init=StringJoin[RandomChoice[{"o","O","8","oo"},10]]
Out[]=
Oo8oOO88O8
And apply 20 times to this new random initial condition, notes that the string grows a lot at every new step:
In[]:=
NestList[nextStep,init,20]//Column
Out[]=
Oo8oOO88O8
8OooO88oooo8oo
oo8OO8ooooOOOOooOO
OOoo88ooOOOO8888OO88
88OOooooOO8888oooooooo88oooo
oooo88OOOO88ooooooooOOOOOOOOooooOOOO
OOOOoooo8888ooooOOOOOOOO88888888OOOO8888
8888OOOOooooooooOOOO88888888oooooooooooooooo8888oooooooo
oooooooo8888OOOOOOOO8888ooooooooooooooooOOOOOOOOOOOOOOOOooooooooOOOOOOOO
OOOOOOOOoooooooo88888888ooooooooOOOOOOOOOOOOOOOO8888888888888888OOOOOOOO88888888
88888888OOOOOOOOooooooooooooooooOOOOOOOO8888888888888888oooooooooooooooooooooooooooooooo88888888oooooooooooooooo
oooooooooooooooo88888888OOOOOOOOOOOOOOOO88888888ooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOoooooooooooooooo8888888888888888ooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888888888888888888888888OOOOOOOOOOOOOOOO8888888888888888
8888888888888888OOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO88888888888888888888888888888888oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo8888888888888888oooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooo8888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8888888888888888ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooo88888888888888888888888888888888ooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8888888888888888888888888888888888888888888888888888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888888888888888888888888
88888888888888888888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8888888888888888888888888888888888888888888888888888888888888888oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo88888888888888888888888888888888oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo88888888888888888888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888888888888888888888888ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo8888888888888888888888888888888888888888888888888888888888888888ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8888888888888888888888888888888888888888888888888888888888888888
8888888888888888888888888888888888888888888888888888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo8888888888888888888888888888888888888888888888888888888888888888oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo8888888888888888888888888888888888888888888888888888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8888888888888888888888888888888888888888888888888888888888888888ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Breakdown the last step (20) and visualize it:
In[]:=
StringSplit[Last[NestList[nextStep,init,20]],""]​​Tally[%]//Column​​WordCloud[%%,IgnoreCaseFalse]
Out[]=
We can use numbers instead of strings, keeping the 4 rules:
Test with just 1 as a initial condition, nesting 20 times...
Trying with a random initial condition with 4 values in a list, from 1 to 4:
We have 24 possible permutation, with four numbers, 1 to 4, and a list size 4:
Plot it graphically padding left with zeros:
View padding right with zeros:
Visualize all the possible permuted initial conditions:
Good, but the real world is not perfect, and it has lost of noise
Lest's add some noise here, at the rules...
Check:
Visualize the permutations using the noise rules...
Now we have more interesting cases such as:
Zoom:
To learn more look for "substitution systems" and L-Systems:
​
https://www.wolframscience.com/nks/p82--substitution-systems/
https://mathworld.wolfram.com/SubstitutionSystem.html
http://www1.biologie.uni-hamburg.de/b-online/e28_3/lsys.html
http://algorithmicbotany.org/papers/l-sys.csiro96.pdf
The Algorithmic Beauty of Plants, by Aristid Lindenmayer and Przemysław Prusinkiewicz