ConwayLife.com - A community for Conway's Game of Life and related cellular automata
Home  •  LifeWiki  •  Forums  •  Download Golly

Geminoid Particles Rule

For discussion of other cellular automata.

Geminoid Particles Rule

Postby simsim314 » April 6th, 2014, 2:34 pm

After I discovered the design of Gemini, I figured out that "self construction" or "self replication" can be achieved with simple "basic" mechanisms, that include only - 1.Reflector 2. Duplicator 3. Gliders 4. Construction Unit that can be pushed-pulled-reflected with gliders 5. Interaction between gliders that can construct all of the above.

First I wanted to find some mathematical "formalization" of this idea, but it turned out to be more complex than it seems. So I settled for simpler goal - to find some extremely "simplistic" rule that will demonstrate the idea in very "clear cut" way.

With few iteration, trying to find the least states, the least rules to demonstrate it, I have build some rule that included around 20 states. It was too much on my opinion, but playing with it helped me eventually to build the "Serizawa Linear Self Constructor" (http://www.conwaylife.com/forums/viewtopic.php?f=11&t=1346)

Now that I'm faced with the challenge of building self destruction circuits in Serizawa Linear Replicator, I wanted to revise this idea, to have less states, and to include a simple self destruct units and rules, so that I can play again with the nuances on less "hard" grournd.

The result is GeminoidParticles rule:

@RULE GeminoidParticles

@TABLE
n_states:9
neighborhood:Moore
symmetries:rotate4reflect

# 0 is ground, nothingness
# 1,tail
# 2, pusher
# 3, puller
# 4, reflect
# 5, destroyable reflector and blocker
# 6, stable reflector and blocker
# 7, dynamic block that pushed-pulled-reflected 
# 8, death helper

var particle = {2,3,4}
var static = {5,6,7}
var ref = {5,6}

var any1 = {0,1,2,3,4,5,6,7}
var any2 = {0,1,2,3,4,5,6,7}
var any3 = {0,1,2,3,4,5,6,7}
var any4 = {0,1,2,3,4,5,6,7}
var any5 = {0,1,2,3,4,5,6,7}
var any6 = {0,1,2,3,4,5,6,7}
var any7 = {0,1,2,3,4,5,6,7}
var any8 = {0,1,2,3,4,5,6,7}

0,particle,0,0,1,0,0,0,0,particle

# reflect
0,ref,0,particle,1,0,0,0,0,particle
0,particle,ref,0,0,0,0,0,0,particle
0,particle,0,ref,0,0,0,0,0,particle

5,particle,1,particle,0,0,0,0,0,0

#dynamic block
0,0,7,0,0,2,0,0,0,2
0,7,0,2,0,0,0,0,0,2
0,7,2,0,0,0,0,0,0,7
7,2,1,0,0,0,0,0,0,0

0,7,0,3,1,0,0,0,0,7
7,7,1,0,0,0,0,0,0,0

4,1,0,0,7,0,0,0,0,4
0,7,0,4,1,0,0,0,0,1

#interactions
0,4,0,4,0,0,0,0,0,5
0,4,0,0,0,0,4,0,0,4
4,4,1,0,0,1,0,0,0,6
0,4,0,0,0,4,0,0,0,7

#death
6,8,0,0,0,0,0,0,0,0
7,8,0,0,0,0,0,0,0,0

8,any1,any2,any3,any4,any5,any6,any7,any8,0
particle,1,0,8,6,0,0,0,0,particle
0,6,0,0,particle,0,0,0,0,8
particle,8,any2,any3,any4,any5,any6,any7,any8,0

5, particle,0,0,0,0,0,0,0,0
7, particle,0,0,0,0,0,0,0,0

0,7,0,0,0,7,0,0,0,8

#move rules

1,any1,any2,any3,any4,any5,any6,any7,any8,0

particle,any1,any2,any3,any4,any5,any6,any7,any8,1
0,particle,0,0,0,0,0,0,0,particle
0,particle,0,0,static,0,0,0,0,particle
0,static,0,0,0,particle,0,0,0,particle

@COLORS
0 0 0 0
1 255 255 255
2 0 95 191
3 255 216 25
4 226 22 56
5 57 229 22
6 255 101 25
8 120 120 120


It has 9 states but actually it's 8 because one state is just a "helper" for some interactions. It's heavily influenced by particles, and ideas that simulate life patterns.

The rules are pretty simple:
0 - death
1 - tail for particles
2-3-4 - Head of particles.
5 - Temporary unit that die after interaction with particle
6 - Stable unit that dies in special cases
7 - Construction unit that can be pushed (by particle 2) pulled (by 3) reflected (by 4).
8 - Helper state.

Particle that collide directly in a unit will die (if it's constriction unit the construction unit will die as well).

Particle that passes at distance of 1 will be duplicated (if it's constriction unit, the particle "function" will be applied).

Particle that passes at distance of 2 will die and kill the unit as well (applied only to stable unit, the Construction unit is killed by direct collision).

Two particles that collide 90 degree Head to Head at same point will create a temporary unit (5).
Two particles that collide 90 degree Head to Tail will create a permanent unit (6).
Two particles that 180 degree Head to Head at same point will create a construction unit (7).

All this is enough to construct a Universal Constructor, and Geminoid with self destructible circuitry.

x = 219, y = 18075, rule = GeminoidParticles
137.E$134.E4$17.G93.G3$117.F5$111.F4.F$106.F2$102.F2$24.F97.G2$98.F
19.F$123.F$28.F$23.F4$27.F4$16.E3.E7.E70.E3.E3.E4.E2.E$5.E$8.E123.E6$
23.E3.E84.E2.E6.E$143.E$10.E129.E3$9.E3$114.E$5.E$8.E129.E3$139.E3$
123.E$143.E$10.E129.E3$9.E4$135.E$138.E3$139.E4$138.E3$137.E$134.E4$
4.E3$5.E133.E$142.E$24.E3.E94.E6$3.E$E$9.E4.E5.E4.E3.E70.E3.E4.E22.E
3$133.E3$24.F3.F5$17.F5.F5.F$12.F$99.F22.G2$25.F$108.F$103.F27$24.B3.
B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B
$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$
24.A3.A8$24.B3.B$24.A3.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A
8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$
28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.
B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$
28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.
A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$
28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$24.
B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B
3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$24.B3.B$24.A3.A8$28.B$
28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$24.D$24.A16$28.D$
28.A8$24.C3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$
28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.
C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$
28.A8$28.C$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C$24.A8$24.C$24.A8$24.D$24.A16$28.D$28.A8$24.C3.C
$24.A3.A8$28.C$28.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.B3.C$24.A3.
A8$24.D$24.A24$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$28.B$28.A8$24.C3.B$24.A3.A
8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.C$
24.A8$24.D$24.A16$28.D$28.A8$24.C3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$
24.D$24.A16$28.D$28.A8$24.B3.C$24.A3.A8$24.D$24.A24$28.D$28.A8$24.B3.
C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C
$24.A3.A8$24.B$24.A8$24.B$24.A8$24.D$24.A17$28.D$28.A8$24.C3.C$24.A3.
A8$24.C$24.A8$24.C$24.A8$24.C$24.A8$24.C$24.A8$24.D$24.A17$28.D$28.A
8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A
8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A
8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A
8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A
8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A
8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A
8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.D$
24.A16$28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.D$24.A17$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$
24.C$24.A8$24.C$24.A8$24.C$24.A8$24.D$24.A16$28.D$28.A8$24.B3.C$24.A
3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A
3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.D$24.A16$
28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C
$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.D$24.A17$28.D$28.A8$24.
B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.D$24.A17$28.D$28.A
8$24.C3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$24.D$
24.A17$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C$24.A8$24.C$24.A8$24.C$24.A8$24.C$24.A8$24.D$24.
A16$28.D$28.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.C$24.A8$24.D$24.A16$28.
D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.D$24.A16$28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.
B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.D$24.A17$28.D$28.A
8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A
8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A
8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A
8$24.C3.B$24.A3.A8$24.C$24.A8$24.C$24.A8$24.C$24.A8$24.D$24.A16$28.D$
28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$
24.D$24.A16$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.D$24.A16$
28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C
$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$24.D
$24.A16$28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A
8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A
8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A
8$24.B3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$24.D$24.A17$28.D$28.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C$24.A8$24.C$24.A8$24.C$24.A8$24.D$24.A16$28.D$28.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.D$24.A16$28.D$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$24.D$24.A16$
28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B
$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.D$24.A16$28.D$28.A8$24.
B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$
24.A8$24.D$24.A16$28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.
C$24.A3.A8$24.B3.C$24.A3.A8$24.D$24.A16$28.D$28.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
28.C$28.A8$28.C$28.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.D$24.A16$
28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C
$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.D$24.A16$28.
D$28.A8$24.C3.C$24.A3.A8$24.C$24.A8$24.C$24.A8$24.D$24.A16$28.D$28.A
8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A
8$24.C3.B$24.A3.A8$24.C$24.A8$24.C$24.A8$24.C$24.A8$24.C$24.A8$24.D$
24.A16$28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$
24.C$24.A8$24.D$24.A16$28.D$28.A8$24.C3.C$24.A3.A8$24.C3.C$24.A3.A8$
24.C3.C$24.A3.A8$24.C3.C$24.A3.A8$24.C3.C$24.A3.A8$24.C3.C$24.A3.A8$
24.C3.C$24.A3.A8$24.C$24.A8$24.C$24.A8$24.C$24.A8$24.D$24.A16$28.D$
28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A
3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A
3.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C$24.A8$24.D$24.A16$28.D$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.
A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$
28.C$28.A8$28.C$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.C$24.A8$24.D$24.A16$28.D$28.A8$
24.C3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.B3.C
$24.A3.A8$24.D$24.A24$28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A5$212.E$209.E2$24.B
3.C$24.A3.A$92.G93.G3$192.F4$24.B3.C$24.A3.A157.F4.F$181.F2$177.F2$
99.F97.G2$173.F19.F$24.B3.C169.F$24.A3.A74.F$98.F4$102.F3$24.B3.C$24.
A3.A62.E3.E7.E70.E3.E3.E4.E2.E$80.E$83.E123.E6$24.B3.C69.E3.E84.E2.E
6.E$24.A3.A189.E$85.E129.E3$84.E3$189.E$24.B3.C51.E$24.A3.A54.E129.E
3$214.E3$198.E$218.E$24.B3.C56.E129.E$24.A3.A2$84.E4$210.E$213.E$24.B
3.C$24.A3.A$214.E4$213.E3$24.B3.C183.E$24.A3.A180.E4$79.E3$80.E133.E$
24.B3.C188.E$24.A3.A70.E3.E94.E6$78.E$75.E$24.B3.C55.E4.E5.E4.E3.E70.
E3.E4.E22.E$24.A3.A2$208.E3$99.F3.F3$24.B3.C$24.A3.A$92.F5.F5.F$87.F$
174.F22.G2$100.F$183.F$178.F$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.
C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C
$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B$24.A8$24.B$24.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.C$24.A8$
24.D$24.A16$28.D$28.A8$24.C3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$24.D$
24.A16$28.D$28.A8$24.B3.C$24.A3.A8$24.D$24.A24$28.D$28.A8$24.C3.B$24.
A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.D$24.A16$
28.D$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$24.
D$24.A16$28.D$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$24.D$
24.A16$28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.D$24.A17$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.D$24.A17$28.D$28.A8$24.C3.C
$24.A3.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$24.D$24.A17$28.
D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$
24.A3.A8$24.D$24.A17$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.
C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.D$24.A
17$28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B
3.C$24.A3.A8$24.B3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$24.D$
24.A16$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C$24.A8$24.C$24.A8$24.C$24.A8$24.D$24.A17$28.D$28.A8$24.B3.C$24.A
3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.D$24.A17$
28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C
$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$28.C
$28.A8$28.C$28.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.D$24.A16$28.D$28.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$
28.C$28.A8$28.C$28.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.D$24.A16$28.D$
28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A
3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$28.C$28.
A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$
24.D$24.A16$28.D$28.A8$24.B3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$24.D$
24.A16$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.C$24.A8$24.C$24.A8$
24.C$24.A8$24.D$24.A16$28.D$28.A8$24.C3.C$24.A3.A8$24.C$24.A8$24.C$
24.A8$24.D$24.A16$28.D$28.A8$24.C3.C$24.A3.A8$24.C$24.A8$24.C$24.A8$
24.C$24.A8$24.C$24.A8$24.D$24.A16$28.D$28.A8$24.B3.C$24.A3.A8$28.C$
28.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$
24.C$24.A8$24.C$24.A8$24.C$24.A8$24.D$24.A16$28.D$28.A8$24.C3.C$24.A
3.A8$24.C$24.A8$24.C$24.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.C$24.A8$24.C$24.A8$
24.C$24.A8$24.C$24.A8$24.C$24.A8$24.D$24.A16$28.D$28.A8$28.C$28.A8$
28.C$28.A8$28.C$28.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C$24.A8$24.C$24.A8$24.C$24.A8$24.D$24.A16$28.D$28.A8$28.C$28.
A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.C3.B$
24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.C$24.A8$24.D
$24.A17$28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A
8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$
24.D$24.A16$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.D$24.A17$28.D$28.A8$24.C3.B$24.A
3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A
3.A8$24.D$24.A17$28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C
$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$28.C$28.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A3.A
8$24.C$24.A8$24.C$24.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$
24.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.
B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B
$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.D$24.A17$
28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.C$24.A8$
24.D$24.A17$28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A
3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A
3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A
3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$28.C$28.A8$
28.C$28.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$
24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C$24.A8$24.C$24.A8$24.D$24.A17$
28.D$28.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C
$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$24.A3.A8$24.B3.C$
24.A3.A8$28.C$28.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.C3.C$24.A3.A
8$28.C$28.A8$28.C$28.A8$24.D$24.A16$28.D$28.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C
3.B$24.A3.A8$24.C3.B$24.A3.A8$24.C3.B$24.A3.A8$24.D$24.A17$28.D$28.A
8$24.C3.C$24.A3.A8$24.C3.C$24.A3.A8$24.C3.C$24.A3.A8$24.C3.C$24.A3.A
8$24.C3.C$24.A3.A8$24.C3.C$24.A3.A8$24.C3.C$24.A3.A8$24.C3.C$24.A3.A
8$24.C3.C$24.A3.A8$24.C3.C$24.A3.A8$24.C3.C$24.A3.A8$24.C3.C$24.A3.A
8$24.C3.C$24.A3.A8$24.C3.C$24.A3.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$
28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.
C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$
28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$28.C$28.
A8$28.C$28.A8$28.C$28.A8$28.C$28.A8$24.B$24.A8$24.B$24.A8$24.B$24.A8$
24.B$24.A8$24.B$24.A8$24.B$24.A8$24.D$24.A!


The design like my Linear Replicator in Serizawa uses 2 opposite, universal constructors for upper and lower streams, and each of them creates a copy of them both, thus using the same particle stream twice, the same basic idea as in Gemini although Gemini has only one universal constructor, and special "reflectors set", for upper and lower stream to "feed" the constructor from both streams. This design allows a "dead space", in which it's possible to place the self destruct circuitry pretty easily.

It's P18092 Geminoid (a bit much for this rule, I think it's possible to reach sub 10K, with stretch maybe even 5K), that uses self destruct circuitry (unlike the original Gemini that uses additional destruction arm). Due to this nuance some will call it "diamonoid" or "orthogonoid", but for me it's the same basic mechanism as Gemini so i call it Geminoid.

Please notice it's not a "blind rule" like Life that you just place some random stuff and see what happens. It's a "design tool" that can be "expressed" and used in golly, in order to simplify the design and make "simple sketches" of much more complex circuitry than in much more "sophisticated" CA like Serizawa and Life.

A way to think about it is like: BASIC vs ASSEMBLY. BASIC is very simple language that doesn't work too well, it's good just for sketching and expressing ideas in easy way. Assembly (or c) is made to do "real work", but having a sketch in BASIC seeing it working out in some "other place" gives some good reference of how the idea works. Although, of-course having it's own limitation (thus it will be very unpractical to simulate dvgrn's Linear Replicator).

It will also be nice to have in the (not near) future, a sort of compiler, to all CAs, that support some sort of "interface". That means having a design in some simplistic simulation CA, hopefully will "translate" although not optimally, but to all "CA" that support the same basic mechanisms. My Serizawa Linear Replicator shows this idea pretty well.

For references: here is the script that I used to create this Geminoid:

import golly as g

class Particle:
   def __init__(self, x, y, dx, dy, gen, particleName):
      self.x = x
      self.y = y
      self.gen = gen
      self.particleName = particleName
      self.dx = dx
      self.dy = dy
    
   def Place(self):
      particle = "A"
      
      if self.dx == 0:
         gld = g.parse(self.particleName + "$A!", 0, 0, 1, 0, 0, self.dy)
      else:
         gld = g.parse("A" + self.particleName + "!", 0, 0, self.dx, 0, 0, 1)
      
      
      g.putcells(gld, self.x, self.y - self.dy)


class Block:
   def __init__(self, particle, dist, isTemp):
      self.x = particle.x + dist * particle.dx
      self.y = particle.y - dist * particle.dy
      self.isTemp = isTemp
   def Place(self):   
      str = "F!"
      
      if self.isTemp:
         str = "E!"
      
      block = g.parse(str, 0, 0, 1, 0, 0, 1)
      g.putcells(block, self.x, self.y)
   
   def Register(self, data):
      str = "F"
      
      if self.isTemp:
         str = "E"
      
      data.append([self.x , self.y, str])
      
   def RegisterSelfDestruct(self, data):
      tempData = []
      self.Register(tempData)
      tempData[0].append(1)
      data.append(tempData[0])
      
class Splitter:
   def __init__(self, particle, dist, isRight, isTemp):
      self.x = particle.x + dist * particle.dx
      self.y = particle.y - dist * particle.dy
      self.IsRight = isRight
      self.isTemp = isTemp
      self.particle = particle
      
      if self.IsRight and self.particle.dx == 0 and self.particle.dy == 1:
         self.ref = Particle(self.x , self.y + 1, 1, 0, particle.gen + dist + 1, particle.particleName)
      if not self.IsRight and self.particle.dx == 0 and self.particle.dy == 1:
         self.ref = Particle(self.x , self.y + 1, -1, 0, particle.gen + dist + 1, particle.particleName)
      
      if self.IsRight and self.particle.dx == 0 and self.particle.dy == -1:
         self.ref = Particle(self.x , self.y - 1, -1, 0, particle.gen + dist + 1, particle.particleName)
      if not self.IsRight and self.particle.dx == 0 and self.particle.dy == -1:
         self.ref = Particle(self.x , self.y - 1, 1, 0, particle.gen + dist + 1, particle.particleName)
      
      if self.IsRight and self.particle.dx == 1 and self.particle.dy == 0:
         self.ref = Particle(self.x - 1, self.y, 0, -1, particle.gen + dist + 1, particle.particleName)
      if not self.IsRight and self.particle.dx == 1 and self.particle.dy == 0:
         self.ref = Particle(self.x - 1, self.y, 0, 1, particle.gen + dist + 1, particle.particleName)
      
      if self.IsRight and self.particle.dx == -1 and self.particle.dy == 0:
         self.ref = Particle(self.x + 1 , self.y, 0, 1, particle.gen + dist + 1, particle.particleName)
      if not self.IsRight and self.particle.dx == -1 and self.particle.dy == 0:
         self.ref = Particle(self.x + 1 , self.y, 0, -1, particle.gen + dist + 1, particle.particleName)
      
      
   def Place(self):
      str = "F!"
      
      if self.isTemp:
         str = "E!"
      
      block = g.parse(str, 0, 0, 1, 0, 0, 1)
      
      if self.IsRight and self.particle.dx == 0 and self.particle.dy == 1:
         g.putcells(block, self.x + 1, self.y)
      if not self.IsRight and self.particle.dx == 0 and self.particle.dy == 1:
         g.putcells(block, self.x - 1, self.y)
      
      if self.IsRight and self.particle.dx == 0 and self.particle.dy == -1:
         g.putcells(block, self.x - 1, self.y)
      if not self.IsRight and self.particle.dx == 0 and self.particle.dy == -1:
         g.putcells(block, self.x + 1, self.y)
      
      if self.IsRight and self.particle.dx == 1 and self.particle.dy == 0:
         g.putcells(block, self.x, self.y + 1)
      if not self.IsRight and self.particle.dx == 1 and self.particle.dy == 0:
         g.putcells(block, self.x, self.y - 1)
      
      if self.IsRight and self.particle.dx == -1 and self.particle.dy == 0:
         g.putcells(block, self.x, self.y - 1)
      if not self.IsRight and self.particle.dx == -1 and self.particle.dy == 0:
         g.putcells(block, self.x, self.y + 1)
         
   def Register(self, data):
      str = "F"
      
      if self.isTemp:
         str = "E"
      
      if self.IsRight and self.particle.dx == 0 and self.particle.dy == 1:
         data.append([self.x + 1 , self.y, str])
      if not self.IsRight and self.particle.dx == 0 and self.particle.dy == 1:
         data.append([self.x - 1 , self.y, str])
      
      if self.IsRight and self.particle.dx == 0 and self.particle.dy == -1:
         data.append([self.x - 1 , self.y, str])
      if not self.IsRight and self.particle.dx == 0 and self.particle.dy == -1:
         data.append([self.x + 1 , self.y, str])
      
      if self.IsRight and self.particle.dx == 1 and self.particle.dy == 0:
         data.append([self.x , self.y + 1, str])
      if not self.IsRight and self.particle.dx == 1 and self.particle.dy == 0:
         data.append([self.x , self.y - 1, str])
      
      if self.IsRight and self.particle.dx == -1 and self.particle.dy == 0:
         data.append([self.x , self.y - 1, str])
      if not self.IsRight and self.particle.dx == -1 and self.particle.dy == 0:
         data.append([self.x , self.y + 1, str])
   
   def RegisterSelfDestruct(self, data):
      tempData = []
      self.Register(tempData)
      tempData[0].append(1)
      data.append(tempData[0])
      
class Mirror:      
   def __init__(self, particle, dist, isRight, isTemp):
         self.splt = Splitter(particle, dist, isRight, isTemp)
         
         if isTemp:
            self.blck = Block(particle, dist + 3, isTemp)
         else:
            self.blck = Block(particle, dist + 5, isTemp)
         self.ref = self.splt.ref
   def Place(self):
      self.splt.Place()
      self.blck.Place()
   def  Register(self, data):
      self.splt.Register(data)
      self.blck.Register(data)
   def RegisterSelfDestruct(self, data):
      self.splt.RegisterSelfDestruct(data)
      self.blck.RegisterSelfDestruct(data)
      
class Construct:
   def __init__(self, particle, dist, isRight):
      self.dist = dist
      self.isRight = isRight
      self.particle = particle
   
   def Place(self):
      data = []
      splt = Splitter(self.particle, self.dist, not self.isRight, True)
      splt.Register(data)
      block = g.parse("G!", 0, 0, 1, 0, 0, 1)
      g.putcells(block, data[0][0], data[0][1])
   
   def Register(self, dataFull):
      data = []
      splt = Splitter(self.particle, self.dist, not self.isRight, True)
      splt.Register(data)
      block = g.parse("G!", 0, 0, 1, 0, 0, 1)
      dataFull.append([data[0][0], data[0][1] - 10, "G"])
   
'''
parts = [("B", "B"), ("B", "B"), ("B", "B"), ("D", "D")]
idx = 0

for pairs in parts:
   
   dy = 0
   if pairs[1] == "D":
      dy = 13
      
   pL = Particle(0,idx * 9,0,1,0,pairs[0])   
   pR = Particle(4,idx * 9 + dy,0,1,0,pairs[1])

   pL.Place()
   pR.Place()
   
   #pL = Particle(0,-70 - idx * 9 - dy,0,-1,0,pairs[0])
   #pR = Particle(4,-70 - idx * 9,0,-1,0,pairs[1])
   
   #pL.Place()
   #pR.Place()
   
'''

def InterpreterData(data, dy, distFull):

   pL = Particle(0,0,0,1,0,"B")
   pR = Particle(4,0,0,1,0,"B")

   dist = distFull

   
   splt = Splitter(pL, 0, True, False)
   splt.Register(data)

   splt = Mirror(splt.ref, dist + 4, True, False)
   splt.Register(data)

   splt = Mirror(pL, 4, False, False)
   splt.Register(data)

   splt = Mirror(splt.ref, 7, True, False)
   splt.Register(data)

   splt = Construct(splt.ref, dy + 40, True)
   splt.Register(data)

   splt = Mirror(pR, 4, True, False)
   splt.Register(data)

   cnst = Construct(splt.ref, 19 + dist, False)
   cnst.Register(data)

   splt = Splitter(splt.ref, dist - 4, True, False)
   splt.Register(data)

   pL = Particle(-1,-30 - dy,0,-1,0,"B")
   pR = Particle(3,-30 - dy,0,-1,0,"B")

   dist -= 4
   splt = Mirror(pL, 0, False, False)
   splt.Register(data)

   cnst = Construct(splt.ref, dist + 28, False)
   cnst.Register(data)

   splt = Splitter(splt.ref, dist + 8, False, False)
   splt.Register(data)

   splt = Mirror(pR, 0 + 4, False, False)
   splt.Register(data)

   pL = splt.ref

   splt = Splitter(splt.ref, dist, False, False)
   splt.Register(data)

   splt = Mirror(pL, dist + 20, False, False)
   splt.Register(data)

   splt = Mirror(splt.ref, 8, False, False)
   splt.Register(data)


   splt = Mirror(splt.ref, 6, True, False)
   splt.Register(data)

   cnst = Construct(splt.ref, 9, True)
   cnst.Register(data)

def PlaceData(data, dx, dy):
   for d in data:
      delta = 0
      
      if d[2] == "G":
         delta += 10
         
      block = g.parse(d[2] + "!", 0, 0, 1, 0, 0, 1)
      g.putcells(block, dx + d[0], dy + d[1] + delta)
   
class CommandPlacer:
   def __init__(self):
      self.loc = 30
      self.cellLoc = [0, 0]
      
   def Goto(self, x, y):
      
      commands = []
      
      while (self.cellLoc[0] != y or self.cellLoc[1] != x):
         
         #g.getstring(str(commands))
            
         strX = self.StrByD(y, self.cellLoc[0])
         self.cellLoc[0] = self.DeltaByD(y, self.cellLoc[0])
         
         strY = self.StrByD(x, self.cellLoc[1])
         self.cellLoc[1] = self.DeltaByD(x, self.cellLoc[1])
         
         commands.append([strX, strY])
         
      self.PlaceCommands(commands)
      
   def StrByD(self, val, cellVal):
      if cellVal < val:
         return "B"
      if cellVal > val:
         return "C"
      
      return ""
   
   def DeltaByD(self, val, cellVal):
      if cellVal < val:
         return cellVal + 1
      if cellVal > val:
         return cellVal - 1
      
      return cellVal
   
   
   def Set0(self, x0, y0):
      self.Goto(x0, y0)
      self.cellLoc = [0, 0]
      
      
   def PlaceCommands(self, commands):
      
      for command in commands:
         if command[0] == "" or command[0] == "B" or command[0] == "C" or command[0] == "D" :
            if command[0] != "":
               pL = Particle(0,self.loc,0,1,0,command[0])   
               pL.Place()
               
            if command[1] == "B" or command[1] == "C" or command[1] == "D":
               pR = Particle(4,self.loc,0,1,0,command[1] )   
               pR.Place()
            
            self.loc += 9
            
         if command[0] == "E":
            pL = Particle(0,self.loc,0,1,0,"D")   
            pL.Place()
            self.loc += 17
            pL = Particle(4,self.loc,0,1,0,"D")   
            pL.Place()
            self.loc += 9
         
         if command[0] == "F":
            pL = Particle(0,self.loc,0,1,0,"D")   
            pL.Place()
            self.loc += 18
            pL = Particle(4,self.loc,0,1,0,"D")   
            pL.Place()
            self.loc += 9
         
         if command[0] == "G":
            self.Goto(self.cellLoc[1] + 4, self.cellLoc[0] - 6)
            self.PlaceCommands(["E"])
            self.Goto(self.cellLoc[1] - 3, self.cellLoc[0] - 1)
            self.PlaceCommands(["E"])
            self.Goto(self.cellLoc[1] - 1, self.cellLoc[0] + 1)
            pL = Particle(0,self.loc,0,1,0,"D")   
            pL.Place()
            self.loc += 25
            pL = Particle(4,self.loc,0,1,0,"D")   
            pL.Place()
            self.loc += 9
            
   def PlaceData(self, data):
      
      maxXY = -100000
      minXY = 100000
      
      for d in data:
         if maxXY < d[0] - d[1]:
            maxXY = d[0] - d[1]
            
         if minXY > d[0] - d[1]:
            minXY = d[0] - d[1]
      
      dXY = []

      for i in xrange(minXY, maxXY + 1):
         l = []
         
         for d in data:
            if i == d[0] - d[1]:
               l.append(d)
         
         dXY.append(l)
      
      g.show(str(dXY))
      
      for i in reversed(dXY):
         for d in i:
            
            d0 = 0
            
            if d[2] == "F":
               d0 = -1
            
            #g.getstring(str(d))
            
            self.Goto(d[0], -d[1] - d0)
            self.PlaceCommands([d[2]])
            
   
   
def AddSelfDestruct(data, y, dirY):
   minX = 1000000000
   maxX = -1
   
   dir = -1
   
   for d in data:
      if len(d) < 4:
         d.append(0)
      
      if (d[1] - y) * dirY > 0:      
         if minX > d[0] - 10:
             minX = d[0] - 10
         
         if maxX < d[0] + 10:
             maxX = d[0] + 10
      
   l = []
   
   for i in xrange(minX, maxX):
      l.append([0])

   particle = Particle(maxX + 6, y + (-dirY - 1), dir, 0, 0, "D")
   #particle.Place()
   
   g.show(str(data))
   
   changed = True
   while changed:
      changed = False
      
      for i in xrange(minX, maxX):
         l[i - minX] = [False, 1000 * dirY, i, []]
         
      for d in data:
         if d[3] == 0 and (d[1] - y) * dirY > 0:
            x = d[0]
            changed = True
            
            for i in xrange(x - 3, x + 4):
               if d[2] != "G":
                  if (l[i - minX][1] - d[1]) * dirY > 0:# or (l[i - minX][1] == d[1] and abs(i - dir - x) == 2):
                     l[i - minX][1] = d[1]
                     l[i - minX][0] = abs(i - dir - x) == 2
                     l[i - minX][2] = d[0]
                     l[i - minX][3] = d
                  
               else:
                  if (l[i - minX][1] - d[1] - 10) * dirY > 0:
                     l[i - minX][1] = d[1] + 10
                     l[i - minX][0] = abs(i - dir - x) == 0
                     l[i - minX][2] = d[0]
                     l[i - minX][3] = d
      
      
      appended = False
      lasti = -1
      
      for i in xrange(minX, maxX):
         
         idx = i
         
         if dir == -1:
            idx = (maxX - i) + minX - 1
         
         
         if l[idx - minX][0] and l[idx - minX][3][3] == 0 and i >= lasti:
            
            data.append([idx, y - 1, "E", 1])
            lasti = i + 3
            l[idx - minX][3][3] = 1
            appended = True
      
      if changed:
         mir = Mirror(particle, maxX - minX + 5, (dir == 1) ^  (dirY == 1), True)
         mir.RegisterSelfDestruct(data)
         
         particle = mir.ref
         
         mir = Mirror(particle,9, (dir == 1) ^  (dirY == 1), True)
         mir.RegisterSelfDestruct(data)
         
         particle = mir.ref
         #changed = True
      else:
         mir = Block(particle,4, True)
         mir.RegisterSelfDestruct(data)
         #changed = False
         
      dir = -dir
      y -= 8 * dirY


data = []
dist = 75
dy = 60
stepY = -50
InterpreterData(data, dy, dist)
AddSelfDestruct(data, -14, 1)
AddSelfDestruct(data, -76, -1)

particle = Particle(50, -dy - 48, 1, 0, 0, "D")
mir = Mirror(particle, 60, True, True)
mir.Register(data)
particle = mir.ref
mir = Splitter(particle, 33, True, True)
mir.Register(data)
mir = Mirror(particle, 93, True, True)
mir.Register(data)

PlaceData(data, 0, 0)
placer = CommandPlacer()
placer.Set0(dist - 24,stepY + dy)
placer.PlaceData(data)
placer.Set0(24 - dist,-stepY - dy)
placer.Goto(0,6)
placer.PlaceCommands([["D",""]])

PlaceData(data, dist, int((placer.loc + 30)/2))

#data = [[13, -20, "F"], [13, -30, "F"],[13, -25, "F"] ,[16, -20, "F"], [16, -30, "F"],[16, -25, "F"],[19, -20, "F"], [19, -30, "F"],[19, -25, "F"]]
#data = [[19, -20, "E"]]
User avatar
simsim314
 
Posts: 1677
Joined: February 10th, 2014, 1:27 pm

Re: Geminoid Particles Rule

Postby dvgrn » April 6th, 2014, 6:37 pm

simsim314 wrote:All this is enough to construct a Universal Constructor, and Geminoid with self destructible circuitry.

x = 219, y = 18075, rule = GeminoidParticles...

It's P18092 Geminoid (a bit much for this rule, I think it's possible to reach sub 10K, with stretch maybe even 5K), that uses self destruct circuitry (unlike the original Gemini that uses additional destruction arm). Due to this nuance some will call it "diamonoid" or "orthogonoid", but for me it's the same basic mechanism as Gemini so i call it Geminoid.

