I've build an exponential loop. That means that N particles will create a loop of size 2^N. Also because of the enormous size each "command" is taking 2^N time per single iteration. So in total in became O(4^N) ticks for replication.
Code: Select all
@RULE ExpLoopParticles
@TABLE
# 0 dead
# 1 Tail
# 2 push constructor particle
# 3 create reflector particle
# 4 construction unit
# 5 reflection unit
# 6 duplication unit
# 7 special event state
# 8 special event state
# 9-11 states for closure
#13 - C2
#14 - A2
#15 - M1
#16 - M2
n_states:17
neighborhood:Moore
symmetries:rotate4reflect
var p={2,3}
var q={14,3}
var a = {0,1,2,3,4,5,6,7,8,9,14}
var b = {a}
var c = {a}
var d = {a}
var e = {a}
var f = {a}
var g = {a}
var h = {a}
var con1 = {0, 1, 4}
var con2 = {0, 1, 4, 5, 6}
var dup = {5,6}
0,0,0,0,0,0,15,14,0,2
0,0,0,0,4,0,15,14,0,2
1,0,0,2,0,15,0,0,0,0
2,0,0,0,4,0,15,1,0,1
1,0,0,2,4,0,15,0,0,0
0,0,0,0,13,0,0,14,0,14
14,0,0,0,13,0,0,1,0,1
0,0,0,0,0,13,0,14,0,14
0,0,0,0,0,0,0,13,14,13
14,0,0,0,0,13,0,1,0,0
13,14,0,0,0,0,0,0,1,0
1,0,0,14,13,0,0,0,0,0
2,1,0,0,0,0,0,0,15,1
1,0,0,0,0,2,0,0,15,0
0,14,0,0,0,1,16,0,0,14
14,1,0,0,0,0,16,0,0,1
0,14,0,0,0,1,0,16,0,14
0,14,0,0,0,1,0,0,16,14
0,0,0,0,0,6,0,2,0,2
0,0,0,1,0,6,0,2,0,2
0,0,0,1,0,0,15,14,0,2
1,0,0,0,16,0,0,0,0,0
0,0,0,0,16,3,0,0,0,3
#special case
1,0,8,0,0,0,0,0,0,8
#send particle 11
6,11,0,0,0,0,0,0,0,5
#particles move
0,p,0,con1,con2,a,b,0,0,p
p,a,b,c,d,e,f,g,h,1
1,a,b,c,d,e,f,g,h,0
#construction push
14,0,0,4,0,1,0,0,0,1
4,2,1,0,0,0,0,0,0,0
0,4,2,0,0,0,0,0,0,13
1,0,0,0,13,0,0,0,0,0
0,0,0,0,13,0,0,2,0,2
0,0,0,0,0,13,0,2,0,2
2,0,0,0,13,0,0,1,0,1
2,0,0,0,0,13,0,1,0,0
1,0,0,2,13,0,0,0,0,0
13,2,0,0,0,0,0,0,1,0
0,0,0,0,0,0,0,13,2,13
0,0,0,0,13,0,0,3,0,3
0,0,0,0,0,13,0,3,0,3
3,0,0,0,13,0,0,1,0,1
0,1,3,13,0,0,0,0,0,15
0,0,0,0,0,0,0,13,3,4
1,0,0,3,13,0,0,0,0,0
3,0,0,0,0,13,0,1,0,0
13,3,0,0,0,0,0,0,1,0
0,0,0,0,15,0,0,2,0,2
0,0,0,0,0,15,0,2,0,14
2,0,0,0,15,0,0,1,0,1
15,0,0,0,0,0,0,0,2,16
0,0,0,0,4,0,16,14,0,14
14,0,0,0,0,16,0,1,0,1
1,0,0,14,16,0,0,0,0,0
1,0,0,14,0,16,0,0,0,0
14,0,0,0,4,0,16,1,0,1
0,0,0,0,0,4,0,14,0,14
0,0,0,1,16,0,0,2,0,2
1,0,0,14,4,0,16,0,0,0
14,0,0,0,0,4,0,1,0,0
4,14,0,0,0,0,0,0,1,0
0,0,0,0,0,0,0,4,14,4
0,0,0,1,0,16,0,2,0,2
2,0,0,0,16,0,0,1,0,1
0,0,0,0,0,0,16,2,0,2
2,0,0,0,0,16,0,1,0,1
1,0,0,2,16,0,0,0,0,0
1,0,0,2,0,16,0,0,0,0
2,0,0,0,0,0,16,1,0,1
0,0,0,0,4,0,0,2,0,2
1,0,0,2,0,0,16,0,0,0
0,0,0,1,0,0,16,2,0,2
0,0,0,1,16,0,0,3,0,3
0,0,0,1,0,16,0,3,0,3
3,0,0,0,16,0,0,1,0,1
1,0,0,3,16,0,0,0,0,0
3,0,0,0,0,16,0,1,0,1
0,0,0,1,0,0,16,3,0,3
0,0,0,1,0,0,16,3,0,3
3,0,0,0,0,16,0,1,0,1
1,0,0,3,16,0,0,0,0,0
16,3,0,0,0,0,0,0,1,15
1,0,0,3,0,15,0,0,0,0
3,0,0,0,0,0,15,1,0,1
0,0,0,1,0,0,0,3,0,3
1,0,0,3,0,0,15,0,0,0
0,0,0,0,0,0,16,14,0,14
0,0,0,0,0,0,0,14,0,14
14,0,0,0,0,0,16,1,0,1
1,0,0,14,0,0,16,0,0,0
14,0,0,0,0,0,0,1,0,1
0,0,0,0,15,0,0,14,0,14
0,0,0,0,0,15,0,14,0,14
14,0,0,0,15,0,0,1,0,1
1,0,0,14,15,0,0,0,0,0
14,0,0,0,0,15,0,1,0,1
0,0,0,0,4,0,15,14,0,14
1,0,0,14,0,15,0,0,0,0
14,0,0,0,4,0,15,1,0,1
0,0,0,0,0,4,0,14,0,14
0,0,0,1,15,0,0,2,0,2
1,0,0,14,4,0,15,0,0,0
0,0,0,1,0,15,0,2,0,2
15,2,0,0,0,0,0,0,1,16
1,0,0,2,15,0,0,0,0,0
2,0,0,0,0,15,0,1,0,1
0,0,0,0,0,0,15,2,0,14
0,0,0,0,0,0,15,14,0,14
15,14,0,0,0,0,0,0,1,15
0,0,0,0,0,0,15,2,0,14
0,0,0,0,4,0,0,14,0,14
14,0,0,0,4,0,0,1,0,1
14,0,0,0,0,0,15,1,0,1
1,0,0,14,0,0,15,0,0,0
0,0,0,1,0,0,15,2,0,14
0,0,0,1,0,0,0,14,0,14
0,0,0,1,15,0,0,14,0,14
0,0,0,1,0,15,0,14,0,14
0,0,0,1,0,0,15,14,0,14
#construction reflect
4,3,1,0,0,0,0,0,0,5
0,4,3,1,0,0,0,0,0,7
#reflect
0,dup,0,p,1,0,a,b,c,p
0,p,dup,0,0,a,b,0,0,p
0,0,0,0,5,0,0,14,0,14
14,0,0,0,5,0,0,1,0,1
0,14,0,5,0,0,0,0,1,2
0,0,0,1,2,0,0,14,0,14
0,0,0,0,5,1,0,14,0,14
14,0,0,0,1,0,0,1,0,1
0,14,0,5,0,1,0,0,1,2
#duplicate
0,0,0,0,0,6,0,14,0,2
0,0,0,1,6,1,0,14,0,14
0,0,0,1,0,6,0,14,0,2
0,14,0,6,0,1,0,0,1,2
0,6,0,q,0,0,0,con1,0,q
0,5,7,0,0,0,0,0,0,8
7,5,1,0,0,0,0,0,0,8
0,8,5,8,0,0,0,0,0,7
8,5,8,7,0,0,0,0,0,0
0,7,8,0,0,0,0,0,0,7
7,7,7,0,0,0,0,0,0,0
7,7,0,7,0,0,5,0,0,0
0,7,7,7,0,0,0,0,0,4
0,0,0,0,6,0,0,14,0,14
0,14,0,6,0,0,0,0,1,2
0,0,0,0,0,6,0,14,0,2
14,0,0,0,6,0,0,1,0,1
#finish loop
0,4,14,0,1,14,0,0,0,8
8,1,14,0,0,0,1,0,0,0
1,0,8,0,0,0,0,0,0,8
0,8,3,0,0,0,0,0,0,9
0,1,3,0,0,9,8,0,0,9
0,9,9,8,0,0,0,0,0,7
0,2,0,0,0,4,14,0,1,8
8,1,2,0,0,0,1,0,0,0
14,8,0,0,0,1,0,0,0,0
#send particle 11
0,9,7,0,0,0,0,0,0,11
0,7,9,0,0,0,0,0,0,8
9,9,8,7,0,0,0,0,0,0
7,9,9,8,0,0,0,0,0,0
8,9,9,7,0,0,0,0,0,11
9,9,7,8,0,0,0,0,0,1
1,11,0,0,0,0,0,0,0,0
0,11,0,0,0,0,0,0,0,11
0,11,0,0,dup,0,0,0,0,11
11,1,0,0,0,0,0,0,0,1
0,11,0,dup,0,0,0,0,0,11
11,1,0,0,dup,0,0,0,0,1
0,11,8,0,0,0,0,0,0,5
8,11,0,0,0,0,0,0,0,0
11,8,0,0,0,0,0,0,0,1
#send particle with 6 back to 5
6,11,1,0,0,0,0,0,0,5
0,6,11,0,0,0,0,0,0,1
0,11,6,0,0,0,0,0,0,11
11,1,0,6,0,0,0,0,0,0
1,11,6,0,0,0,0,0,0,0
1,5,0,11,0,0,0,0,0,0
11,1,5,0,0,0,0,0,0,1
1,11,0,0,5,0,0,0,0,0
0,11,0,0,1,0,0,0,0,11
#particle 11 open gate
5,11,1,0,0,0,0,0,0,6
11,5,0,1,0,0,0,0,0,10
0,10,6,0,0,0,0,0,0,9
0,6,10,0,0,0,0,0,0,12
10,9,12,6,0,1,0,0,0,0
9,12,6,10,0,0,0,0,0,1
12,9,10,6,0,0,0,0,0,1
0,9,12,0,0,0,0,0,0,10
0,12,9,0,0,0,0,0,0,12
0,10,12,0,0,0,0,0,0,11
0,12,10,0,0,0,0,0,0,12
1,10,12,1,6,0,0,0,0,0
1,12,10,1,0,6,0,0,0,0
10,1,1,12,0,0,0,0,0,1
12,1,1,10,0,0,0,0,0,1
1,11,12,1,0,0,0,0,0,0
1,12,11,1,0,0,0,0,0,0
11,1,1,12,0,0,0,0,0,1
12,1,1,11,0,0,0,0,0,1
0,12,11,0,0,0,0,0,0,8
0,11,12,0,0,0,0,0,0,12
0,8,12,0,0,0,0,0,0,4
12,8,1,1,0,0,0,0,0,0
8,12,1,1,0,0,0,0,0,0
1,12,8,1,0,0,0,0,0,0
1,8,12,1,0,0,0,0,0,0
0,2,1,0,6,10,0,0,0,9
6,10,9,0,0,0,0,0,1,5
10,9,0,6,0,1,0,0,0,0
9,10,6,0,0,1,0,0,0,0
0,2,0,0,9,1,2,0,0,2
0,9,12,0,0,0,5,0,0,12
12,12,1,1,0,0,5,0,0,0
12,12,1,1,0,0,0,0,0,0
1,1,12,12,0,0,0,0,6,12
1,1,12,12,0,0,0,6,0,12
6,12,12,0,0,0,0,0,0,5
12,12,6,0,0,0,0,0,0,0
12,12,0,6,0,0,0,0,0,0
0,0,0,0,15,0,0,11,0,11
0,0,0,0,0,15,0,11,0,11
11,0,0,0,15,0,0,1,0,1
11,0,0,0,0,15,0,1,0,1
0,0,0,0,0,0,15,11,0,11
1,0,0,11,15,0,0,0,0,0
1,0,0,11,0,15,0,0,0,0
11,0,0,0,0,0,15,1,0,1
1,0,0,11,0,0,15,0,0,0
This trick can be done with any loop rule. I've modified ParticleLoop rule, mainly because I know it best.
The next challenge would be to introduce this modification into existing rules, add some new states for extra "building" and "calculating" capabilities. Notice that perrier loops, that contains a universal computation is pretty ugly (don't contain the computational information inside the loop itself), because of the limited space caused by the annoying limitation of loops. This approach with cost of 3 extra states allows exponential container inside the loop.
This is by the way the same technology as the quadratic loop, but it modified a little bit to address the n particles as n bits, and only if all the bits are 1's the turn operation is activated. The mutation operation is just a binary adder, that always increase the "flowing" bits by 1. This is why it turns after 2^N - 1 signals (i.e. 4 bits will have 2^4 - 1 = 15 mutation blocks, and 8 bits will have 2^8 - 1 = 255 mutation blocks).