Guns with bounding box O(log(period))

For scripts to aid with computation or simulation in cellular automata.
Post Reply
chris_c
Posts: 966
Joined: June 28th, 2014, 7:15 am

Guns with bounding box O(log(period))

Post by chris_c » December 21st, 2017, 5:51 pm

I know this has been done before but for some reason I decided to make a script that uses more modern technology. I think the result is simpler and more fun to watch.

The script works by making guns of period 616 * N + 1087 + k where N is any positive integer and k satisfies 0 <= k < 616. The produced gun features a small, fast and easily restartable gun of period 616. The integer N represents the number of gliders from the p616 that are killed by the chain of semi-snarks and 1087 + k represents the time between the last glider from one instance of the p616 to the first glider from the next instance.

N is encoded by throwing away its most significant bit and using the other bits to choose whether we add an edge-shooter to each of the Herschels in the lower path.

k is adjusted by using a Snark and one of the following color-changing reflectors. If the timing is out by 4 mod 8 then there is also the option of swapping the order of the Snark and the reflector.

Code: Select all

x = 320, y = 67, rule = LifeHistory
196.D3.D.5D3.D3.5D4.D3.3D$196.2D2.D.D6.2D5.D5.2D2.D3.D$196.D.D.D.D7.D
5.D4.D.D2.D3.D$196.D2.2D.3D5.D5.D3.D2.D3.4D$196.D3.D.D7.D5.D3.5D5.D$
196.D3.D.D7.D5.D6.D6.D$196.D3.D.5D2.3D4.D6.D3.3D$35.D3.D.5D2.3D2.5D2.
3D4.D$35.2D2.D.D5.D3.D3.D3.D3.D2.2D44.D3.D.5D3.D3.5D2.3D3.3D$35.D.D.D
.D5.D3.D3.D7.D3.D44.2D2.D.D6.2D5.D3.D3.D.D3.D$35.D2.2D.3D4.4D3.D5.2D
4.D44.D.D.D.D7.D5.D7.D5.D81.4B$35.D3.D.D9.D3.D7.D3.D44.D2.2D.3D5.D5.D
6.D5.D81.4B$35.D3.D.D9.D3.D3.D3.D3.D44.D3.D.D7.D5.D5.D5.D81.4B$35.D3.
D.5D2.3D4.D4.3D3.3D43.D3.D.D7.D5.D4.D5.D81.4B56.D3.D.5D.5D.5D10.D$
112.D3.D.5D2.3D4.D3.5D.5D77.4B57.2D2.D.D5.D7.D11.2D$223.4B58.D.D.D.D
5.D7.D10.D.D$222.4B59.D2.2D.3D4.3D4.D3.5D.D2.D$145.B75.4B60.D3.D.D9.D
3.D9.5D$144.2B66.2A7.3B61.D3.D.D5.D3.D3.D12.D$143.3B55.A11.A6.4B.B59.
D3.D.5D2.3D4.D12.D$B48.A92.4B55.3A9.A.AB3.8B$2B47.3A14.4B71.4B59.A9.
2AB.10B$3B49.A12.4B71.4B13.B45.2A11.12B$4B47.2A11.4B12.B43.2A13.4B14.
2B44.4B2.3B4.13B$.4B46.5B7.4B13.2B43.A12.4B15.3B45.10B.13B$2.4B47.4B
5.4B14.3B41.A12.4B16.4B42.28B$3.4B45.5B4.4B15.4B40.2A2.2A6.4B18.4B41.
28B$4.4B43.6B3.4B17.4B42.A.A5.4B20.4B39.29B$5.4B42.12B19.4B36.4A.A6.
4B22.4B37.28B.B2A$6.4B34.A6.11B21.4B35.A2.A.2A4.4B24.4B36.28B.BA.A17.
B62.4B$7.4B33.3A4.10B23.4B37.5B2.4B26.4B36.26B5.A17.2B60.4B$8.4B23.A
11.A2.10B.B23.4B37.9B28.4B35.16B.6B8.2A16.3B58.4B$9.4B22.3A8.2A3.8B.
2BA23.4B36.8B30.4B31.14B.B5.B2.B27.4B56.4B$10.4B24.A7.15BA.A23.4B34.
8B32.4B22.2A6.15B8.3B27.4B54.4B$11.4B10.A11.2A3.B5.12B.BA25.4B22.2A9.
7B34.4B22.A5.15B8.B2AB28.4B52.4B$12.4B7.3A11.8B2.13B29.4B22.A10.6B4.
2A29.4B21.A.AB2.15B9.2A30.4B50.4B$13.4B5.A16.20B31.4B21.A.AB7.6B4.A
31.4B10.A10.2AB.15B43.4B48.4B$14.4B4.2A15.20B32.4B10.A10.2AB.3B3.6B.B
A.A32.4B7.3A12.20B41.4B35.A10.4B$7.2A6.9B14.19B.B2A31.4B7.3A12.14B.B
2A34.4B5.A15.20B42.4B34.3A7.4B$8.A7.6B14.21B.BA.A31.4B5.A15.16B37.4B
4.2A15.20B42.4B36.A5.4B$8.A.2A5.6B3.B2.2B2.24B4.A32.4B4.2A15.14B31.2A
6.9B14.22B42.4B22.2A10.2A4.4B$9.A2.A4.19BD14B4.4B2.2A24.2A6.9B14.16B
31.A7.6B14.24B43.4B22.A10.9B$10.2AB3.20BDBD4B.6B7.2A29.A7.6B14.18B31.
A.2A5.6B3.B2.2B2.26B45.4B21.A.AB9.6B3.2A$11.14B2A9B3D4B2.B.5B5.A30.A.
2A5.6B3.B2.2B2.20B33.A2.A4.19BD13B.10B44.4B10.A10.2AB.3B4.6B4.A$12.
13B2A11BD4B7.2A6.3A28.A2.A4.19BD16B34.2AB3.20BDBD4B.7B2.2B4.2A45.4B7.
3A12.7B.7B.BA.A$13.29B8.A9.A29.2AB3.20BDBD4B.9B35.14B2A9B3D4B2.3B.B4.
B4.A47.4B5.A15.15B.B2A$13.17B.4B16.3A37.14B2A9B3D4B2.7B37.13B2A11BD4B
4.2B2A3.2A4.3A45.4B4.2A15.16B$14.15B.6B17.A38.13B2A11BD4B2.7B38.29B4.
BA2.A4.A6.A38.2A6.9B14.18B$14.19B.A2B.2A53.29B4.6B38.17B.4B12.3A4.A
47.A7.6B14.19B$15.17B.A.A2B.A53.17B.4B10.7B39.15B.6B18.2A46.A.2A5.6B
3.B2.2B2.20B.B2A$17.14B.A.AB2.A55.15B.6B10.6B39.19B.A2B.2A7.2A.A52.A
2.A4.19BD13B4.BA.A$16.8B4.2A.A.A3.A56.19B.A2B.2A6.7B39.17B.A.A2B.A7.A
.2A53.2AB3.20BDBD4B.7B6.A$16.6B6.2ABA2.4A.A55.17B.A.A2B.A7.5B42.14B.A
.AB2.A66.14B2A9B3D4B2.B.2B.B2A4.2A$16.5B8.B2.A.A3.A.A56.14B.A.AB2.A8.
5B41.8B4.2A.A.A3.A68.13B2A11BD4B7.BA.A$16.B.B9.2A.2A2.A2.A.A55.8B4.2A
.A.A3.A7.7B41.6B6.2ABA2.4A.A67.29B11.A$17.3B9.A.A2.2A3.A56.6B6.2ABA2.
4A.A5.2A.3B42.5B8.B2.A.A3.A.A66.17B.4B18.2A$16.B2AB9.A.A64.5B8.B2.A.A
3.A.A5.A46.B.B9.2A.2A2.A2.A.A67.15B.6B$17.2A11.A65.B.B9.2A.2A2.A2.A.A
2.3A48.3B9.A.A2.2A3.A68.19B.A2B.2A$97.3B9.A.A2.2A3.A3.A49.B2AB9.A.A
77.17B.A.A2B.A$96.B2AB9.A.A62.2A11.A80.14B.A.AB2.A$97.2A11.A156.8B4.
2A.A.A3.A$267.6B6.2ABA2.4A.A$267.5B8.B2.A.A3.A.A$267.B.B9.2A.2A2.A2.A
.A$268.3B9.A.A2.2A3.A$267.B2AB9.A.A$268.2A11.A!
The timing of the destruction of the glider in the p616 gun works the same no matter how many semi-snarks are in the chain because the time taken to travel between two of the semi-snarks in the top row plus the time taken to travel between two syringes in the bottom row is equal to 616. This fact also implies that there are no collisions between gliders that come directly from the p616 and gliders that come from one of the edge-shooters: gliders from the edge-shooters are always 103 ticks modulo 616 behind the gliders from the p616.

Here is the script:

Code: Select all

import golly as g

base = g.parse("3bo$3b3o$6bo$5b2o6bo$12bobo$13bo3$2o$2o6b2o$8b2o2$17b2o$17b2o2$2b2o$bobo$bo$2o17$38bo$38b3o$41bo$40b2o7$50b2o$43b2o5bobo$43b2o7bo$52b2o2$39bo$38bobob2o$38bobobobo$35b2obobobobo2bo$35bo2bo2b2ob4o$37b2o4bo$43bobo$44b2o10$65b2o$65b2o$56b2o$56bo2bo$52b2o4b2o$53bo20b2o$53bobo18bo$43bo10b2o16bobo$41b3o28b2o$40bo$40b2o$25b2o$26bo$26bob2o$27bo2bo$28b2o$43b2o$43b2o2$66b2o$66b2o2b2o$52bo3b2o12bobo$51bobo3bo14bo$50bobo3bo15b2o$46b2obobo3bo$46b2obo2b4obo$50bobo3bobo$46b2ob2o2bo2bobo$47bobo2b2o3bo$35b2o10bobo$35b2o11bo!")

h_to_g = [g.parse("7b2o$7b2o9$22b2o$22b2o10$2b2o$3bo$3o$o!", 55, 29),
          g.parse("b2o$o2bo$b2o!", 61, 39)]

right_side = g.parse("13b2o11bo$13b2o10bobo$25bobo2b2o3bo$24b2ob2o2bo2bobo$28bobo3bobo$24b2obo2b4obo$24b2obobo3bo$28bobo3bo$29bobo3bo$30bo3b2o47b2o$49bo33b2o$47b3o13bo$46bo16b3o$21b2o23b2o18bo$21b2o42b2o$6b2o94b2o$5bo2bo92bobo$4bob2o87b2o4bo$4bo88bo2bo2b2ob4o$3b2o88b2obobobobo2bo$18b2o76bobobobo$18bo36b2o39bobob2o$19b3o33b2o40bo$21bo10b2o$31bobo59b2o15b2o$31bo61b2o6b2o7bo$30b2o10b2o57b2o5bobo$43bo64b2o$40b3o9b2o$40bo11bo19b2o$23b2o25bobo18bobo$23bo19b2o5b2o19bo$21bobo18bobo25b2o$21b2o19bo11bo$41b2o9b3o43b2o$51bo47bo$51b2o10b2o31b3o$2o61bo32bo$2o59bobo$61b2o10bo$38b2o33b3o$38b2o36bo$75b2o$90b2o$90bo$87b2obo$86bo2bo$87b2o$28b2o42b2o$28bo18b2o23b2o$29b3o16bo$12b2o17bo13b3o$12bo32bo$13b3o43b2o3bo$15bo43bo3bobo$60bo3bobo$61bo3bobob2o$59bob4o2bob2o$58bobo3bobo$58bobo2bo2b2ob2o$59bo3b2o2bobo$67bobo10b2o50b3o$68bo11b2o50bo$133bo23$130b2o$130bo$132bo$112b2o14b5o$113bo13bo$113bobo12b3o$114b2o15bo$128b4o$123b2o3bo3b2o$123b2o4b3o2bo$131bob2o$131bo$130b2o3$122b2o$122bo$123b3o$125bo23$61b2o7b2o$61b2o7b2o4$96bo$56b2o37bobo$57bo37bobo$57bobo34b2ob2o$47bo10b2o33bo2bo2bo$45b3o44bobobobobo$44bo48bobobobo$44b2o49bobo$29b2o64bo2bo$30bo65b2o$30bob2o$31bo2bo$32b2o61b2o$47b2o46b2o$47b2o2$70b2o$70b2o2b2o$56bo3b2o12bobo$55bobo3bo14bo$54bobo3bo15b2o$50b2obobo3bo$50b2obo2b4obo$54bobo3bobo$50b2ob2o2bo2bobo$51bobo2b2o3bo$39b2o10bobo$39b2o11bo!", 73, -44)

