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" (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:
Code: Select all
@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
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.
Code: Select all
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!
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:
Code: Select all
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"]]