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:
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,,,,
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 |
oooooooooooooooo88888888OOOOOOOOOOOOOOOO88888888ooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooOOOOOOOOOOOOOOOO |
OOOOOOOOOOOOOOOOoooooooooooooooo8888888888888888ooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888888888888888888888888OOOOOOOOOOOOOOOO8888888888888888 |
8888888888888888OOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOO88888888888888888888888888888888oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo8888888888888888oooooooooooooooooooooooooooooooo |
oooooooooooooooooooooooooooooooo8888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8888888888888888ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO |
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooo88888888888888888888888888888888ooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8888888888888888888888888888888888888888888888888888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888888888888888888888888 |
88888888888888888888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8888888888888888888888888888888888888888888888888888888888888888oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo88888888888888888888888888888888oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo |
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo88888888888888888888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888888888888888888888888ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO |
OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo8888888888888888888888888888888888888888888888888888888888888888ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8888888888888888888888888888888888888888888888888888888888888888 |
8888888888888888888888888888888888888888888888888888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo8888888888888888888888888888888888888888888888888888888888888888oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo |
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo8888888888888888888888888888888888888888888888888888888888888888OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO8888888888888888888888888888888888888888888888888888888888888888ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO |
Breakdown the last step (20) and visualize it:
In[]:=
StringSplit[Last[NestList[nextStep,init,20]],""]Tally[%]//ColumnWordCloud[%%,IgnoreCaseFalse]
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...
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
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