left_side = g.parse("12b2o$12bo$7b2o5bo$7bo5b2o$4b2obo$4bo2bob2o2b2o$6b2obo3b2o$9bo$9b2o2$3b2o$3bo$2obo$o2b3o4b2o$b2o3bo3b2o$3b4o$3bo15b2o$4b3o12bobo$7bo13bo$2b5o14b2o$2bo$4bo$3b2o!", 39, 18)

# cells, delay, in_lane, out_lane
reflectors = [
    (g.parse("48b2o$37bo11bo$37b3o9bobo$40bo9b2o$39b2o6$67b2o$67bobo$69bo$69b2o2$27b2o$28bo29b2o$28bobo27b2o$18bo10b2o$16b3o$15bo$15b2o$2o$bo$bob2o$2bo2bo$3b2o47b2o$18b2o32bo$18b2o22b2o3b2o4b3o$40bo2bo4bo6bo$40b3o4bo$47b2o$27bo3b2o7b2obo$26bobo3bo7bob2o$25bobo3bo$21b2obobo3bo$21b2obo2b4obo$25bobo3bobo$21b2ob2o2bo2bobo$22bobo2b2o3bo$10b2o10bobo$10b2o11bo!"), 72, -12, 58),
    (g.parse("37b2o$38bo$37bo$37b2o2b2o$40bobo$35b4obo$35bo2bob2o5$27b2o$28bo20b2o$28bobo18bo$18bo10b2o16bobo$16b3o28b2o$15bo$15b2o$2o$bo$bob2o$2bo2bo$3b2o$18b2o$18b2o4$27bo3b2o$26bobo3bo$25bobo3bo$21b2obobo3bo$21b2obo2b4obo5b2o$25bobo3bobo5bo$21b2ob2o2bo2bobo2b3o$22bobo2b2o3bo3bo$10b2o10bobo$10b2o11bo!"), 45, -8, 54),
    (g.parse("42bo$42b3o$45bo$44b2o6$37bo$37b3o$28bo11bo$28b3o8b2o14bo$31bo22bobo$18bo11b2o23bo$16b3o$15bo$15b2o$2o50b2o$bo50bobo$bob2o49bo$2bo2bo48b2o$3b2o45b2o$18b2o30bo$18b2o23b2o6b3o$43bo9bo$44b3o$46bo$27bo3b2o$26bobo3bo$25bobo3bo$21b2obobo3bo$21b2obo2b4obo$25bobo3bobo$21b2ob2o2bo2bobo$22bobo2b2o3bo$10b2o10bobo$10b2o11bo!"), 54, -8, 62),
    (g.parse("37bo$37b3o$40bo$27b2o10b2o$28bo$28bobo19b2o$18bo10b2o19bo$16b3o29bobo$15bo32b2o$15b2o$2o$bo$bob2o43b2o$2bo2bo42bobo$3b2o45bo$18b2o24b2o4b2o$18b2o24bobo$46bo$46b2o2$27bo3b2o$26bobo3bo$25bobo3bo$21b2obobo3bo$21b2obo2b4obo$25bobo3bobo$21b2ob2o2bo2bobo$22bobo2b2o3bo$10b2o10bobo$10b2o11bo!"), 19, 0, 50)
]

snark = (g.parse("15bo$13b3o$12bo$12b2o7$2b2o$bobo5b2o$bo7b2o$2o2$14bo$10b2obobo$9bobobobo$6bo2bobobobob2o$6b4ob2o2bo2bo$10bo4b2o$8bobo$8b2o!"), 4, 3, 24)

period = int(g.getstring("Enter period:"))
N = (period - 1087) // 616
delay = period - 616 * N

if N > 0:
    g.show("Gun of period %d = %d * 616 + %d" % (period, N, delay))
else:
    g.warn("Period too small")
    g.exit()

hgs = 0

g.new('')

g.putcells(right_side)

while N > 1:
    g.putcells(base, -59 * hgs, 0)
    g.putcells(h_to_g[N % 2], -59 * hgs, 0)
    hgs += 1
    N //= 2

g.putcells(left_side, -59 * hgs, 0)

t = delay + 200 - snark[1]
r = reflectors[t % 4]

assert(t % 4 == r[1] % 4)

in_lane = 55
out_lane = (t - r[1]) // 4

r1, r2 = (r, snark) if (out_lane + in_lane + snark[2] + snark[3]) % 2 else (snark, r)

shift1 = in_lane - r1[2]
shift2 = out_lane - r1[3]

assert(shift1 % 2 == shift2 % 2)