Wow -- very impressive! And the height of the pattern very nearly matches the Geminoid's period, because the data is stored in orthogonal lightspeed signals.

There are some fairly simple optimizations that should easily get you down below 10K. The first is to change the build order so that construction isn't jumping back and forth between the two constructors for that really inefficient section in the middle -- and then, a little more subtly, build objects in series working backwards and forwards (like a bidirectional print head except diagonally) to save INCs and DECs on the construction arms.

I had a lot of trouble explaining to my singularly stupid and literal-minded computer how to do this optimally for an arbitrary set of objects. So for the Blockic loafer seed I just wrote a script to help me define a near-optimal build order manually... and for the linear Life replicator I also picked objects to add to the construction recipe one at a time. It would certainly be nice to get past that stage! It shouldn't be too difficult to come up with an algorithm that will pick a build order that gives a shorter total recipe than the build order I chose manually.

Unfortunately it's a much tougher problem in general to find the build order that will produce the absolute shortest recipe. GeminoidParticles is straightforward enough that it might actually be possible to prove optimality for a particular build order, since you only have to build single-cell objects, and the INCn and DECn recipes' lengths are simple multiples of n. But for the Life replicator and other B3/S23 Geminoid-type projects, figuring out the best order is definitely an NP-hard problem, or more accurately NP-painful and NP-headache-inducing...!

After the build order, well... it looks as if the self-destruct circuits could probably be tightened up a bit, enough to get the rest of the way to 10K, and possibly even to 5K. But after that, you've designed a very nice clean rule here -- it's hard to see how else to improve the system, unless possibly there's some clever trick to reduce the number of states.

P.S. I doubt "Demonoid" or "Orthogonoid" would ever catch on as useful terminology, but anyway they'd only apply to Geminoids whose two ends were exact mirror images of each other. In that situation you only need one constructor arm at each end, rather than two separate pieces of circuitry one of which is never used... but that constrains the direction of travel to an exact diagonal (when the signals are diagonal) or an exact cardinal direction (when signals are orthogonal, as they are in GeminoidParticles.) Anyway, this new pattern of yours is definitely a classic Geminoid.
User avatar
dvgrn
Moderator
 
Posts: 5555
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: Geminoid Particles Rule

Postby simsim314 » April 7th, 2014, 3:20 am

the height of the pattern very nearly matches the Geminoid's period


Well what you see initially it's what comes out of the script. The actual Geminoid is twice shorter than it's period, because it has a stream up and down at the same time making it twice shorter (just let it run for a while, and then see it's size).

It shouldn't be too difficult to come up with an algorithm that will pick a build order


Well this is common issue to all Geminoids and to all Universal Constructor based models. In previous iteration playing with similar rule, I made a greedy algorithm that was peeking the closest "block" from those that are allowed to build next. It was much better than any other "stupid" algorithm.

I think this is another good exercise that comes from such "simulation" or "approximation" rules. One can play pretty easily with it, to make "general" algorithms, and find solution to "larger" problems, that rise in "all" or almost all such constructions optimization problems. The building order is definitely one of those problems, I think I will spend some time at this point to have some "optimization" for "abstarct" UCs.

It's NP hard problem in any rule, it's travelling salesman just with restrictions. Think of N cities as N blocks to construct, and no block "shadows" any other block, It's the usual traveling salesman only with "Max (DX,DY)" norm, instead of the usual distance. But NP hard doesn't mean it can't be optimized to be 5-10% from the optimal. Anyway I'm hoping to create an algorithm that will work to all "two arm" constructions (eventually I hope to build Geminoid of this kind in Life as well). I guess with your salvo approach it's similar but has it's own nuances.

it's hard to see how else to improve the system


Talking about improving the system, there could be many approaches, and "optimization goals". First of all the problem with mathematical formulation of Geminoid, is that each rule has it's own nuances, that influence very drastically on the design of the Geminoid. So the hope for kinda "universal geminoid" that will work for "all rules" with UCs is a ghost. For example this rule has reflected particle at distance "1" from the reflected block, thus making two mirrors with same reflected particle path impossible, or complex to construct and not worth it, so the original Gemini design, that has the same "construction unit" for up and down stream, is not applicable here. On the other hand here the construction unit is straight forward from the input gliders, in Gemini there is "interpretation unit", which is pretty heavy, so there it worth it to use the same interpretation unit for both streams direction.

The destruction issue is making the things even more "Rule Oriented". For example in this rule I could build a destruction unit below the construction arm, due to some small nuances in the rule. Tweaking it back and forth could make the placing of the destruction units on the "construction path" impossible, this will require the destruction unit to be "outside" of the Geminoid, thus making it even "fatter" than it's already is, not talking about making life harder with more complex scripts, or even "hand wiring".

Also it might be profitable to add some additional "reflection" particle, to be able to construct even more stable units, that could have some additional "nice" properties, thus in cost of 2-3 additional states reduce the eventual Geminoid to less than 1K or less.

I also think of a rule that could simulate a slow salvo, having many states but be helpful in building Life objects.

All this area is pretty tricky and "rule oriented", and "goal oriented" but still having experience in some rule can give a lot of advantage and help to grasp UCs and Geminoids in other rules. UCs and Geminoids have a lot of common properties, timing issues and synchronization issues, are kinda similar, not talking about construction order and destruction mechanism that have their nuances but in general have many major similarities.

Also this particular Geminoid was mainly build to demonstrate the rule capabilities. It's definitely wasn't optimized properly. I mainly wanted to play with destruction circuitry for the Serizawa Geminoid, and it's fun rule on it's own. But yes except what you said, one of the things I have discovered that the "width" of the Geminoid is very influential, so to optimize, one should think "thin and tall", and not wide.

Also I noticed it's possible to make it diagonal Geminoid pretty easily, that means that "orthogonal" geminoid in Life should be possible. The only direction Geminoid is "tricky" in Life is diagonal, or in this rule orthogonal, which can be achieved with some tricks using "blockics". I think it would be a nice challenge to make the Geminoid move in "any" direction".

Also the next challenge in this rule is authentic quadratic replicator. I guess once a design of replicator is out in any rule with UC, it would be simple to build a similar design in any other rules with UC.
User avatar
simsim314
 
Posts: 1677
Joined: February 10th, 2014, 1:27 pm

Re: Geminoid Particles Rule

Postby twinb7 » April 7th, 2014, 11:30 am

Adoration! Good work! :o I know that having made a self-replicator there's little reason to make anything, but I still think I want to make some computers with it.
twinb7
 
Posts: 175
Joined: February 11th, 2014, 8:08 pm
Location: Ames, Iowa

Re: Geminoid Particles Rule

Postby simsim314 » April 7th, 2014, 1:18 pm

@twinb7 Thx, I guess you can use it as universal computer as well (actually i was experimenting a little bit with logic gates), but it's not optimized for this purpose. I think the WireWorld rule is much more suited for computers. In golly there is a primer with nice display, based on WireWorld, for a computer its as good as it gets. There are also loop rules with universal computation and construction.

I think it would be cool to have a rule with some "proto-c" language compiler. i.e. you write code in some "high level language" and it compiles it into automaton state. It would be cool also eventually to have such compiler spread out into "all languages with universal computation", including Life and GeminoidParticle as well. But for computers I would definitely start from WireWorld and get my way up from there.

It's also interesting to combine the two - universal computation and construction. I think it would be nice to have some optimized rule that have them both. Kinda GeminoidParticles with WireWorld interacting with each other. Also probably few more states in GeminoidParticles could optimize it for computations as well.

Another thought: as my rule was inspired by Gemini it would be cool to have some rule inspired by Pi calculator, I actually never got the concept of that construction so well, so having some "simplified" rule that will demonstrate a Pi calculator would be very nice.
User avatar
simsim314
 
Posts: 1677
Joined: February 10th, 2014, 1:27 pm


Return to Other Cellular Automata

Who is online

Users browsing this forum: No registered users and 3 guests