g.putcells(r1[0], (shift2 + shift1) // 2, (shift2 - shift1) // 2)

in_lane = -out_lane + 1
out_lane = 189

shift1 = in_lane - r2[2]
shift2 = out_lane - r2[3]

assert(shift1 % 2 == shift2 % 2)

g.putcells(r2[0], (shift2 - shift1) // 2, -(shift2 + shift1) // 2, 0, 1, -1, 0)

# Run the trigger glider once around the loop so that the displayed
# pattern is a periodic gun not a predecessor of a periodic gun.
g.run(616 * (hgs + 1) + delay)
g.setgen("0")
g.fit()
Here is an example gun with period 8765:

Code: Select all

x = 435, y = 214, rule = LifeHistory
224.2A11.A$223.B2AB9.A.A$224.3B9.A.A2.2A3.A$223.B.B9.2A.2A2.A2.A.A$
223.5B8.B2.A.A3.A.A$223.6B6.2ABA2.4A.A$223.8B4.2A.A.A3.A$224.13B2.A.A
B2.A$222.13B5.A.A2B.A$221.15B5.A2B.2A47.2A$221.15B4.3B17.A31.2B2AB$
220.17B.B.2B16.3A13.A17.4B$220.29B8.A16.3A15.6B$219.13B2A16B7.2A18.A
15.5B$218.14B2A16B2.B.5B17.2A15.6B$217.2AB3.27B.6B19.4B13.7B13.2A$
216.A2.A4.33B7.7B.B5.3B12.6B13.A.A$215.A.2A5.6B3.B2.2B2.19B.B3.13B.4B
10.7B7.2A4.A$215.A7.6B14.46B4.6B5.A2.A2.2A.4A$214.2A6.9B14.45B2.7B5.
2A.A.A.A.A2.A$221.4B4.2A15.44B2.7B8.A.ABABAB$220.4B5.A15.21B2A22B.9B
7.A.AB2AB$219.4B7.3A12.7B.13B2A32B8.AB.2B$219.4B9.A10.2AB.3B4.6B2.11B
3.2B2.20B4.B6.3B$218.5B19.A.AB9.4B3.10B11.19B.B2A5.4B6.2A$215.9B18.A
10.5B5.6B16.19B2A3.3B2AB6.A$215.9B17.2A10.2A9.3B19.17B.B4.3B2AB3.BA.A
$215.9B30.A9.B20.17B5.10B.B2A$215.10B26.3A9.2A20.17B4.13B$214.12B25.A
11.A19.2AB.15B3.14B$213.13B8.2A25.A.A18.A.AB4.12B2.15B$214.11B9.A19.
2A5.2A19.A9.15B2.8B$215.12B4.BA.A18.A.A25.2A8.15B5.6B$215.15B.B2A19.A
11.A25.14B4.9B$215.17B20.2A9.3A26.12B5.2A4.4B$215.17B20.B9.A30.10B7.A
5.4B$212.B.17B19.3B9.2A10.2A17.9B5.3A7.4B$211.2A19B16.6B5.5B10.A18.9B
5.A10.4B$211.2AB.19B11.10B3.4B9.BA.A19.6B19.4B$212.B4.20B2.2B3.11B2.
6B4.3B.B2A10.A9.5B21.4B$217.32B2A13B.7B12.3A7.4B23.4B$217.9B.22B2A21B
15.A5.4B25.4B$218.7B2.44B15.2A4.4B27.4B$218.7B2.45B14.9B6.2A21.4B$23.
A58.A58.A76.6B4.46B14.6B7.A23.4B$23.3A56.3A56.3A74.7B10.4B.13B3.B.19B
2.2B2.B3.6B5.2A.A24.4B$26.A58.A58.A73.6B12.3B5.B.7B7.33B4.A2.A26.4B$
25.2A6.A50.2A6.A50.2A6.A65.7B13.4B19.6B.27B3.B2A28.4B$25.4B3.A.A49.4B
3.A.A49.4B3.A.A65.5B16.2A17.5B.B2.16B2A14B30.4B$27.5B.A52.5B.A52.5B.A
65.6B16.A18.2A7.16B2A13B32.4B$26.7B52.7B52.7B65.9B15.3A16.A8.29B34.4B
$21.B.10B47.B.10B47.B.10B64.7B.2A17.A13.3A16.2B.B.17B35.4B$20.2AB.9B
46.2AB.9B46.2AB.9B63.4B5.A32.A17.3B4.16B36.4B$20.2A6B2A3B46.2A6B2A3B
46.2A6B2A3B62.4B7.3A43.2A.2BA5.17B36.4B$21.2B.4B2A3B47.2B.4B2A3B47.2B
.4B2A3B61.4B10.A43.A.2BA.A5.17B36.4B$24.10B2.2B45.10B2.2B45.10B2.2B
55.4B56.A2.BA.A2.13B3.4B36.4B$24.13B2A44.13B2A44.13B2A53.4B58.A3.A.A.
2A4.8B3.4B36.4B$24.13B2A44.13B2A44.13B2A52.4B57.A.4A2.AB2A6.6B4.4B36.
4B$24.11B.2B45.11B.2B45.11B.2B52.4B57.A.A3.A.A2.B8.5B5.4B36.4B$22.2AB
.9B46.2AB.9B46.2AB.9B54.4B58.A.A2.A2.2A.2A9.B.B6.4B36.4B$21.A.AB.7B
47.A.AB.7B47.A.AB.7B55.4B60.A3.2A2.A.A9.3B8.4B36.4B$21.A5.7B46.A5.7B
46.A5.7B53.4B69.A.A9.B2AB8.4B36.B3A$12.2A6.2A5.8B44.2A5.8B44.2A5.8B
51.4B71.A11.2A10.4B36.A3B$12.A13.4B2.4B49.4B2.4B49.4B2.4B49.4B97.4B
36.A3B$7.2A5.A10.4B4.4B47.4B4.4B47.4B4.4B47.4B99.4B36.4B$7.A5.2A9.4B
6.4B45.4B6.4B45.4B6.4B45.4B101.4B36.4B$4.2A.A.3B11.4B8.4B43.4B8.4B43.
4B8.4B43.4B103.4B36.4B$4.A2.A.2A2B2A7.4B10.4B41.4B10.4B41.4B10.4B41.
4B105.4B36.4B$6.2A.A.2B2AB5.4B12.4B39.4B12.4B39.4B12.4B39.4B107.4B36.
4B$9.A.4B5.4B14.4B37.4B14.4B37.4B14.4B37.4B109.4B36.4B$9.2A.4B3.4B16.
4B35.4B16.4B35.4B16.4B35.4B111.4B36.4B$12.3BAB.4B18.4B33.4B18.4B33.4B
18.4B33.4B113.4B36.4B$3.2A7.2BABA4B20.4B31.4B20.4B31.4B20.4B31.4B115.
4B36.4B$3.A8.3BA4B22.4B29.4B22.4B29.4B3.2A17.4B29.4B3.2A112.4B36.4B$
2A.A.B3.10B24.4B27.4B24.4B27.4B3.B2AB17.4B27.4B3.B2AB112.4B36.4B$A2.
3AB.2B2A7B25.4B25.4B26.4B25.4B5.2B19.4B25.4B5.2B114.4B36.4B$.2A2.BA3B
2A7B26.4B23.4B28.4B23.5B4.2B21.4B23.5B4.2B116.4B36.4B$3.4A12B27.4B21.
4B30.4B20.14B21.4B20.14B116.4B36.4B$3.A.2B3.7B.B2A26.4B19.4B32.4B19.
14B22.4B19.14B117.4B36.4B$4.3AB2.7B.BA.A26.4B6.A10.4B34.4B6.A10.18B5.
B14.4B6.A10.18B5.B109.4B36.4B$7.A4.4B5.A27.4B5.3A7.4B36.4B5.3A7.26B
14.4B5.3A7.26B109.4B36.4B$2.5A5.4B5.2A27.4B7.A5.4B38.4B7.A5.29B13.4B
7.A5.29B108.4B36.4B$2.A10.4B34.4B5.2A4.4B40.4B5.2A4.30B.B12.4B5.2A4.
30B.B107.4B36.4B$4.A9.4B34.4B4.9B13.2AB26.4B4.37B2A12.4B4.37B2A107.4B
36.4B$3.2A10.4B34.4B5.6B12.BA2BA2B25.4B5.35B2A13.4B5.35B2A108.4B36.4B
$16.4B34.4B2.8B11.3B2A3B26.4B2.8B2.28B15.4B2.8B2.28B110.4B36.4B$17.4B
34.15B7.12B25.15B3.16B.B4.3B16.15B3.16B.B4.3B111.4B10.2A24.4B$18.4B
34.14B6.14B25.14B4.2B.10B28.14B4.2B.10B123.4B9.A26.4B$19.4B34.13B6.
13B27.13B7.9B30.13B7.9B125.4B10.A25.4B$20.4B34.10B.B2A3.14B28.10B.B2A
6.11B28.10B.B2A6.11B116.2A5.4B5.5A26.4B$21.4B35.3B2AB3.BA.A2.15B29.3B
2AB3.BA.A5.12B29.3B2AB3.BA.A5.12B116.A5.4B4.A32.4B$22.4B34.3B2AB6.A3.
14B29.3B2AB6.A5.12B29.3B2AB6.A5.12B116.A.AB.7B2.B3A30.4B$23.4B35.4B6.
2A3.13B31.4B6.2A5.11B31.4B6.2A5.11B117.2AB.7B3.2B.A30.4B$24.4B34.3B
13.3B.8B31.3B12.4B.8B31.3B12.4B.8B119.12B4A31.4B$25.4B30.AB.2B19.7B
28.AB.2B13.2A4.7B28.AB.2B13.2A4.7B119.7B2A3BAB2.2A30.4B$26.4B28.A.AB
2AB18.7B27.A.AB2AB13.A4.7B27.A.AB2AB13.A4.7B119.7B2A2B.B3A2.A30.4B$
27.4B27.A.ABABAB18.6B27.A.ABABAB9.3A6.6B27.A.ABABAB9.3A6.6B119.10B3.B
.A.2A31.4B$28.4B23.2A.A.A.A.A2.A16.7B23.2A.A.A.A.A2.A7.A8.7B23.2A.A.A
.A.A2.A7.A8.7B117.8B8.A35.4B$29.4B22.A2.A2.2A.4A16.8B22.A2.A2.2A.4A
16.8B22.A2.A2.2A.4A16.8B115.9B7.2A36.4B$30.4B23.2A4.A21.8B23.2A4.A21.
8B23.2A4.A21.8B113.4B2.3B47.4B$31.4B28.A.A19.9B28.A.A19.9B28.A.A19.9B
111.4B3.5B46.4B$32.4B28.2A18.6B.4B28.2A18.6B.4B28.2A18.6B.4B109.4B7.
2A47.4B$33.4B47.7B.4B47.7B.4B47.7B.4B107.4B8.A49.4B$34.4B47.6B2.4B47.
6B2.4B47.6B2.4B105.4B10.3A47.4B$35.4B46.6B3.4B46.6B3.4B46.6B3.4B103.
4B13.A48.4B$36.4B45.6B4.4B45.6B4.4B45.6B4.4B101.4B64.4B$37.4B43.8B4.
4B43.8B4.4B43.8B4.4B99.4B66.4B$38.4B41.8B6.4B41.8B6.4B41.8B6.4B97.4B
68.4B$39.4B40.9B6.4B40.9B6.4B40.9B6.4B95.4B70.4B$40.4B39.9B7.4B39.9B
7.4B39.9B7.4B93.4B72.4B$41.4B37.10B8.4B37.10B8.4B37.10B8.4B91.4B74.4B
$42.4B36.3B2A5B9.4B36.3B2A5B9.4B36.3B2A5B9.4B89.4B76.4B$43.4B34.4B2A
5B10.4B34.4B2A5B10.4B34.4B2A5B10.4B87.4B78.4B$44.4B28.2A3.11B11.4B28.
2A3.11B11.4B28.2A3.11B11.4B85.4B80.4B$45.4B27.A2.A12B12.4B27.A2.A12B
12.4B27.A2.A12B12.4B83.4B82.4B$46.4B22.2A4.2A2.8B15.4B22.2A4.2A2.8B
15.4B22.2A4.2A2.8B15.4B81.4B84.4B$47.4B22.A9.7B4.2A10.4B22.A9.7B4.2A
10.4B22.A9.7B4.2A10.4B79.4B86.4B$48.4B21.A.AB7.6B4.A12.4B21.A.AB7.6B
4.A12.4B21.A.AB7.6B4.A12.4B77.4B88.4B$49.4B10.A10.2AB.3B3.6B.BA.A13.
4B10.A10.2AB.3B3.6B.BA.A13.4B10.A10.2AB.3B3.6B.BA.A13.4B75.4B90.4B$
50.4B7.3A12.14B.B2A15.4B7.3A12.14B.B2A15.4B7.3A12.14B.B2A15.4B73.4B
92.4B$51.4B5.A15.16B18.4B5.A15.16B18.4B5.A15.16B18.4B71.4B94.4B$52.4B
4.2A15.14B20.4B4.2A15.14B20.4B4.2A15.14B20.4B69.4B96.4B$45.2A6.9B14.
16B12.2A6.9B14.16B12.2A6.9B14.16B20.4B67.4B98.4B$46.A7.6B14.18B13.A7.
6B14.18B13.A7.6B14.18B21.4B65.4B100.4B$46.A.2A5.6B3.B2.2B2.20B14.A.2A
5.6B3.B2.2B2.20B14.A.2A5.6B3.B2.2B2.20B23.4B60.B2.4B102.4B$47.A2.A4.
35B16.A2.A4.35B16.A2.A4.35B25.4B57.8B104.4B$48.2AB3.27B.7B18.2AB3.27B
.7B18.2AB3.27B.7B27.4B54.9B106.4B$49.14B2A16B2.6B19.14B2A16B2.6B19.
14B2A16B2.6B28.4B33.2B7.2A9.8B108.4B$50.13B2A16B3.6B19.13B2A16B3.6B
19.13B2A16B3.6B28.4B32.2B6.B2AB7.8B110.4B$51.29B6.4B20.29B6.4B20.29B
6.4B29.4B31.4B5.3B6.10B110.4B$51.17B.B.2B12.B2A2B20.17B.B.2B12.B2A2B
20.17B.B.2B12.B2A2B30.4B32.3B3.B.B7.9B112.4B$52.15B4.3B12.2A.B2A19.
15B4.3B12.2A.B2A19.15B4.3B12.2A.B2A29.4B31.4B.6B6.7B114.4B$52.15B5.A
2B.2A11.BA.A18.15B5.A2B.2A11.BA.A18.15B5.A2B.2A11.BA.A29.4B31.10B4.9B
9.A105.4B$53.13B5.A.A2B.A14.A19.13B5.A.A2B.A14.A19.13B5.A.A2B.A14.A
30.4B22.2A7.24B6.A.A105.4B$55.13B2.A.AB2.A15.2A20.13B2.A.AB2.A15.2A
20.13B2.A.AB2.A15.2A30.4B22.A8.24B5.A.A106.4B$54.8B4.2A.A.A3.A37.8B4.
2A.A.A3.A37.8B4.2A.A.A3.A49.4B21.A.AB6.22B4.B2A.2A106.4B10.2A$54.6B6.
2ABA2.4A.A35.6B6.2ABA2.4A.A35.6B6.2ABA2.4A.A48.4B10.A10.2AB.3B2.23B2.
BA2.A2.A106.4B9.A$54.5B8.B2.A.A3.A.A34.5B8.B2.A.A3.A.A34.5B8.B2.A.A3.
A.A48.4B7.3A12.32BABA.A.A.A106.4B10.A$54.B.B9.2A.2A2.A2.A.A34.B.B9.2A
.2A2.A2.A.A34.B.B9.2A.2A2.A2.A.A49.4B5.A15.33BA.A.A.A101.2A5.4B5.5A$
55.3B9.A.A2.2A3.A36.3B9.A.A2.2A3.A36.3B9.A.A2.2A3.A51.4B4.2A15.33B.A.
A104.A5.4B4.A$54.B2AB9.A.A43.B2AB9.A.A43.B2AB9.A.A52.2A6.9B14.29B2.2B
.BAB.A103.A.AB.7B2.B3A$55.2A11.A45.2A11.A45.2A11.A54.A7.6B14.30B6.2B
2AB104.2AB.7B3.2B.A$241.A.2A5.6B3.B2.2B2.20B2.12B7.2B107.12B4A$242.A
2.A4.35B3.11B7.2B108.7B2A3BAB2.2A$243.2AB3.27B.7B5.9B7.B2AB107.7B2A2B
.B3A2.A$244.14B2A16B2.6B7.7B8.2A108.10B3.B.A.2A$245.13B2A16B3.6B5.9B
116.8B8.A$246.29B6.4B5.10B114.9B7.2A$246.17B.B.2B12.B2A2B6.8B114.4B2.
3B$247.15B4.3B12.2A.B2A5.8B112.4B3.5B$247.15B5.A2B.2A11.BA.A4.9B110.
4B7.2A$248.13B5.A.A2B.A14.A6.8B108.4B8.A$250.13B2.A.AB2.A15.2A7.B2.4B
106.4B10.3A$249.8B4.2A.A.A3.A29.4B104.4B13.A$249.6B6.2ABA2.4A.A28.4B
102.4B$249.5B8.B2.A.A3.A.A28.4B100.4B$249.B.B9.2A.2A2.A2.A.A29.4B98.
4B$250.3B9.A.A2.2A3.A31.4B96.4B$249.B2AB9.A.A40.4B94.4B$250.2A11.A42.
4B92.4B$307.4B90.4B$308.4B88.4B$309.4B86.4B$310.4B84.4B$311.4B82.4B$
312.4B80.4B$313.4B78.4B$314.4B76.4B$315.4B74.4B$316.4B72.4B$317.4B70.
4B$318.4B68.4B$319.4B66.4B$320.4B64.4B$321.4B62.4B$322.4B60.4B$323.4B
43.2A13.4B$324.4B43.A12.4B$325.4B41.A12.4B$326.4B40.2A2.2A6.4B$327.4B
42.A.A5.4B$328.4B36.4A.A6.4B$329.4B35.A2.A.2A4.4B$330.4B37.5B2.4B$
331.4B37.9B$332.4B36.8B$333.4B34.8B$334.4B22.2A9.7B$335.4B22.A10.6B4.
2A$336.4B21.A.AB7.6B4.A$337.4B10.A10.2AB.3B3.6B.BA.A$338.4B7.3A12.14B
.B2A$339.4B5.A15.16B$340.4B4.2A15.14B$333.2A6.9B14.16B$334.A7.6B14.
18B$334.A.2A5.6B3.B2.2B2.20B$335.A2.A4.36B$336.2AB3.27B.9B$337.14B2A
16B2.7B$338.13B2A16B2.7B$339.29B4.6B$339.17B.B.2B10.7B$340.15B4.3B10.
6B$340.15B5.A2B.2A6.7B$341.13B5.A.A2B.A7.5B$343.13B2.A.AB2.A8.5B$342.
8B4.2A.A.A3.A7.7B$342.6B6.2ABA2.4A.A5.2A.3B$342.5B8.B2.A.A3.A.A5.A$
342.B.B9.2A.2A2.A2.A.A2.3A$343.3B9.A.A2.2A3.A3.A$342.B2AB9.A.A$343.2A
11.A!
Notice that two identical "near misses" occur at approximately generation 7000 and 350 generations later. (EDIT: not 616 generations like I wrote originally)

Period 616 + 1087 = 1703 is the minimum period that the script works for. Period 1702 is not possible because period 1710 is the minimum with that particular choice of reflector.

User avatar
dvgrn
Moderator
Posts: 10612
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Guns with bounding box O(log(period))

Post by dvgrn » December 22nd, 2017, 12:13 pm

chris_c wrote:I know this has been done before but for some reason I decided to make a script that uses more modern technology. I think the result is simpler and more fun to watch.
I tried it for period 999999 -- looks good!

Haven't thought about it very hard yet, but if a 90-degree turn component was designed such that the outgoing signal and the return signal each took some multiple of 616 ticks to go around the turn... might that allow for a script to build O(sqrt(log(period))) sized guns with this mechanism?

chris_c
Posts: 966
Joined: June 28th, 2014, 7:15 am

Re: Guns with bounding box O(log(period))

Post by chris_c » December 22nd, 2017, 9:18 pm

dvgrn wrote: Haven't thought about it very hard yet, but if a 90-degree turn component was designed such that the outgoing signal and the return signal each took some multiple of 616 ticks to go around the turn... might that allow for a script to build O(sqrt(log(period))) sized guns with this mechanism?
I'm really not sure. The following simple configuration takes 882 + 966 = 3 * 616 generations for both signals to move to the next unit. Maybe that is sufficient? Maybe there will be no collisions if a gun is made in this way? I haven't done any proper thinking yet but if it does work it won't be very hard to code.

Code: Select all

x = 152, y = 251, rule = LifeHistory
103.A$101.3A$100.A$93.A6.2A$92.A.A3.4B$93.A.5B$94.7B$94.10B.B$94.9B.B
2A$94.3B2A6B2A$94.3B2A4B.2B$89.2B2.10B$88.2A13B$88.2A13B$89.2B.11B$
92.9B.B2A$94.7B.BA.A$93.7B5.A$92.8B5.2A$91.4B2.4B$90.4B4.4B$89.4B6.4B
$88.4B8.4B$87.4B10.4B$86.4B12.4B$85.4B14.4B$84.4B16.4B35.B$83.4B18.4B
33.2B$83.3B20.4B31.3B$83.2B22.4B29.4B$83.B24.4B27.4B$109.4B25.4B$110.
4B23.4B$111.4B21.4B$112.4B19.4B$113.4B10.A6.4B$114.4B7.3A5.4B$115.4B
5.A7.4B$116.4B4.2A5.4B$101.B2A13.9B4.4B$99.2BA2BAB12.6B5.4B$99.3B2A3B
11.8B2.4B$97.12B7.15B$96.14B6.14B$97.13B6.13B$97.14B3.2AB.10B$96.15B
2.A.AB3.B2A3B$96.14B3.A6.B2A3B$96.13B3.2A6.4B$96.8B.3B13.3B$96.7B19.
2B.BA$96.7B18.B2ABA.A$96.6B18.BABABA.A$95.7B16.A2.A.A.A.A.2A$94.8B16.
4A.2A2.A2.A$93.8B21.A4.2A$92.9B19.A.A$91.4B.6B18.2A$90.4B.7B$89.4B2.
6B47.B$88.4B3.6B46.2B$87.4B4.6B45.3B$86.4B4.8B43.4B$85.4B6.8B41.4B$
84.4B6.9B40.4B$83.4B7.9B39.4B$83.3B8.10B37.4B$83.2B9.5B2A3B36.4B$83.B
10.5B2A4B34.4B$94.11B3.2A28.4B$94.12BA2.A27.4B$96.8B2.2A4.2A22.4B$90.
2A4.7B9.A22.4B$91.A4.6B7.BA.A21.4B$91.A.AB.6B3.3B.B2A10.A10.4B$92.2AB
.14B12.3A7.4B$94.16B15.A5.4B$95.14B15.2A4.4B$94.16B14.9B6.2A$94.18B
14.6B7.A$95.20B2.2B2.B3.6B5.2A.A$96.35B4.A2.A$97.7B.27B3.B2A$97.6B2.
20B3A9B$96.6B3.22BA8B$96.4B6.19B3A7B$96.2B2AB12.2B.B.17B$94.2AB.2A12.
3B4.15B$93.A.AB11.2A.2BA5.15B$21.4B68.A14.A.2BA.A5.13B$20.4B68.2A15.A
2.BA.A2.13B$19.4B87.A3.A.A.2A4.8B$18.4B86.A.4A2.AB2A6.6B$17.4B86.A.A
3.A.A2.B8.5B$16.4B87.A.A2.A2.2A.2A9.B.B$3.2A10.4B89.A3.2A2.A.A9.3B$4.
A9.4B98.A.A9.B2AB$2.A10.4B100.A11.2A$2.5A5.4B5.2A$7.A4.4B5.A$4.3AB2.
7B.BA.A$3.A.2B3.7B.B2A$3.4A12B$.2A2.BA3B2A7B$A2.3AB.2B2A7B$2A.A.B3.
10B$3.A8.8B$3.2A7.9B$13.3B2.4B$11.5B3.4B$11.2A7.4B$12.A8.4B$9.3A10.4B
$9.A13.4B$24.4B10$24.4B$9.A13.4B$9.3A10.4B$12.A8.4B$11.2A7.4B$11.5B3.
4B$13.3B2.4B$3.2A7.9B$3.A8.8B$2A.A.B3.10B$A2.3AB.2B2A7B$.2A2.BA3B2A7B
$3.4A12B$3.A.2B3.7B.B2A$4.3AB2.7B.BA.A$7.A4.4B5.A$2.5A5.4B5.2A$2.A10.
4B$4.A9.4B$3.2A10.4B$16.4B$17.4B$18.4B$19.4B$20.4B$21.4B$22.4B$23.4B$
24.4B$25.4B103.A$26.4B102.3A$27.4B104.A$28.4B102.2A6.A$29.4B101.4B3.A
.A$30.3B103.5B.A$31.2B102.7B$32.B97.B.10B$129.2AB.9B$129.2A11B$130.2B
.3B3A3B$133.2BA3BA3B2.2B$133.BA5BA5B2A$133.BA5BA5B2A$133.BA5BA3B.2B$
131.2AB.A3BA4B$130.A.AB.B3A3B$130.A5.7B$129.2A5.8B$135.4B2.4B$134.4B
4.4B$133.4B6.4B$132.4B8.4B$131.4B10.4B$130.4B12.4B$129.4B14.4B$92.B
35.4B16.4B$92.2B35.2B18.3B$92.3B34.B20.2B$92.4B55.B$93.4B$94.4B$95.4B
23.B$96.4B21.4B$97.4B19.4B$98.4B6.A10.4B$99.4B5.3A7.4B$100.4B7.A5.4B$
101.4B5.2A4.4B$102.4B4.9B13.2AB$103.4B5.6B12.BA2BA2B$104.4B2.8B11.3B
2A3B$105.15B7.12B$106.14B6.14B$107.13B6.13B$108.10B.B2A3.14B$110.3B2A
B3.BA.A2.15B$110.3B2AB6.A3.14B$112.4B6.2A3.13B$112.3B13.3B.8B$109.AB.
2B19.7B$108.A.AB2AB18.7B$108.A.ABABAB18.6B$105.2A.A.A.A.A2.A16.7B$
105.A2.A2.2A.4A16.8B$83.B23.2A4.A21.8B$83.2B28.A.A19.9B$83.3B28.2A18.
6B.4B$83.4B47.7B.4B$84.4B47.6B2.4B$85.4B46.6B3.4B$86.4B45.6B4.4B$87.
4B43.8B4.4B$88.4B41.8B6.4B$89.4B40.9B6.4B$90.4B39.9B7.3B$91.4B37.10B
8.2B$92.4B36.3B2A5B9.B$93.4B34.4B2A5B$94.4B28.2A3.11B$95.4B27.A2.A12B
$96.4B22.2A4.2A2.8B$97.4B22.A9.7B4.2A$98.4B21.A.AB7.6B4.A$99.4B10.A
10.2AB.3B3.6B.BA.A$100.4B7.3A12.14B.B2A$101.4B5.A15.16B$102.4B4.2A15.
14B$95.2A6.9B14.16B$96.A7.6B14.18B$96.A.2A5.6B3.B2.2B2.20B$97.A2.A4.
35B$98.2AB3.27B.7B$99.14B2A16B2.6B$100.13B2A16B3.6B$101.29B6.4B$101.
17B.B.2B12.B2A2B$102.15B4.3B12.2A.B2A$102.15B5.A2B.2A11.BA.A$103.13B
5.A.A2B.A14.A$105.13B2.A.AB2.A15.2A$104.8B4.2A.A.A3.A$104.6B6.2ABA2.
4A.A$104.5B8.B2.A.A3.A.A$104.B.B9.2A.2A2.A2.A.A$105.3B9.A.A2.2A3.A$
104.B2AB9.A.A$105.2A11.A!

User avatar
simsim314
Posts: 1823
Joined: February 10th, 2014, 1:27 pm

Re: Guns with bounding box O(log(period))

Post by simsim314 » December 24th, 2017, 3:55 pm

Looks great! Congrats!

User avatar
dvgrn
Moderator
Posts: 10612
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Guns with bounding box O(log(period))

Post by dvgrn » December 25th, 2017, 10:02 pm

chris_c wrote:
dvgrn wrote:... might that allow for a script to build O(sqrt(log(period))) sized guns with this mechanism?
I'm really not sure. The following simple configuration takes 882 + 966 = 3 * 616 generations for both signals to move to the next unit. Maybe that is sufficient?
This certainly doesn't prove anything, but the extension seems to work fine for a random-sample period 2,066,954,351 gun -- and as a sanity check, the glider insertion that happens at T=2066952952 places the inserted glider exactly the same number of ticks behind the clock glider, as happens in the p8765 gun:

Code: Select all

x = 47, y = 32, rule = LifeHistory
25.4B$24.4B$23.4B3.2A$22.4B3.B2AB$21.4B5.2B$20.5B4.2B$18.14B$18.14B$
6.A10.18B5.B$B5.3A7.26B$2B7.A5.29B$3B5.2A4.30B.B$4B4.37B2A$.4B5.BA33B
2A$2.4B2.2B3A3B2.28B$3.6B5A4B3.16B.B4.3B$4.4B2A3B2A3B4.2B.10B$5.4B5A
4B7.9B$6.4B3A3B.B2A6.11B$8.3BA2B3.BA.A5.12B$8.6B6.A5.12B$10.4B6.2A5.
11B$10.3B12.4B.4B3AB$7.AB.2B13.2A4.4BA2B$6.A.AB2AB13.A4.2B3A2B$6.A.AB
ABAB9.3A6.6B$3.2A.A.A.A.A2.A7.A8.7B$3.A2.A2.2A.4A16.8B$5.2A4.A21.8B$
11.A.A19.9B$12.2A18.6B.4B$32.7B.4B!
Thinking about it with the sanity check out of the way... offhand I don't see how the inserted return gliders could possibly get out of sync with the clock gliders. The only slightly tricky part is picking an appropriate number of 180-degree bends for a given period N.

The math seems pretty simple for a structure with any fixed number of 180-degree bends, so I guess it's just a matter of picking a reasonable number of 180-degree bends first, and then picking the right number of semi-Snarks based on the total signal path, setting the blocks in the semi-Snarks appropriately, and adjusting the final reflector in the southeast.

Here's the trial gun I put together, just for reference.

Code: Select all

#C period 2,066,954,351 gun
x = 610, y = 802, rule = LifeHistory
73.A58.A58.A58.A58.A$73.3A56.3A56.3A56.3A56.3A$76.A58.A58.A58.A58.A$
75.2A6.A50.2A6.A50.2A6.A50.2A6.A50.2A6.A$82.A.A56.A.A56.A.A56.A.A56.A
.A$83.A58.A58.A58.A58.A2$77.2A175.2A57.2A$70.2A5.2A50.2A57.2A57.2A5.
2A50.2A5.2A$70.2A57.2A6.2A49.2A6.2A49.2A57.2A$137.2A57.2A2$87.2A57.2A
57.2A57.2A57.2A$87.2A57.2A57.2A57.2A57.2A2$72.2A57.2A57.2A57.2A57.2A$
71.A.A56.A.A56.A.A56.A.A56.A.A$71.A58.A58.A58.A58.A$62.2A6.2A57.2A57.
2A57.2A57.2A$62.A$57.2A5.A$57.A5.2A$54.2A.A$54.A2.A.2A2.2A$56.2A.A3.
2A$59.A$59.2A$65.A$53.2A9.A.A$53.A11.A125.2A57.2A$50.2A.A137.2A57.2A$
50.A2.3A4.2A$51.2A3.A3.2A$53.4A$53.A15.2A$54.3A12.A.A36.A58.A58.A58.A
$57.A13.A36.3A56.3A56.3A56.3A$52.5A14.2A38.A58.A58.A58.A$52.A57.2A57.
2A57.2A57.2A$54.A77.2A72.2A57.2A42.2A$53.2A76.A2.A71.2A57.2A41.A2.A$
132.2A175.2A4$120.2A57.2A57.2A57.2A$113.2A5.A.A49.2A5.A.A49.2A5.A.A
49.2A5.A.A$113.2A7.A49.2A7.A49.2A7.A49.2A7.A$122.2A57.2A57.2A57.2A2$
109.A58.A17.2A39.A17.2A39.A$108.A.A.2A53.A.A.2A14.A38.A.A.2A14.A38.A.
A.2A$108.A.A.A.A52.A.A.A.A10.3A39.A.A.A.A10.3A39.A.A.A.A$105.2A.A.A.A
.A2.A46.2A.A.A.A.A2.A7.A38.2A.A.A.A.A2.A7.A38.2A.A.A.A.A2.A$105.A2.A
2.2A.4A46.A2.A2.2A.4A46.A2.A2.2A.4A46.A2.A2.2A.4A$107.2A4.A52.2A4.A
52.2A4.A52.2A4.A$113.A.A56.A.A56.A.A56.A.A$114.2A57.2A57.2A57.2A10$
135.2A57.2A57.2A57.2A$135.2A57.2A57.2A57.2A$126.2A57.2A57.2A57.2A$
126.A2.A55.A2.A55.A2.A55.A2.A$122.2A4.2A51.2A4.2A51.2A4.2A51.2A4.2A$
123.A20.2A36.A20.2A36.A20.2A36.A20.2A$123.A.A18.A37.A.A18.A37.A.A18.A
37.A.A18.A$113.A10.2A16.A.A27.A10.2A16.A.A27.A10.2A16.A.A27.A10.2A16.
A.A$111.3A28.2A26.3A28.2A26.3A28.2A26.3A28.2A$110.A58.A58.A58.A$110.
2A57.2A57.2A57.2A$95.2A57.2A57.2A57.2A$96.A58.A58.A58.A$96.A.2A55.A.
2A55.A.2A55.A.2A$97.A2.A55.A2.A55.A2.A55.A2.A$98.2A57.2A57.2A57.2A$
113.2A57.2A57.2A57.2A$113.2A57.2A57.2A57.2A2$136.2A57.2A57.2A57.2A$
136.2A2.2A53.2A2.2A53.2A2.2A53.2A2.2A$122.A3.2A12.A.A38.A3.2A12.A.A
38.A3.2A12.A.A38.A3.2A12.A.A$121.A.A3.A14.A37.A.A3.A14.A37.A.A3.A14.A
37.A.A3.A14.A$120.A.A3.A15.2A35.A.A3.A15.2A35.A.A3.A15.2A35.A.A3.A15.
2A$116.2A.A.A3.A49.2A.A.A3.A49.2A.A.A3.A49.2A.A.A3.A$116.2A.A2.4A.A
47.2A.A2.4A.A47.2A.A2.4A.A47.2A.A2.4A.A$120.A.A3.A.A50.A.A3.A.A50.A.A
3.A.A50.A.A3.A.A$116.2A.2A2.A2.A.A46.2A.2A2.A2.A.A46.2A.2A2.A2.A.A46.
2A.2A2.A2.A.A$117.A.A2.2A3.A48.A.A2.2A3.A48.A.A2.2A3.A48.A.A2.2A3.A
103.2A$105.2A10.A.A44.2A10.A.A44.2A10.A.A44.2A10.A.A111.A$105.2A11.A
45.2A11.A45.2A11.A45.2A11.A114.A$390.2A14.5A$391.A13.A$391.A.A12.3A$
392.2A15.A$406.4A$401.2A3.A3.2A$401.2A4.3A2.A$409.A.2A$409.A$408.2A3$
400.2A$400.A$401.3A$403.A12$403.A$401.3A$400.A$400.2A3$408.2A$409.A$
409.A.2A$401.2A4.3A2.A$401.2A3.A3.2A$406.4A$392.2A15.A$391.A.A12.3A$
391.A13.A$390.2A14.5A$410.A$408.A$408.2A10$103.A58.A58.A58.A$101.3A
56.3A56.3A56.3A$100.A58.A58.A58.A$93.A6.2A50.A6.2A50.A6.2A50.A6.2A$
92.A.A56.A.A56.A.A56.A.A$93.A58.A58.A58.A2$98.2A57.2A$98.2A5.2A50.2A
5.2A57.2A57.2A$105.2A57.2A49.2A6.2A49.2A6.2A$215.2A57.2A2$88.2A57.2A
57.2A57.2A$88.2A57.2A57.2A57.2A2$103.2A57.2A57.2A57.2A$103.A.A56.A.A
56.A.A56.A.A$105.A58.A58.A58.A$105.2A57.2A57.2A57.2A11$161.2A57.2A$
161.2A57.2A5$127.A58.A58.A58.A$125.3A56.3A56.3A56.3A$124.A58.A58.A58.
A$124.2A57.2A57.2A57.2A$102.2A42.2A57.2A72.2A$101.A2.A41.2A57.2A71.A
2.A$102.2A175.2A4$114.2A57.2A57.2A57.2A$113.A.A5.2A49.A.A5.2A49.A.A5.
2A49.A.A5.2A$113.A7.2A49.A7.2A49.A7.2A49.A7.2A$112.2A57.2A57.2A57.2A
2$126.A39.2A17.A39.2A17.A58.A$122.2A.A.A38.A14.2A.A.A38.A14.2A.A.A53.
2A.A.A$121.A.A.A.A39.3A10.A.A.A.A39.3A10.A.A.A.A52.A.A.A.A$118.A2.A.A
.A.A.2A38.A7.A2.A.A.A.A.2A38.A7.A2.A.A.A.A.2A46.A2.A.A.A.A.2A$118.4A.
2A2.A2.A46.4A.2A2.A2.A46.4A.2A2.A2.A46.4A.2A2.A2.A$122.A4.2A52.A4.2A
52.A4.2A52.A4.2A$120.A.A56.A.A56.A.A56.A.A$120.2A57.2A57.2A57.2A10$
99.2A57.2A57.2A57.2A$99.2A57.2A57.2A57.2A$108.2A57.2A57.2A57.2A$106.A
2.A55.A2.A55.A2.A55.A2.A$106.2A4.2A51.2A4.2A51.2A4.2A51.2A4.2A$90.2A
20.A36.2A20.A36.2A20.A36.2A20.A$91.A18.A.A37.A18.A.A37.A18.A.A37.A18.
A.A$91.A.A16.2A10.A27.A.A16.2A10.A27.A.A16.2A10.A27.A.A16.2A10.A$92.
2A28.3A26.2A28.3A26.2A28.3A26.2A28.3A$125.A58.A58.A58.A$124.2A57.2A
57.2A57.2A$139.2A57.2A57.2A57.2A$139.A58.A58.A58.A$136.2A.A55.2A.A55.
2A.A55.2A.A$135.A2.A55.A2.A55.A2.A55.A2.A$136.2A57.2A57.2A57.2A$121.
2A57.2A57.2A57.2A$121.2A57.2A57.2A57.2A2$98.2A57.2A57.2A57.2A$94.2A2.
2A53.2A2.2A53.2A2.2A53.2A2.2A$93.A.A12.2A3.A38.A.A12.2A3.A38.A.A12.2A
3.A38.A.A12.2A3.A$93.A14.A3.A.A37.A14.A3.A.A37.A14.A3.A.A37.A14.A3.A.
A$92.2A15.A3.A.A35.2A15.A3.A.A35.2A15.A3.A.A35.2A15.A3.A.A$110.A3.A.A
.2A49.A3.A.A.2A49.A3.A.A.2A49.A3.A.A.2A$108.A.4A2.A.2A47.A.4A2.A.2A
47.A.4A2.A.2A47.A.4A2.A.2A$107.A.A3.A.A50.A.A3.A.A50.A.A3.A.A50.A.A3.
A.A$107.A.A2.A2.2A.2A46.A.A2.A2.2A.2A46.A.A2.A2.2A.2A46.A.A2.A2.2A.2A
$3.2A103.A3.2A2.A.A48.A3.2A2.A.A48.A3.2A2.A.A48.A3.2A2.A.A$4.A111.A.A
10.2A44.A.A10.2A44.A.A10.2A44.A.A10.2A$2.A114.A11.2A45.A11.2A45.A11.
2A45.A11.2A$2.5A14.2A$7.A13.A$4.3A12.A.A$3.A15.2A$3.4A$.2A3.A3.2A$A2.
3A4.2A$2A.A$3.A$3.2A3$11.2A$12.A$9.3A$9.A12$9.A$9.3A$12.A$11.2A3$3.2A
$3.A$2A.A$A2.3A4.2A$.2A3.A3.2A$3.4A$3.A15.2A$4.3A12.A.A$7.A13.A$2.5A
14.2A$2.A$4.A$3.2A10$132.A58.A58.A58.A$132.3A56.3A56.3A56.3A$135.A58.
A58.A58.A$134.2A6.A50.2A6.A50.2A6.A50.2A6.A$141.A.A56.A.A56.A.A56.A.A
$142.A58.A58.A58.A2$254.2A57.2A$129.2A57.2A57.2A5.2A50.2A5.2A$129.2A
6.2A49.2A6.2A49.2A57.2A$137.2A57.2A2$146.2A57.2A57.2A57.2A$146.2A57.
2A57.2A57.2A2$131.2A57.2A57.2A57.2A$130.A.A56.A.A56.A.A56.A.A$130.A
58.A58.A58.A$129.2A57.2A57.2A57.2A11$191.2A57.2A$191.2A57.2A5$108.A
58.A58.A58.A$108.3A56.3A56.3A56.3A$111.A58.A58.A58.A$110.2A57.2A57.2A
57.2A$132.2A72.2A57.2A42.2A$131.A2.A71.2A57.2A41.A2.A$132.2A175.2A4$
120.2A57.2A57.2A57.2A$113.2A5.A.A49.2A5.A.A49.2A5.A.A49.2A5.A.A$113.
2A7.A49.2A7.A49.2A7.A49.2A7.A$122.2A57.2A57.2A57.2A2$109.A58.A17.2A
39.A17.2A39.A$108.A.A.2A53.A.A.2A14.A38.A.A.2A14.A38.A.A.2A$108.A.A.A
.A52.A.A.A.A10.3A39.A.A.A.A10.3A39.A.A.A.A$105.2A.A.A.A.A2.A46.2A.A.A
.A.A2.A7.A38.2A.A.A.A.A2.A7.A38.2A.A.A.A.A2.A$105.A2.A2.2A.4A46.A2.A
2.2A.4A46.A2.A2.2A.4A46.A2.A2.2A.4A$107.2A4.A52.2A4.A52.2A4.A52.2A4.A
$113.A.A56.A.A56.A.A56.A.A$114.2A57.2A57.2A57.2A10$135.2A57.2A57.2A
57.2A$135.2A57.2A57.2A57.2A$126.2A57.2A57.2A57.2A$126.A2.A55.A2.A55.A
2.A55.A2.A$122.2A4.2A51.2A4.2A51.2A4.2A51.2A4.2A$123.A20.2A36.A20.2A
36.A20.2A36.A20.2A$123.A.A18.A37.A.A18.A37.A.A18.A37.A.A18.A$113.A10.
2A16.A.A27.A10.2A16.A.A27.A10.2A16.A.A27.A10.2A16.A.A$111.3A28.2A26.
3A28.2A26.3A28.2A26.3A28.2A$110.A58.A58.A58.A$110.2A57.2A57.2A57.2A$
95.2A57.2A57.2A57.2A$96.A58.A58.A58.A$96.A.2A55.A.2A55.A.2A55.A.2A$
97.A2.A55.A2.A55.A2.A55.A2.A$98.2A57.2A57.2A57.2A$113.2A57.2A57.2A57.
2A$113.2A57.2A57.2A57.2A2$136.2A57.2A57.2A57.2A$136.2A2.2A53.2A2.2A
53.2A2.2A53.2A2.2A$122.A3.2A12.A.A38.A3.2A12.A.A38.A3.2A12.A.A38.A3.
2A12.A.A$121.A.A3.A14.A37.A.A3.A14.A37.A.A3.A14.A37.A.A3.A14.A$120.A.
A3.A15.2A35.A.A3.A15.2A35.A.A3.A15.2A35.A.A3.A15.2A$116.2A.A.A3.A49.
2A.A.A3.A49.2A.A.A3.A49.2A.A.A3.A$116.2A.A2.4A.A47.2A.A2.4A.A47.2A.A
2.4A.A47.2A.A2.4A.A$120.A.A3.A.A50.A.A3.A.A50.A.A3.A.A50.A.A3.A.A$
116.2A.2A2.A2.A.A46.2A.2A2.A2.A.A46.2A.2A2.A2.A.A46.2A.2A2.A2.A.A$
117.A.A2.2A3.A48.A.A2.2A3.A48.A.A2.2A3.A48.A.A2.2A3.A103.2A$105.2A10.
A.A44.2A10.A.A44.2A10.A.A44.2A10.A.A111.A$105.2A11.A45.2A11.A45.2A11.
A45.2A11.A114.A$390.2A14.5A$391.A13.A$391.A.A12.3A$392.2A15.A$406.4A$
401.2A3.A3.2A$401.2A4.3A2.A$409.A.2A$409.A$408.2A3$400.2A$400.A$401.
3A$403.A12$403.A$401.3A$400.A$400.2A3$408.2A$409.A$409.A.2A$401.2A4.
3A2.A$401.2A3.A3.2A$406.4A$392.2A15.A$391.A.A12.3A$391.A13.A$390.2A
14.5A$410.A$408.A$408.2A10$103.A58.A58.A58.A$101.3A56.3A56.3A56.3A$
100.A58.A58.A58.A$93.A6.2A50.A6.2A50.A6.2A50.A6.2A$92.A.A56.A.A56.A.A
56.A.A$93.A58.A58.A58.A2$98.2A$98.2A5.2A57.2A57.2A57.2A$105.2A49.2A6.
2A49.2A6.2A49.2A6.2A$156.2A57.2A57.2A2$88.2A57.2A57.2A57.2A$88.2A57.
2A57.2A57.2A2$103.2A57.2A57.2A57.2A$103.A.A56.A.A56.A.A56.A.A$105.A
58.A58.A58.A$105.2A57.2A57.2A57.2A11$161.2A57.2A$161.2A57.2A5$127.A
58.A58.A58.A$125.3A56.3A56.3A56.3A$124.A58.A58.A58.A$124.2A57.2A57.2A
57.2A$102.2A42.2A57.2A72.2A$101.A2.A41.2A57.2A71.A2.A$102.2A175.2A4$
114.2A57.2A57.2A57.2A$113.A.A5.2A49.A.A5.2A49.A.A5.2A49.A.A5.2A$113.A
7.2A49.A7.2A49.A7.2A49.A7.2A$112.2A57.2A57.2A57.2A2$126.A39.2A17.A39.
2A17.A58.A$122.2A.A.A38.A14.2A.A.A38.A14.2A.A.A53.2A.A.A$121.A.A.A.A
39.3A10.A.A.A.A39.3A10.A.A.A.A52.A.A.A.A$118.A2.A.A.A.A.2A38.A7.A2.A.
A.A.A.2A38.A7.A2.A.A.A.A.2A46.A2.A.A.A.A.2A$118.4A.2A2.A2.A46.4A.2A2.
A2.A46.4A.2A2.A2.A46.4A.2A2.A2.A$122.A4.2A52.A4.2A52.A4.2A52.A4.2A$
120.A.A56.A.A56.A.A56.A.A$120.2A57.2A57.2A57.2A10$99.2A57.2A57.2A57.
2A$99.2A57.2A57.2A57.2A$108.2A57.2A57.2A57.2A$106.A2.A55.A2.A55.A2.A
55.A2.A$106.2A4.2A51.2A4.2A51.2A4.2A51.2A4.2A99.2A$90.2A20.A36.2A20.A
36.2A20.A36.2A20.A100.A$91.A18.A.A37.A18.A.A37.A18.A.A37.A18.A.A98.A.
A$91.A.A16.2A10.A27.A.A16.2A10.A27.A.A16.2A10.A27.A.A16.2A10.A88.2A$
92.2A28.3A26.2A28.3A26.2A28.3A26.2A28.3A83.C$125.A58.A58.A58.A82.2C$
124.2A57.2A57.2A57.2A81.C.C$139.2A57.2A57.2A57.2A$139.A58.A58.A58.A$
136.2A.A55.2A.A55.2A.A55.2A.A$135.A2.A55.A2.A55.A2.A55.A2.A$136.2A57.
2A57.2A57.2A$121.2A57.2A57.2A57.2A$121.2A57.2A57.2A57.2A2$98.2A57.2A
57.2A57.2A$94.2A2.2A53.2A2.2A53.2A2.2A53.2A2.2A$93.A.A12.2A3.A38.A.A
12.2A3.A38.A.A12.2A3.A38.A.A12.2A3.A$93.A14.A3.A.A37.A14.A3.A.A37.A
14.A3.A.A37.A14.A3.A.A$92.2A15.A3.A.A35.2A15.A3.A.A35.2A15.A3.A.A35.
2A15.A3.A.A$110.A3.A.A.2A49.A3.A.A.2A49.A3.A.A.2A49.A3.A.A.2A$108.A.
4A2.A.2A47.A.4A2.A.2A47.A.4A2.A.2A47.A.4A2.A.2A$107.A.A3.A.A50.A.A3.A
.A50.A.A3.A.A50.A.A3.A.A$107.A.A2.A2.2A.2A46.A.A2.A2.2A.2A46.A.A2.A2.
2A.2A46.A.A2.A2.2A.2A$3.2A103.A3.2A2.A.A48.A3.2A2.A.A48.A3.2A2.A.A48.
A3.2A2.A.A$4.A111.A.A10.2A44.A.A10.2A44.A.A10.2A44.A.A10.2A$2.A114.A
11.2A45.A11.2A45.A11.2A45.A11.2A$2.5A14.2A$7.A13.A$4.3A12.A.A$3.A15.
2A$3.4A$.2A3.A3.2A$A2.3A4.2A$2A.A$3.A$3.2A2$392.2A11.A$11.2A379.2A10.
A.A$12.A391.A.A2.2A3.A$9.3A391.2A.2A2.A2.A.A$9.A397.A.A3.A.A$403.2A.A
2.4A.A$403.2A.A.A3.A$407.A.A3.A$408.A.A3.A$409.A3.2A47.2A$428.A33.2A$
426.3A13.A$425.A16.3A$400.2A23.2A18.A$400.2A42.2A$324.2A59.2A94.2A$9.
A315.A58.A2.A92.A.A$9.3A311.A59.A.2A87.2A4.A$12.A310.5A14.2A39.A88.A
2.A2.2A.4A$11.2A315.A13.A39.2A88.2A.A.A.A.A2.A$325.3A12.A.A54.2A76.A.
A.A.A$324.A15.2A55.A36.2A39.A.A.2A$3.2A319.4A70.3A33.2A40.A$3.A318.2A
3.A3.2A67.A10.2A$2A.A317.A2.3A4.2A77.A.A59.2A15.2A$A2.3A4.2A309.2A.A
85.A61.2A6.2A7.A$.2A3.A3.2A312.A84.2A10.2A57.2A5.A.A$3.4A317.2A96.A
64.2A$3.A15.2A398.3A9.2A$4.3A12.A.A397.A11.A19.2A$7.A13.A310.2A68.2A
25.A.A18.A.A$2.5A14.2A310.A68.A19.2A5.2A19.A$2.A327.3A67.A.A18.A.A25.
2A$4.A325.A69.2A19.A11.A$3.2A415.2A9.3A43.2A$430.A47.A$430.2A10.2A31.
3A$379.2A61.A32.A$379.2A59.A.A$440.2A10.A$417.2A33.3A$417.2A36.A$454.
2A$469.2A$132.A58.A58.A58.A159.A$132.3A56.3A56.3A56.3A154.2A.A$135.A
58.A58.A58.A152.A2.A$134.2A6.A50.2A6.A50.2A6.A50.2A6.A146.2A$141.A.A
56.A.A56.A.A56.A.A86.2A42.2A$142.A58.A58.A58.A87.A18.2A23.2A$408.3A
16.A$195.2A116.2A76.2A17.A13.3A$129.2A57.2A5.2A50.2A57.2A5.2A76.A32.A
$129.2A6.2A49.2A57.2A6.2A49.2A84.3A43.2A3.A$137.2A116.2A137.A43.A3.A.
A$439.A3.A.A$146.2A57.2A57.2A57.2A115.A3.A.A.2A$146.2A57.2A57.2A57.2A
113.A.4A2.A.2A$437.A.A3.A.A$131.2A57.2A57.2A57.2A127.A.A2.A2.2A.2A$
130.A.A56.A.A56.A.A56.A.A128.A3.2A2.A.A$130.A58.A58.A58.A138.A.A10.2A
$129.2A57.2A57.2A57.2A139.A11.2A11$191.2A57.2A$191.2A57.2A5$108.A58.A
58.A58.A58.A$108.3A56.3A56.3A56.3A56.3A$111.A58.A58.A58.A58.A$110.2A
57.2A57.2A57.2A57.2A$132.2A72.2A57.2A42.2A57.2A$131.A2.A71.2A57.2A41.
A2.A55.A2.A$132.2A175.2A57.2A$509.2A$509.A$511.A$120.2A57.2A57.2A57.
2A57.2A133.2A14.5A$113.2A5.A.A49.2A5.A.A49.2A5.A.A49.2A5.A.A49.2A5.A.
A133.A13.A$113.2A7.A49.2A7.A49.2A7.A49.2A7.A49.2A7.A133.A.A12.3A$122.
2A57.2A57.2A57.2A57.2A133.2A15.A$507.4A$109.A58.A17.2A39.A17.2A39.A
58.A156.2A3.A3.2A$108.A.A.2A53.A.A.2A14.A38.A.A.2A14.A38.A.A.2A53.A.A
.2A152.2A4.3A2.A$108.A.A.A.A52.A.A.A.A10.3A39.A.A.A.A10.3A39.A.A.A.A
52.A.A.A.A159.A.2A$105.2A.A.A.A.A2.A46.2A.A.A.A.A2.A7.A38.2A.A.A.A.A
2.A7.A38.2A.A.A.A.A2.A46.2A.A.A.A.A2.A156.A$105.A2.A2.2A.4A46.A2.A2.
2A.4A46.A2.A2.2A.4A46.A2.A2.2A.4A46.A2.A2.2A.4A155.2A$107.2A4.A52.2A
4.A52.2A4.A52.2A4.A52.2A4.A$113.A.A56.A.A56.A.A56.A.A56.A.A$114.2A57.
2A57.2A57.2A57.2A149.2A$501.A$502.3A$504.A7$135.2A57.2A57.2A57.2A57.
2A$135.2A57.2A57.2A57.2A57.2A$126.2A57.2A57.2A57.2A57.2A$126.A2.A55.A
2.A55.A2.A55.A2.A55.A2.A$122.2A4.2A51.2A4.2A51.2A4.2A51.2A4.2A51.2A4.
2A$123.A20.2A36.A20.2A36.A20.2A36.A20.2A36.A20.2A$123.A.A18.A37.A.A
18.A37.A.A18.A37.A.A18.A37.A.A18.A$113.A10.2A16.A.A27.A10.2A16.A.A27.
A10.2A16.A.A27.A10.2A16.A.A27.A10.2A16.A.A$111.3A28.2A26.3A28.2A26.3A
28.2A26.3A28.2A26.3A28.2A$110.A58.A58.A58.A58.A$110.2A57.2A57.2A57.2A
57.2A$95.2A57.2A57.2A57.2A57.2A$96.A58.A58.A58.A58.A$96.A.2A55.A.2A
55.A.2A55.A.2A55.A.2A$97.A2.A55.A2.A55.A2.A55.A2.A55.A2.A$98.2A57.2A
57.2A57.2A57.2A$113.2A57.2A57.2A57.2A57.2A98.2A$113.2A57.2A57.2A57.2A
57.2A98.2A134.A9.A$585.3A5.3A$136.2A57.2A57.2A57.2A57.2A214.A3.A$136.
2A2.2A53.2A2.2A53.2A2.2A53.2A2.2A53.2A2.2A209.2A3.2A$122.A3.2A12.A.A
38.A3.2A12.A.A38.A3.2A12.A.A38.A3.2A12.A.A38.A3.2A12.A.A96.A122.A$
121.A.A3.A14.A37.A.A3.A14.A37.A.A3.A14.A37.A.A3.A14.A37.A.A3.A14.A56.
2A37.A.A119.3A$120.A.A3.A15.2A35.A.A3.A15.2A35.A.A3.A15.2A35.A.A3.A
15.2A35.A.A3.A15.2A56.A37.A.A118.A$116.2A.A.A3.A49.2A.A.A3.A49.2A.A.A
3.A49.2A.A.A3.A49.2A.A.A3.A74.A.A34.2A.2A117.2A$116.2A.A2.4A.A47.2A.A
2.4A.A47.2A.A2.4A.A47.2A.A2.4A.A47.2A.A2.4A.A62.A10.2A33.A2.A2.A$120.
A.A3.A.A50.A.A3.A.A50.A.A3.A.A50.A.A3.A.A50.A.A3.A.A59.3A44.A.A.A.A.A
$116.2A.2A2.A2.A.A46.2A.2A2.A2.A.A46.2A.2A2.A2.A.A46.2A.2A2.A2.A.A46.
2A.2A2.A2.A.A58.A48.A.A.A.A$117.A.A2.2A3.A48.A.A2.2A3.A48.A.A2.2A3.A
48.A.A2.2A3.A48.A.A2.2A3.A59.2A49.A.A105.2A$105.2A10.A.A44.2A10.A.A
44.2A10.A.A44.2A10.A.A44.2A10.A.A52.2A64.A2.A103.A.A$105.2A11.A45.2A
11.A45.2A11.A45.2A11.A45.2A11.A54.A65.2A104.A$409.A.2A167.2A$410.A2.A
$411.2A61.2A$426.2A46.2A$426.2A177.2A$600.2A2.A2.A$449.2A149.A.A2.2A$
449.2A2.2A130.2A16.2A$435.A3.2A12.A.A130.A17.A$434.A.A3.A14.A127.3A
15.A2.A.2A$433.A.A3.A15.2A126.A16.A.A.2A.A$429.2A.A.A3.A162.A.A$429.
2A.A2.4A.A161.A2.2A$433.A.A3.A.A161.2A.3A$429.2A.2A2.A2.A.A167.A$430.
A.A2.2A3.A153.3A6.2A.3A$418.2A10.A.A160.A2.A6.2A.A$418.2A11.A166.A$
592.A$586.2A5.A4.A$587.A10.A$587.A.A5.4A$588.2A8.A4$608.2A$608.2A5$
593.A$592.A.A$592.A.A$593.A$590.3A$590.A32$540.A$538.3A$537.A$537.2A
7$527.2A$526.A.A5.2A$526.A7.2A$525.2A2$539.A$535.2A.A.A$534.A.A.A.A$
531.A2.A.A.A.A.2A$531.4A.2A2.A2.A$535.A4.2A$533.A.A$533.2A!

chris_c
Posts: 966
Joined: June 28th, 2014, 7:15 am

Re: Guns with bounding box O(log(period))

Post by chris_c » December 26th, 2017, 4:31 pm

dvgrn wrote: This certainly doesn't prove anything, but the extension seems to work fine for a random-sample period 2,066,954,351 gun -- and as a sanity check, the glider insertion that happens at T=2066952952 places the inserted glider exactly the same number of ticks behind the clock glider, as happens in the p8765 gun:
Thanks for doing this check. I also think it is important that there can be no collisions where the gliders cross as shown in this example:

Code: Select all

#gliders safely pass each other at approx. gen 4700
x = 244, y = 205, rule = B3/S23
85bo58bo$83b3o56b3o$82bo58bo$75bo6b2o50bo6b2o$74bobo56bobo$75bo58bo2$
80b2o$80b2o5b2o57b2o$87b2o49b2o6b2o$138b2o2$70b2o57b2o$70b2o57b2o2$85b
2o57b2o$85bobo56bobo$87bo58bo$87b2o57b2o6b2o$155bo$153bo5b2o$153b2o5bo
$160bob2o$153b2o2b2obo2bo$153b2o3bob2o$158bo$157b2o$152bo$151bobo9b2o$
84b2o66bo11bo$84b2o78bob2o$156b2o4b3o2bo$156b2o3bo3b2o$161b4o$147b2o
15bo$109bo36bobo12b3o$107b3o36bo13bo$106bo38b2o14b5o$106b2o57bo$69b2o
92bo$69b2o92b2o5$96b2o$95bobo5b2o$95bo7b2o$94b2o2$89b2o17bo$89bo14b2ob
obo$90b3o10bobobobo$92bo7bo2bobobobob2o$100b4ob2o2bo2bo$104bo4b2o$102b
obo$102b2o10$81b2o$81b2o$90b2o$88bo2bo$88b2o4b2o$72b2o20bo$73bo18bobo$
73bobo16b2o10bo$74b2o28b3o$107bo$3b2o101b2o$4bo116b2o$2bo118bo$2b5o14b
2o95b2obo$7bo13bo95bo2bo$4b3o12bobo96b2o$3bo15b2o82b2o$3b4o96b2o$b2o3b
o3b2o$o2b3o4b2o68b2o$2obo72b2o2b2o$3bo71bobo12b2o3bo$3b2o70bo14bo3bobo
$74b2o15bo3bobo$92bo3bobob2o$11b2o77bob4o2bob2o$12bo76bobo3bobo$9b3o
77bobo2bo2b2ob2o$9bo80bo3b2o2bobo$98bobo10b2o$99bo11b2o10$9bo$9b3o$12b
o$11b2o3$3b2o$3bo$2obo$o2b3o4b2o$b2o3bo3b2o$3b4o$3bo15b2o$4b3o12bobo$
7bo13bo$2b5o14b2o$2bo$4bo$3b2o$145b2o11bo$145b2o10bobo$157bobo2b2o3bo$
156b2ob2o2bo2bobo$160bobo3bobo$156b2obo2b4obo$156b2obobo3bo$160bobo3bo
$161bobo3bo$162bo3b2o47b2o$181bo33b2o$179b3o13bo$178bo16b3o$153b2o23b
2o18bo$148b3o2b2o42b2o$138b2o10bo83b2o$137bo2bo8bo83bobo$136bob2o87b2o
4bo$136bo88bo2bo2b2ob4o$135b2o88b2obobobobo2bo$150b2o76bobobobo$150bo
36b2o39bobob2o$151b3o33b2o40bo$153bo10b2o$163bobo59b2o15b2o$163bo61b2o
6b2o7bo$162b2o10b2o57b2o5bobo$175bo64b2o$172b3o9b2o$172bo11bo19b2o$
155b2o25bobo18bobo$155bo19b2o5b2o19bo$153bobo18bobo25b2o$153b2o19bo11b
o$173b2o9b3o43b2o$183bo47bo$183b2o10b2o31b3o$132b2o61bo32bo$132b2o59bo
bo$193b2o10bo$170b2o33b3o$170b2o36bo$207b2o$222b2o$222bo$219b2obo$218b
o2bo$219b2o$160b2o42b2o$160bo18b2o23b2o$161b3o16bo$144b2o17bo13b3o$
144bo32bo$145b3o43b2o3bo$147bo43bo3bobo$192bo3bobo$120bo72bo3bobob2o$
120b3o7bo60bob4o2bob2o$123bo6bobo57bobo3bobo$122b2o6b2o58bobo2bo2b2ob
2o$191bo3b2o2bobo$199bobo10b2o$200bo11b2o4$132b2o$125b2o5bobo$125b2o7b
o$134b2o2$121bo$120bobob2o$120bobobobo$117b2obobobobo2bo$117bo2bo2b2ob
4o$119b2o4bo$125bobo$126b2o!
dvgrn wrote: The math seems pretty simple for a structure with any fixed number of 180-degree bends, so I guess it's just a matter of picking a reasonable number of 180-degree bends first, and then picking the right number of semi-Snarks based on the total signal path, setting the blocks in the semi-Snarks appropriately, and adjusting the final reflector in the southeast.
Heh. I don't do any of those things except for adjusting the reflectors in the south east. The total length of the signal path is (almost) irrelevant. As I said before, the period of the gun is 616 * N + delay where N is the number of gliders that are killed by the chain of semi-snarks. N is determined by the number of semi-snarks and by the presence/absence of the the Herschel edge-shooters. The only way the path length is relevant (i.e. the time it takes a glider to make a full loop when all of the semi-snarks are in the "ON" position) is that I need to ensure that it is not bigger than the designed period: bad things would happen if more than one glider made it through the bank of semi-snarks in a single cycle. Apart from that restriction you could lengthen the semi-snark loop by any multiple of 616 ticks and still get a gun of the same period.

Setting the blocks correctly in the semi-snarks is also not something I do myself. I just draw the gun with all the semi-snarks set to ON and then send the glider around the loop once so that the displayed pattern is a periodic gun instead of just a predecessor of a periodic gun.

Here is the updated script. It asks for the gun period, the maximum number of semi-snarks in the first row and the number of semi-snarks to add in subsequent rows. With the default values of 5 and 1 the semi-snarks will form a triangular array whose side lengths grow like sqrt(log(period)). Note that I only bother moving to the next row if at least two more semi-snarks are required so the number of semi-snarks in a row can be more than the user might expect.

Code: Select all

import golly as g

semisnark = g.parse("3bo$3b3o$6bo$5b2o6bo$12bobo$13bo3$2o$2o6b2o$8b2o2$17b2o$17b2o2$2b2o$bobo$bo$2o!")

snarksyringe = g.parse("13bo$13b3o$16bo$15b2o7$25b2o$18b2o5bobo$18b2o7bo$27b2o2$14bo$13bobob2o$13bobobobo$10b2obobobobo2bo$10bo2bo2b2ob4o$12b2o4bo$18bobo$19b2o10$40b2o$40b2o$31b2o$31bo2bo$27b2o4b2o$28bo20b2o$28bobo18bo$18bo10b2o16bobo$16b3o28b2o$15bo$15b2o$2o$bo$bob2o$2bo2bo$3b2o$18b2o$18b2o2$41b2o$41b2o2b2o$27bo3b2o12bobo$26bobo3bo14bo$25bobo3bo15b2o$21b2obobo3bo$21b2obo2b4obo$25bobo3bobo$21b2ob2o2bo2bobo$22bobo2b2o3bo$10b2o10bobo$10b2o11bo!", 25, 35)

twosnarks = g.parse("3b2o$4bo$2bo$2b5o14b2o$7bo13bo$4b3o12bobo$3bo15b2o$3b4o$b2o3bo3b2o$o2b3o4b2o$2obo$3bo$3b2o3$11b2o$12bo$9b3o$9bo12$9bo$9b3o$12bo$11b2o3$3b2o$3bo$2obo$o2b3o4b2o$b2o3bo3b2o$3b4o$3bo15b2o$4b3o12bobo$7bo13bo$2b5o14b2o$2bo$4bo$3b2o!", -88, -76)

h_to_g = [g.parse("7b2o$7b2o9$22b2o$22b2o10$2b2o$3bo$3o$o!", 55, 29),
          g.parse("b2o$o2bo$b2o!", 61, 39)]

right_side = g.parse("13b2o11bo$13b2o10bobo$25bobo2b2o3bo$24b2ob2o2bo2bobo$28bobo3bobo$24b2obo2b4obo$24b2obobo3bo$28bobo3bo$29bobo3bo$30bo3b2o47b2o$49bo33b2o$47b3o13bo$46bo16b3o$21b2o23b2o18bo$21b2o42b2o$6b2o94b2o$5bo2bo92bobo$4bob2o87b2o4bo$4bo88bo2bo2b2ob4o$3b2o88b2obobobobo2bo$18b2o76bobobobo$18bo36b2o39bobob2o$19b3o33b2o40bo$21bo10b2o$31bobo59b2o15b2o$31bo61b2o6b2o7bo$30b2o10b2o57b2o5bobo$43bo64b2o$40b3o9b2o$40bo11bo19b2o$23b2o25bobo18bobo$23bo19b2o5b2o19bo$21bobo18bobo25b2o$21b2o19bo11bo$41b2o9b3o43b2o$51bo47bo$51b2o10b2o31b3o$2o61bo32bo$2o59bobo$61b2o10bo$38b2o33b3o$38b2o36bo$75b2o$90b2o$90bo$87b2obo$86bo2bo$87b2o29b3o$28b2o42b2o44bo$28bo18b2o23b2o45bo$29b3o16bo$12b2o17bo13b3o$12bo32bo$13b3o43b2o3bo$15bo43bo3bobo$60bo3bobo$61bo3bobob2o$59bob4o2bob2o$58bobo3bobo$58bobo2bo2b2ob2o$59bo3b2o2bobo$67bobo10b2o$68bo11b2o24$130b2o$130bo$132bo$112b2o14b5o$113bo13bo$113bobo12b3o$114b2o15bo$128b4o$123b2o3bo3b2o$123b2o4b3o2bo$45b2o84bob2o$44bobo84bo$38b2o4bo85b2o$36bo2bo2b2ob4o$36b2obobobobo2bo$39bobobobo76b2o$39bobob2o77bo$40bo82b3o$125bo$53b2o$44b2o7bo$44b2o5bobo$51b2o7$41b2o$42bo$39b3o$39bo7$59b2o$59b2o$70b2o$70b2o4$96bo$56b2o37bobo$57bo37bobo$57bobo34b2ob2o$47bo10b2o33bo2bo2bo$45b3o44bobobobobo$44bo48bobobobo$44b2o49bobo$29b2o64bo2bo$30bo65b2o$30bob2o$31bo2bo$32b2o61b2o$47b2o46b2o$47b2o2$70b2o$70b2o2b2o$56bo3b2o12bobo$55bobo3bo14bo$54bobo3bo15b2o$50b2obobo3bo$50b2obo2b4obo$54bobo3bobo$50b2ob2o2bo2bobo$51bobo2b2o3bo$39b2o10bobo$39b2o11bo!", 73, -44)

left_side = g.parse("12b2o$12bo$7b2o5bo$7bo5b2o$4b2obo$4bo2bob2o2b2o$6b2obo3b2o$9bo$9b2o2$3b2o$3bo$2obo$o2b3o4b2o$b2o3bo3b2o$3b4o$3bo15b2o$4b3o12bobo$7bo13bo$2b5o14b2o$2bo$4bo$3b2o!", 39, 18)

# cells, delay, in_lane, out_lane
reflectors = [
    (g.parse("48b2o$37bo11bo$37b3o9bobo$40bo9b2o$39b2o6$67b2o$67bobo$69bo$69b2o2$27b2o$28bo29b2o$28bobo27b2o$18bo10b2o$16b3o$15bo$15b2o$2o$bo$bob2o$2bo2bo$3b2o47b2o$18b2o32bo$18b2o22b2o3b2o4b3o$40bo2bo4bo6bo$40b3o4bo$47b2o$27bo3b2o7b2obo$26bobo3bo7bob2o$25bobo3bo$21b2obobo3bo$21b2obo2b4obo$25bobo3bobo$21b2ob2o2bo2bobo$22bobo2b2o3bo$10b2o10bobo$10b2o11bo!"), 72, -12, 58),
    (g.parse("37b2o$38bo$37bo$37b2o2b2o$40bobo$35b4obo$35bo2bob2o5$27b2o$28bo20b2o$28bobo18bo$18bo10b2o16bobo$16b3o28b2o$15bo$15b2o$2o$bo$bob2o$2bo2bo$3b2o$18b2o$18b2o4$27bo3b2o$26bobo3bo$25bobo3bo$21b2obobo3bo$21b2obo2b4obo5b2o$25bobo3bobo5bo$21b2ob2o2bo2bobo2b3o$22bobo2b2o3bo3bo$10b2o10bobo$10b2o11bo!"), 45, -8, 54),
    (g.parse("42bo$42b3o$45bo$44b2o6$37bo$37b3o$28bo11bo$28b3o8b2o14bo$31bo22bobo$18bo11b2o23bo$16b3o$15bo$15b2o$2o50b2o$bo50bobo$bob2o49bo$2bo2bo48b2o$3b2o45b2o$18b2o30bo$18b2o23b2o6b3o$43bo9bo$44b3o$46bo$27bo3b2o$26bobo3bo$25bobo3bo$21b2obobo3bo$21b2obo2b4obo$25bobo3bobo$21b2ob2o2bo2bobo$22bobo2b2o3bo$10b2o10bobo$10b2o11bo!"), 54, -8, 62),
    (g.parse("37bo$37b3o$40bo$27b2o10b2o$28bo$28bobo19b2o$18bo10b2o19bo$16b3o29bobo$15bo32b2o$15b2o$2o$bo$bob2o43b2o$2bo2bo42bobo$3b2o45bo$18b2o24b2o4b2o$18b2o24bobo$46bo$46b2o2$27bo3b2o$26bobo3bo$25bobo3bo$21b2obobo3bo$21b2obo2b4obo$25bobo3bobo$21b2ob2o2bo2bobo$22bobo2b2o3bo$10b2o10bobo$10b2o11bo!"), 19, 0, 50)
]

snark = (g.parse("15bo$13b3o$12bo$12b2o7$2b2o$bobo5b2o$bo7b2o$2o2$14bo$10b2obobo$9bobobobo$6bo2bobobobob2o$6b4ob2o2bo2bo$10bo4b2o$8bobo$8b2o!"), 4, 3, 24)

period = int(g.getstring("Enter period:"))
N = (period - 1087) // 616
delay = period - 616 * N

if N > 0:
    g.show("Gun of period %d = %d * 616 + %d" % (period, N, delay))
else:
    g.warn("Period too small")
    g.exit()


direction = 1
inrow = x = y = 0
track_length = 616 + delay
maxinrow = int(g.getstring("Enter max units on first row:", "5"))
step = int(g.getstring("Enter number of extra units on next row:", "1"))

g.new('')

g.putcells(right_side)

while N > 1:
    inrow += 1
    g.putcells(snarksyringe, x, y, direction)
    g.putcells(h_to_g[N % 2], x, y, direction)
    if inrow >= maxinrow and N > 7:
        g.putcells(twosnarks, x, y, direction)
        maxinrow += step
        inrow = 0
        y -= 153
        direction = -direction
        track_length += 2 * 616
    g.putcells(semisnark, x, y, direction)
    x -= 59 * direction
    track_length += 616
    N //= 2

g.putcells(left_side, x, y, direction)

assert(track_length <= period)

t = delay + 200 - snark[1]
r = reflectors[t % 4]

assert(t % 4 == r[1] % 4)

in_lane = 55
out_lane = (t - r[1]) // 4

r1, r2 = (r, snark) if (out_lane + in_lane + snark[2] + snark[3]) % 2 else (snark, r)

shift1 = in_lane - r1[2]
shift2 = out_lane - r1[3]

assert(shift1 % 2 == shift2 % 2)

g.putcells(r1[0], (shift2 + shift1) // 2, (shift2 - shift1) // 2)

in_lane = -out_lane + 1
out_lane = 189

shift1 = in_lane - r2[2]
shift2 = out_lane - r2[3]

assert(shift1 % 2 == shift2 % 2)

g.putcells(r2[0], (shift2 - shift1) // 2, -(shift2 + shift1) // 2, 0, 1, -1, 0)

# Run the trigger glider once around the loop so that the displayed
# pattern is a periodic gun not a predecessor of a periodic gun.
g.run(track_length)
g.setgen("0")
g.fit()

Post Reply