Smaller Pi Calculator Challenge

For discussion of specific patterns or specific families of patterns, both newly-discovered and well-known.
User avatar
dvgrn
Moderator
Posts: 7848
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Smaller Pi Calculator Challenge

Post by dvgrn » November 8th, 2019, 2:14 pm

This is related to the calculator reverse engineering thread, but has to do with the separate project of (re)writing a compiler for arbitrary APGsembly code.

Now, big strings of Silver reflectors and complicated 223x106 G-to-MWSS converters and so on were what was was available in 2010, when the pi and phi calculators and Osqrtlogt showed up. But looking at all this anachronistic circuitry has made me curious about what a pi calculator would look like if it were built in 2019.

I'll try posting a few "original" and "replacement" circuits, each pair in its own post, and see if anyone wants to make a move or two in the Pointless Optimization Game.

First, here's the splitter that's used to program the computer, producing a NW-traveling action signal wherever it's present on the NE/SW glider lane representing the computer's current state.

Code: Select all

x = 183, y = 176, rule = LifeHistory
174.A3B$173.BABA$172.2B2A$171.4B$170.4B$161.B7.4B$75.10B76.B6.4B$75.
3B83.B5.4B$75.4B82.B4.4B$75.5B81.B3.4B$75.B.4B80.B2.4B$75.B2.4B79.B.
4B$75.B3.4B78.5B$75.B4.4B77.4B$75.B5.4B75.11B$75.B6.4B73.4B$83.4B71.
4B$84.4B69.4B$85.4B67.4B$86.4B65.4B$87.4B63.4B$88.4B61.4B$89.4B59.4B$
90.4B57.4B$91.4B55.4B$92.4B53.4B$93.4B51.4B$94.4B49.4B$95.4B47.4B$96.
4B45.4B$97.4B43.4B$98.4B41.4B$99.4B39.4B$100.4B37.4B$101.4B21.A13.4B$
102.4B20.3A10.4B$103.4B22.A8.4B$104.4B20.2AB6.4B$105.4B19.5B3.4B3.2A$
106.4B20.3B2.4B4.A$107.4B19.8B2.BA.A$108.4B16.2BA8B.B2A$109.4B13.3BAB
A9B$110.4B12.3BABA10B$111.4B9.2AB.2BA10B$112.4B7.A.AB.11B.B2A$113.4B
6.A6.7B3.BA.A$114.4B4.2A5.7B7.A$115.4B11.6B7.2A$116.4B9.7B$117.4B7.8B
$118.4B5.9B$119.4B3.4B.5B$120.4B.4B.7B$121.7B2.2B2A3B$122.5B4.B2A2B$
122.5B3.6B$121.7B2.6B$120.4B.4B.7B$119.4B3.4B.6B$118.4B5.9B$117.4B7.
8B$116.4B9.8B$115.4B11.7B$48.A65.4B13.6B7.2A$46.3A64.4B14.7B6.A$20.2A
23.A66.4B15.7B3.BA.A$21.A23.2A64.4B16.8B2.B2A$21.A.AB18.4B63.4B17.11B
$22.2AB.2A14.3B20.A43.4B18.11B$24.2B2AB12.4B.3B.B12.3A42.4B19.11B$24.
4B6.18B10.A44.4B21.11B$24.6B3.16B2A2B5.B3.2A42.4B22.2B.8B$25.6B2.16B
2A2B3.8B41.4B22.13B$25.7B.20B.8B21.A20.4B23.14B$24.38B12.2A5.3A19.4B
22.12B.4B9.2A$23.20B2.2B.15B10.B2AB3.A14.A6.4B21.13B3.4B8.A$22.18B8.
17B8.3B4.2A11.3A5.4B21.17B.4B4.BA.A$22.16B11.19B2.2B2.B2.5B10.A7.4B
22.18B.4B3.B2A$23.14B12.31B12.2A5.4B21.2AB.13B2A2B.7B$22.16B12.7B.21B
2A9.4B4.4B21.A.AB3.4B.6B2AB3.6B$20.2AB.14B11.25B2A3B2A8.3B5.4B22.A8.B
4.8B3.4B$19.A.AB.6B3.3B.B2A8.26B2A2B.B8.4B4.4B22.2A15.6B2.6B$19.A4.6B
7.BA.A8.8B2.19B9.4B4.4B39.7B.8B$18.2A4.7B9.A8.6B11.10B10.4B4.4B40.6B.
4B2.4B$24.8B2.2A4.2A8.5B12.9B9.4B4.4B42.9B4.4B$22.12BA.A13.4B14.9B7.
4B4.4B43.8B6.4B$22.11B3.A13.4B15.7B7.4B4.4B43.8B8.4B$22.5B2A4B3.2A10.
2AB.B17.6B6.4B4.4B35.A8.7B10.4B$22.5B2A3B15.A.AB18.6B6.4B4.4B36.3A6.
6B12.4B$22.10B15.A20.8B4.4B4.4B40.A4.7B13.4B$22.9B15.2A21.8B2.4B4.4B
19.A20.2A4.7B14.4B$22.9B38.13B4.4B.3B.B12.3A15.A4.4B.8B15.4B$23.8B38.
28B10.A18.3A4.11B16.4B$22.8B39.25B2A2B5.B3.2A20.A2.12B17.4B$23.6B40.
25B2A2B3.8B19.2A2.12B18.4B$17.2A4.6B39.30B.8B21.B3.11B20.4B$18.A4.6B
37.41B19.3B4.7B24.4B$18.A.AB.7B36.22B2.2B.15B16.6B3.8B24.4B$19.2AB2.
6B35.20B8.17B11.10B2.9B24.12B$21.8B36.21B8.19B2.2B3.23B24.4B$21.8B36.
17B.4B7.31B2A16B.B23.4B$22.8B34.19B.4B7.7B.22B2A17B2A22.5B$23.7B8.A
23.21B2.3B6.50B2A22.B.4B$24.6B6.3A23.21B3.4B3.52B23.B2.4B$24.7B4.A25.
20B7.2A4.8B2.36B2.5B21.B3.4B$24.7B4.2A25.20B6.A5.6B11.4B.13B5.5B6.2A
21.B4.4B$24.8B.4B26.19B7.3A3.5B12.3B5.B.7B3.3B.2B7.A22.B5.4B$24.11B
28.18B10.A3.4B14.4B15.2A12.3A19.B6.4B$24.12B28.17B15.3B16.2A16.A14.A
27.4B$24.12B28.16B14.4B17.A14.3A44.4B$25.11B29.14B15.2A20.3A11.A47.4B
$28.7B31.13B16.A22.A60.4B$27.8B5.2A27.11B12.3A85.3B$26.8B6.A29.9B13.A
88.2B$27.8B2.BA.A29.7B105.B$26.10B.B2A31.4B$26.12B34.3B$26.12B35.4B$
24.2AB2.9B37.2A$23.A.AB2.8B38.A$23.A6.6B40.3A$22.2A5.6B43.A$30.5B$30.
7B$30.8B2.2A$28.12BA.A$28.11B3.A$28.5B2A4B3.2A$28.5B2A3B$28.10B$28.9B
$28.9B$29.8B$28.8B$29.6B$23.2A4.6B$24.A4.6B$24.A.AB.7B$25.2AB2.6B$27.
8B$27.8B$28.8B$29.7B8.A$30.6B6.3A$30.7B4.A$26.B3.7B4.2A$25.3B2.8B.4B$
25.4B.11B$25.4B.12B$22.20B$21.9B.11B$21.10B3.9B9.B$21.22B.2B5.4B$20.
27B2.7B$19.35B2A2B$18.35BA2BAB$17.37B2AB$16.4B.31B.4B$15.4B3.30B2.2B$
14.4B5.B2.3B.21B$13.4B9.4B3.11B4.B$12.4B10.B2AB4.8B5.3B$11.4B12.2A6.
6B6.B2AB$10.4B23.2B9.2A$9.4B23.2B$B7.4B23.B2AB$B6.4B25.2A$B5.4B$B4.4B
$B3.4B$B2.4B$B.4B$5B$4B$10B!
The only requirements for this circuit are
1) the SW output lane is the same as the SW input lane, so the input glider ends up at the same place if the circuit is removed (slightly different timing is allowed);
2) the NW output lane is transparent.

The best replacement I've come up with so far is this one:

Code: Select all

x = 106, y = 99, rule = LifeHistory
99.A3B$98.BABA$97.2B2A$96.4B$95.4B$86.B7.4B$86.B6.4B$86.B5.4B$86.B4.
4B$86.B3.4B$75.A10.B2.4B$75.3A8.B.4B$78.A7.5B$77.2A7.4B$77.5B3.11B$
79.3B2.4B$69.2A7.9B$69.A8.8B$66.2A.A.B3.10B$66.A2.3AB.2B2A7B$67.2A2.B
A3B2A7B$69.4A12B$69.A.2B3.7B.B2A3.2A$70.3AB2.7B.BA.A.A.A$73.A4.4B5.A.
A$68.5A5.4B5.A2.A$68.A10.4B5.A.AB$70.A9.4B5.A3B$69.2A10.4B6.4B$85.B5.
6B$85.2B4.7B$84.4B2.8B.4B.B$67.4B14.17B.B2A$86.18B2A$65.4B17.16B.2B$
86.5BD10B$10B53.4B19.6BD8B$4B80.2AB.2B3D7B$5B56.4B18.A.AB2.11B$B.4B
77.A5.10B3.2A$B2.4B52.4B19.2A5.2B2A6B3.A$B3.4B80.3B2A6B4.A$B4.4B48.4B
28.10B3.2A$B5.4B79.8B.B2A$B6.4B25.A18.4B29.7B3.B2AB2A$B7.4B24.3A49.6B
6.B.A$9.4B26.A49.8B2.2A3.A$10.4B24.2A10.A38.8B.A2.4A$11.4B23.5B6.A.A
36.8B.A.A.A$12.4B24.4B5.A.A27.A8.7B3.A2.A.2A$13.4B10.A11.6B3.2A.3A25.
3A6.6B7.A.A$14.4B9.3A9.6B4.B4.A27.A4.2B3D2B6.2A2.A$15.4B11.A8.7B.B2AB
3A6.A20.2A4.4BD2B3.A.A2.A.A$16.4B9.2A5.2B.6B2.B2A.A6.3A15.A4.4B.4B3DB
3.2A2.A.A$17.4B8.21B7.A18.3A4.11B8.A$18.4B9.17B5.B3.2A20.A2.12B$19.4B
7.2B2A15B2.8B19.2A2.12B$20.4B5.2BA2BA22B21.B3.11B$21.4B4.3B2A23B19.3B
4.7B$22.4B.9B3.19B16.6B3.8B$23.12B4.21B11.10B2.9B$24.10B4.25B2.2B3.
23B$25.9B3.4B4.14BD15B2A3BD12B.B$26.9B.4B6.6B.4BDBD15B2A2B2D13B2A$27.
7B.4B5.5B.B2.4B3D18B2D14B2A$28.10B6.2A7.4BD21BD15B$29.8B8.A8.26BD9B2.
5B$30.6B6.3A19.B.13B5.5B6.2A$31.4B7.A27.B.7B3.3B.2B7.A$30.6B46.2A12.
3A$29.8B28.2A16.A14.A$28.4B2.4B27.A14.3A$27.4B4.4B27.3A11.A$26.4B6.4B
28.A$25.4B8.4B$24.4B10.4B$23.4B12.4B$22.4B14.4B$21.4B16.4B$20.4B18.4B
$19.4B20.4B$18.4B22.4B$17.4B24.4B$9.B6.4B26.4B$9.B5.4B28.4B$9.B4.4B
30.12B$9.B3.4B32.4B$9.B2.4B34.4B$9.B.4B35.5B$9.5B36.B.4B$9.4B37.B2.4B
$9.3B38.B3.4B$9.10B31.B4.4B$50.B5.4B$50.B6.4B$58.4B$59.4B$60.4B$61.3B!
Let's say the bounding box is the optimization metric as usual -- though it should really be bounding diamond, probably, so that these things can be packed tighter together. Can anyone improve on 79x63, or on the diagonal packing rate? I think it's 54 cells NE/SW and 38 cells NW/SE.

... Probably a tighter packing or a faster time through the circuit won't really matter much at all, unless the next smaller power-of-two size is available. The old pi/phi circuitry was based on a spacing of 128 cells diagonally between items in the grid. It looks like it will be easy to reduce that spacing to 64 cells diagonally, and cut down the size of the computer circuitry by a factor of 4.

But unless there's a way to cut the 54 or 38 measurement all the way down to 32 somehow, it might be better to keep HashLife happier and stick with a strict 64-cell separation.

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

Re: Smaller Pi Calculator Challenge

Post by dvgrn » November 8th, 2019, 8:43 pm

The circuits encoding the jump to the next state just have to be simple 90-degree reflectors, with a transparent output lane (because multiple states sometimes jump to the same nextstate). The pi and phi calculators used Silver reflectors again, of course. I think a reasonable choice for those reflectors is either a Scorbie Splitter, when a color-changing turn is needed --

Code: Select all

#C CC Scorbie Splitter with second output suppressed
x = 94, y = 62, rule = LifeHistory
2B89.A$3B87.BABA$4B85.2B2A$.4B83.4B$2.4B81.4B$3.4B79.4B$4.4B69.B7.4B$
5.4B68.B6.4B$6.4B6.B60.B5.4B$7.4B5.B60.B4.4B$8.4B4.B60.B3.4B$9.4B3.B
60.B2.4B$10.4B2.B18.A41.B.4B$11.4B.B16.3A41.5B$12.5B15.A44.4B$13.4B
15.2A7.A34.11B$14.4B12.4B5.3A33.4B$7.12B9.4B6.A24.A10.4B$16.4B7.8B3.
2A23.3A7.4B$17.4B6.9B.3B4.B21.A5.4B$18.4B2.14B5.3B19.2A4.4B$19.20B3.
6B2.5B10.9B6.2A$20.19B2.7B2.7B10.6B7.A$21.36B.2B2.B3.6B5.2A.A$22.30BD
19B4.A2.A$23.27BDBD13BD6B3.B2A$23.24B2AB3D9B2A2BDBD9B$21.26B2ABD11B2A
2B2D9B$21.2AB.51B$21.BA3.26B2.22B$19.3A6.19B2.B5.20B$19.A9.19B8.19B$
28.21B8.17B$28.11B2.8B10.13B$28.11B2.5B2.B2A6.A.2A4.8B$26.2AB.9B3.4B
2.BA.A3.3AB2A6.6B$25.A.AB.8B13.A2.A4.B8.5B$25.A4.9B12.2A2.3A.2A9.B.B$
24.2A5.9B17.A.A9.3B$32.3B2.4B16.A.A9.B2AB$33.B4.4B16.A11.2A$39.4B$40.
4B$41.4B$42.4B$43.4B$44.4B$45.4B$46.4B$47.4B$48.4B$49.4B$50.4B6.B$51.
4B5.B$52.4B4.B$53.4B3.B$54.4B2.B$55.4B.B$56.5B$57.4B$58.3B$51.10B!
-- or this alternate transparent glider output, when a color-preserving turn is needed:

Code: Select all

x = 65, y = 79, rule = LifeHistory
63.A$62.A$61.B3A$60.4B$59.4B$58.4B$57.4B$48.B7.4B$48.B6.4B$48.B5.4B$
45.A2.B4.4B$43.3A2.B3.4B$42.A5.B2.4B$41.A.A4.B.4B$40.BA.A4.5B$2B37.3B
A5.4B$3B34.4B6.11B$4B31.6B5.4B$.4B29.7B4.4B$2.4B21.B.4B.8B2.4B$3.4B
19.2AB.17B$4.4B18.2A18B$5.4B18.2B.16B$6.4B6.B13.10BD5B$7.4B5.B14.8BD
6B$8.4B4.B15.7B3D2B.B2A$9.4B3.B15.11B2.BA.A$10.4B2.B16.10B5.A$11.4B.B
16.6B2A2B5.2A$12.5B16.6B2A3B$13.4B16.10B$14.4B11.A.2A10B$7.12B8.3AB2A
11B$16.4B6.A4.B2.10B$17.4B6.3A.2A.9B$18.4B7.A.A3.10B$19.4B6.A.A4.9B$
20.4B6.A6.9B$21.4B13.8B$22.4B12.2B3D3B$23.4B10.3BD5B$24.4B9.2B3D4B$
25.4B7.11B$26.4B7.2B2A3B$27.4B6.2B2A5B$28.4B.13B$29.18B$30.18B$31.16B
$31.15B$32.13B$32.12B$28.B.14B$27.17B$25.20B$24.21B$24.21B$26.19B$28.
18B$26.20B$24.A.2AB.17B$22.3AB2AB.18B$21.A4.B3.4B2.7B2.4B$22.3A.2A2.
3B5.3B5.4B$24.A.A2.AB8.3B5.4B$27.3AB7.4B6.4B$32.A4.B2A2B7.4B$29.4A5.
2A10.4B$29.A21.4B$30.A21.4B6.B$29.2A22.4B5.B$54.4B4.B$55.4B3.B$56.4B
2.B$57.4B.B$58.5B$59.4B$60.3B$53.10B!
These are just 29x63 and 29x61. The only diagonal that matters is the NW/SE one, and these both come in well under 32 cells, let alone 64 -- looks like it's 28 cells diagonally for the first one, and 21 cells diagonally for the second one.

Oddly enough, the only other circuit mechanism in the entire computer/program section of the circuitry is a couple of demultiplexers to hold the boats representing the next state, to be triggered by either a Z or NZ return glider. Here's what the old ones looked like, for a 128-cell diagonal offset:

Code: Select all

x = 683, y = 748, rule = LifeHistory
313.2A$313.2A9$298.2A$298.2A10$318.2A$318.A$319.3A$321.A47.A$367.3A$
366.A$366.2A8$330.A34.A$330.3A32.3A$333.A34.A$310.2A20.2A33.2A$310.2A
7.2A56.2A$319.A57.A$317.A.A55.A.A$317.2A4.2A44.2A4.2A$301.2A20.A44.A
2.A$302.A18.A.A45.2A$302.A.A16.2A34.2A$303.2A52.2A8$332.2A32.2A3.2A$
332.2A11.2A20.A3.A$345.A18.3A5.3A$309.2A35.3A15.A9.A$305.2A2.2A37.A$
304.A.A$304.A23.2A$303.2A23.A$329.3A$331.A3$250.A$250.3A$253.A$252.2A
$267.2A$267.A$265.A.A$254.A10.2A$253.A.A$235.2A16.A.A$236.A11.2A4.A$
236.A.A8.A.A15.2A$237.2A8.A17.A.A$246.2A19.A$267.2A6$256.2A$256.2A9$
268.2A$268.A$266.A.A$266.2A12$248.2A15.2A$247.A.A15.2A$247.A25.2A$
246.2A25.A$271.A.A$271.2A4$253.A$253.3A$256.A$234.2A19.2A$234.A15.A$
232.A.A15.3A$232.2A19.A$252.2A3$211.2A$211.2A2$249.2A$249.2A17.2A$
268.2A3$269.2A$269.A$256.2A12.3A$257.A14.A$254.3A$254.A2$221.2A$221.
2A5$87.5B$88.5B$89.5B213.A$90.5B212.3A$91.5B214.A23.2A$92.5B212.2A23.
A$93.5B234.A.A$94.5B191.A37.2A2.2A$95.5B164.A9.A15.3A35.2A$96.5B163.
3A5.3A18.A$97.5B165.A3.A20.2A11.2A$98.5B163.2A3.2A32.2A$99.5B$100.5B$
101.5B$102.5B$103.5B$104.5B$105.5B$106.5B169.2A52.2A$107.5B168.2A34.
2A16.A.A$108.5B155.2A45.A.A18.A$109.5B153.A2.A44.A20.2A$110.5B147.2A
4.2A44.2A4.2A$111.5B145.A.A55.A.A$112.5B144.A57.A$113.5B142.2A56.2A7.
2A$114.5B151.2A33.2A20.2A$115.5B150.A34.A$116.5B150.3A32.3A$117.5B
151.A34.A$118.5B$119.5B$120.5B$121.5B211.2A$122.5B210.A$123.5B207.A.A
$124.5B206.2A$125.5B$126.5B$127.5B$128.5B184.A$129.5B183.3A$130.5B
185.A$131.5B183.2A$132.5B$133.5B$134.5B$135.5B$136.5B$137.5B198.2A$
138.5B197.A$139.5B194.A.A$140.5B193.2A$141.5B$142.5B$143.5B$144.5B$
145.5B$146.5B$147.5B$148.5B$149.5B$150.5B$151.5B168.2A$152.5B167.2A$
153.5B$154.5B$155.5B$156.5B$157.5B$158.5B$159.5B$160.5B$161.5B$162.5B
$163.5B$164.5B$165.5B$166.5B$167.5B$168.5B$169.5B$170.5B$171.5B$172.
5B$173.5B$174.5B$175.5B$176.5B$177.5B$178.5B$179.5B$180.5B202.A$181.
5B199.3A$182.5B197.A$183.5B196.2A$184.5B180.2A$185.5B180.A$186.5B179.
A.A$187.5B179.2A10.A$188.5B189.A.A$189.5B188.A.A16.2A$190.5B188.A4.2A
11.A$191.5B175.2A15.A.A8.A.A$192.5B173.A.A17.A8.2A$193.5B172.A19.2A$
194.5B170.2A$195.5B$196.5B$197.5B$198.5B$199.5B$200.5B175.2A$201.5B
174.2A$202.5B$203.5B$204.5B$205.5B$206.5B$207.5B$208.5B$209.5B$210.5B
153.2A$211.5B153.A$212.5B152.A.A$213.5B152.2A$214.5B$215.5B$216.5B$
217.5B$218.5B$219.5B$220.5B$221.5B$222.5B$223.5B$224.5B$225.5B141.2A
15.2A$226.5B140.2A15.A.A$227.5B131.2A25.A$228.5B131.A25.2A$229.5B130.
A.A$230.5B130.2A181.A$231.5B311.A$232.5B309.B3A$233.5B307.4B$234.5B
145.A159.4B$235.5B142.3A150.B7.4B$236.5B140.A153.B6.4B$237.5B139.2A
19.2A131.B5.4B$238.5B144.A15.A131.B4.4B$239.5B141.3A15.A.A129.B3.4B$
240.5B139.A19.2A129.B2.4B$241.5B138.2A149.B.4B$242.5B288.5B$243.5B
287.4B$244.5B176.2A107.11B$245.5B175.2A106.4B$246.5B281.4B$247.5B135.
2A142.4B$248.5B115.2A17.2A141.4B$249.5B114.2A159.4B$250.5B273.4B$251.
5B271.4B$B251.5B110.2A157.4B$2B251.5B110.A156.4B$3B251.5B106.3A12.2A
142.4B$4B251.5B105.A14.A142.4B$5B251.5B120.3A138.4B$.5B251.5B121.A
137.4B$2.5B251.5B243.A13.4B$3.5B251.5B151.2A89.3A10.4B$4.5B251.5B150.
2A92.A8.4B$5.5B251.5B242.2AB6.4B$6.5B251.5B241.5B3.4B3.2A$7.5B251.5B
242.3B2.4B4.A$8.5B251.5B241.8B2.BA.A$9.5B251.5B238.2BA8B.B2A$10.5B
251.5B235.3BABA9B$11.5B98.A152.5B98.A120.2A13.3BABA10B$12.5B97.3A151.
5B97.3A119.A11.2AB.2BA10B$13.5B99.A151.5B99.A118.A.AB7.A.AB.11B.B2A$
14.5B97.2A152.5B97.2A119.2AB7.A6.7B3.BA.A$15.5B111.2A138.5B111.2A106.
3B4.2A5.7B7.A$16.5B110.A140.5B110.A107.4B11.6B7.2A$17.5B107.A.A141.5B
107.A.A108.4B9.7B$18.5B95.A10.2A143.5B95.A10.2A110.4B7.8B$19.5B93.A.A
155.5B93.A.A122.4B5.9B$20.5B92.A.A156.5B92.A.A123.4B3.4B.5B$21.5B86.
2A4.A158.5B86.2A4.A125.4B.4B.7B$22.5B84.A.A15.2A147.5B84.A.A15.2A114.
7B2.2B2A3B$23.5B83.A17.A.A147.5B83.A17.A.A114.5B4.B2A2B$24.5B81.2A19.
A148.5B81.2A19.A114.5B3.6B$25.5B101.2A148.5B101.2A112.7B2.6B$26.5B
251.5B213.4B.4B.7B$27.5B74.2A175.5B74.2A135.4B3.4B.6B$28.5B74.A176.5B
74.A134.4B5.9B$29.5B73.A.A175.5B73.A.A131.4B7.8B$30.5B73.2A176.5B73.
2A130.4B9.8B$31.5B84.2A165.5B84.2A117.4B11.7B$32.5B83.2A166.5B83.2A
116.4B13.6B7.2A$33.5B251.5B199.4B14.7B6.A$34.5B251.5B197.4B15.7B3.BA.
A$35.5B251.5B195.4B16.8B2.B2A$36.5B251.5B193.4B17.11B$37.5B251.5B191.
4B18.11B$38.5B251.5B189.4B19.11B$39.5B251.5B187.4B21.11B$40.5B251.5B
185.4B22.2B.7B$41.5B86.2A163.5B86.2A95.4B22.11B$42.5B13.A71.A165.5B
13.A71.A95.4B23.10B$43.5B10.3A69.A.A166.5B10.3A69.A.A94.4B22.12B$44.
5B8.A72.2A168.5B8.A72.2A94.4B21.13B$45.5B7.2A242.5B7.2A166.4B21.17B$
46.5B12.A238.5B12.A160.4B22.18B$47.5B9.3A239.5B9.3A159.4B21.2AB.13B2A
2B$48.5B7.A243.5B7.A161.4B21.A.AB3.4B.6B2AB$49.5B6.2A243.5B6.2A159.4B
22.A8.B4.8B4.2A$50.5B251.5B165.4B22.2A15.6B4.A$51.5B251.5B163.4B39.7B
.BA.A$52.5B251.5B162.4B39.6B2.B2A$53.5B251.5B160.5B40.8B$54.5B251.5B
156.9B39.8B$55.5B251.5B155.9B38.8B$56.5B51.2A15.2A181.5B51.2A15.2A84.
9B29.A8.7B$57.5B49.A.A15.2A182.5B49.A.A15.2A84.10B28.3A6.6B$58.5B48.A
25.2A175.5B48.A25.2A75.12B30.A4.7B$59.5B46.2A25.A177.5B46.2A25.A75.
13B8.2A19.2A4.7B$60.5B70.A.A178.5B70.A.A76.11B9.A15.A4.4B.8B$61.5B69.
2A180.5B69.2A78.12B4.BA.A15.3A4.11B$62.5B251.5B148.15B.B2A19.A2.12B$
50.2A11.5B238.2A11.5B147.17B20.2A2.12B$51.A12.5B238.A12.5B146.17B20.B
3.11B$48.3A14.5B47.A186.3A14.5B47.A94.B.17B19.3B4.7B$48.A17.5B46.3A
184.A17.5B46.3A91.2A19B16.6B3.8B$67.5B48.A202.5B48.A90.2AB.19B11.10B
2.9B$68.5B25.A20.2A203.5B25.A20.2A91.B4.20B2.2B3.23B$69.5B22.3A15.A
210.5B22.3A15.A102.32B2A16B.B$70.5B20.A18.3A209.5B20.A18.3A100.9B.22B
2A17B2A$71.5B6.2A11.2A20.A209.5B6.2A11.2A20.A100.7B2.41B2A$72.5B5.2A
32.2A210.5B5.2A32.2A100.7B2.42B$73.5B251.5B140.6B4.36B2.5B$74.5B251.
5B139.7B10.4B.13B5.5B6.2A$75.5B251.5B138.6B12.4B4.B.7B3.3B.2B7.A$76.
5B251.5B136.7B13.4B15.2A12.3A$77.5B251.5B136.6B14.4B15.A14.A$51.2A25.
5B30.2A192.2A25.5B30.2A104.5B15.4B11.3A$51.2A26.5B29.2A17.2A173.2A26.
5B29.2A17.2A85.6B15.4B10.A$57.2A21.5B47.2A179.2A21.5B47.2A87.4B16.4B$
57.2A22.5B227.2A22.5B134.B2A2B17.4B$82.5B251.5B134.2A20.4B$83.5B45.2A
204.5B45.2A109.4B$55.2A27.5B44.A177.2A27.5B44.A111.4B$55.2A5.2A21.5B
30.2A12.3A174.2A5.2A21.5B30.2A12.3A109.4B$62.2A22.5B12.2A16.A14.A181.
2A22.5B12.2A16.A14.A110.4B$87.5B11.A14.3A222.5B11.A14.3A127.4B$88.5B
11.3A11.A225.5B11.3A11.A130.4B$89.5B12.A238.5B12.A143.4B53.A$83.2A5.
5B244.2A5.5B156.4B52.3A$83.2A6.5B243.2A6.5B156.4B54.A23.2A$92.5B251.
5B156.4B52.2A23.A$93.5B251.5B156.4B51.4B18.BA.A$94.5B251.5B156.4B31.A
20.3B14.2A.B2A$95.5B251.5B156.4B4.A9.A15.3A12.B.3B.4B12.B2A2B$96.5B
251.5B156.4B3.3A5.3A18.A10.18B6.4B$97.5B251.5B156.4B5.A3.A20.2A3.B5.
2B2A16B3.6B$98.5B251.5B156.4B3.2A.B.2A19.8B3.2B2A16B2.6B$99.5B251.5B
156.4B2.7B21.8B.20B.7B$100.5B251.5B156.4B3.3B23.38B$55.30D16.5B154.
13D14.18D6.30D16.5B156.4B.5B21.15B.2B2.20B$55.30D17.5B153.13D14.18D6.
30D17.5B156.9B19.17B8.18B$55.30D18.5B152.14D13.18D6.30D18.5B156.9B6.
2B3.2B2.19B11.16B$55.5D20.5D19.5B158.7D21.5D11.5D20.5D19.5B156.42B12.
14B$55.5D19.6D20.5B157.8D20.5D11.5D19.6D20.5B156.32B.7B12.16B$55.5D
18.6D22.5B156.9D19.5D11.5D18.6D22.5B155.14B2A25B11.14B.B2A$55.5D18.6D
23.5B155.9D19.5D11.5D18.6D23.5B152.16B2A26B8.2AB.3B3.6B.BA.A$55.5D17.
6D25.5B154.10D18.5D11.5D17.6D25.5B151.4B2A27B2.8B8.A.AB7.6B4.A$55.5D
16.6D27.5B153.4D.5D18.5D11.5D16.6D27.5B149.4BA2BA7B.2B.3B.4B11.6B8.A
9.7B4.2A$55.5D16.6D28.5B152.4D.6D17.5D11.5D16.6D28.5B147.2AB2.B2A2B.B
.4B6.4B12.5B8.2A4.2A2.8B$55.5D15.6D30.5B151.4D2.6D16.5D11.5D15.6D30.
5B145.A.AB2.5B4.4B4.4B14.4B13.A.A12B$55.5D14.6D32.5B150.4D3.5D16.5D
11.5D14.6D32.5B144.A6.2B7.4B2.4B15.3B14.A3.11B$55.5D14.5D34.5B149.4D
3.6D15.5D11.5D14.5D34.5B142.2A6.4B6.8B17.4B11.2A3.4B2A5B$55.5D13.6D
35.5B148.4D4.5D15.5D11.5D13.6D35.5B151.2A7.6B20.2A17.3B2A5B$55.5D12.
6D37.5B147.4D4.6D14.5D11.5D12.6D37.5B150.A9.4B21.A18.10B$71.6D39.5B
146.4D5.5D14.5D27.6D39.5B150.3A5.6B21.3A16.9B$71.6D40.5B145.4D6.5D13.
5D27.6D40.5B6.B144.A4.8B22.A16.9B$70.6D42.5B144.4D6.6D12.5D26.6D42.5B
5.B148.4B2.4B38.8B$69.6D44.5B143.4D7.5D12.5D25.6D44.5B4.B147.4B4.4B
38.8B$69.6D45.5B142.4D7.6D11.5D25.6D45.5B3.B146.4B6.4B38.6B$68.6D47.
5B141.4D8.5D11.5D24.6D47.5B2.B145.4B8.4B37.6B4.2A$67.6D49.5B140.4D9.
5D10.5D23.6D49.5B.B144.4B10.4B36.6B4.A$67.5D51.5B139.4D9.6D9.5D23.5D
51.6B143.4B12.4B34.7B.BA.A$66.6D52.5B138.4D10.5D9.5D22.6D52.5B142.4B
14.4B33.6B2.B2A$65.6D54.5B137.4D10.6D8.5D21.6D54.5B140.4B16.4B33.8B$
65.5D56.5B136.4D11.5D8.5D21.5D49.12B138.4B18.4B32.8B$64.6D57.5B135.4D
12.5D7.5D20.6D57.5B136.4B20.4B30.8B$63.6D59.5B134.4D12.6D6.5D19.6D59.
5B134.4B22.4B20.A8.7B$62.6D61.5B133.4D13.5D6.5D18.6D61.5B132.4B24.4B
19.3A6.6B$62.6D62.5B132.4D13.6D5.5D18.6D62.5B130.4B26.4B21.A4.7B$61.
6D15.4D45.5B131.4D14.5D5.5D17.6D15.4D45.5B128.4B28.4B19.2A4.7B$60.6D
16.5D45.5B130.4D14.6D4.5D16.6D16.5D45.5B126.4B30.4B18.4B.8B$60.6D16.
5D46.5B129.4D15.6D3.5D16.6D16.5D46.5B124.4B32.4B19.11B$59.6D17.5D47.
5B128.4D16.5D3.5D15.6D17.5D47.5B122.4B34.4B17.12B$58.6D18.5D48.5B127.
4D16.6D2.5D14.6D18.5D48.5B120.4B36.4B16.12B$58.5D19.5D49.5B126.4D17.
5D2.5D14.5D19.5D49.5B118.4B38.4B15.11B$57.6D19.5D50.5B125.4D17.6D.5D
13.6D19.5D50.5B116.4B40.4B13.9B12.2A$56.6D20.5D51.5B124.4D18.11D12.6D
20.5D51.5B114.4B42.4B9.2B.10B11.A$55.6D21.5D52.5B123.4D19.10D11.6D21.
5D52.5B112.4B44.4B7.16B.B4.BA.A$55.6D21.5D53.5B122.4D19.10D11.6D21.5D
53.5B110.4B46.4B3.23B2.B2A$54.6D22.5D54.5B121.4D20.9D10.6D22.5D54.5B
108.4B48.32B$54.5D23.5D55.5B120.4D20.9D10.5D23.5D55.5B106.4B50.32B$
54.5D23.5D56.5B119.4D21.8D10.5D23.5D56.5B104.4B52.31B$54.33D57.5B113.
17D14.7D10.33D57.5B102.4B54.30B$54.33D58.5B112.18D13.7D10.33D58.5B
100.4B57.28B$54.33D59.5B111.17D15.6D10.33D59.5B98.4B59.17B5.B.4B$147.
5B251.5B96.4B60.14B11.4B$148.5B251.5B94.4B61.14B12.4B$149.5B251.5B92.
4B66.3B4.2B14.4B$150.5B251.5B90.4B68.B6.2B14.4B$151.5B251.5B88.4B75.B
2AB14.4B$152.5B251.5B86.4B77.2A16.4B$153.5B251.5B84.4B97.4B$154.5B
251.5B82.4B99.4B$155.5B251.5B80.4B101.4B$156.5B251.5B78.4B103.4B$157.
5B251.5B76.4B105.4B$158.5B251.5B74.4B107.4B$159.5B251.5B72.4B109.4B$
160.5B251.5B70.4B111.4B$161.5B251.5B68.4B113.4B$162.5B251.5B66.4B115.
4B$163.5B251.5B64.4B117.4B$164.5B251.5B62.4B119.4B6.B$165.5B251.5B60.
4B121.4B5.B$166.5B251.5B58.4B123.4B4.B$167.5B251.5B56.4B125.4B3.B$
168.5B251.5B54.4B127.4B2.B$169.5B251.5B52.4B129.4B.B$170.5B251.5B50.
4B131.5B$171.5B251.5B48.4B133.4B$172.5B251.5B46.4B135.4B$173.5B251.5B
44.4B129.12B$174.5B251.5B42.4B139.4B$175.5B251.5B40.4B141.4B$176.5B
251.5B38.4B143.4B$177.5B251.5B36.4B145.4B$178.5B251.5B34.4B147.4B$
179.5B251.5B32.4B149.4B$180.5B251.5B30.4B151.4B13.A$181.5B251.5B28.4B
153.4B10.3A$182.5B251.5B26.4B155.4B8.A$183.5B251.5B24.4B157.4B6.B2A$
184.5B251.5B22.4B154.2A3.4B3.5B$185.5B251.5B20.4B156.A4.4B2.3B$186.5B
251.5B18.4B157.A.AB2.8B$187.5B251.5B16.4B159.2AB.8BA2B$188.5B251.5B
14.4B162.9BABA3B$189.5B251.5B12.4B162.10BABA3B13.2A$190.5B251.5B10.4B
164.10BA2B.B2A11.A$191.5B251.5B8.4B163.2AB.11B.BA.A7.BA.A$192.5B251.
5B6.4B163.A.AB3.7B6.A7.B2A$193.5B251.5B4.4B164.A7.7B5.2A4.3B$194.5B
251.5B2.4B164.2A7.6B11.4B$195.5B251.9B174.7B9.4B$196.5B251.7B175.8B7.
4B$197.5B251.5B176.9B5.4B$198.5B250.6B175.5B.4B3.4B$199.5B248.8B173.
7B.4B.4B$200.5B246.4B.5B172.3B2A2B2.7B$201.5B244.4B3.5B172.2B2AB4.5B$
202.5B242.4B5.5B171.6B3.5B$203.5B240.4B7.5B170.6B2.7B$204.5B238.4B9.
5B168.7B.4B.4B$205.5B236.4B11.5B167.6B.4B3.4B$206.5B234.4B13.5B167.9B
5.4B$207.5B232.4B15.5B166.8B7.4B$208.5B230.4B17.5B164.8B9.4B$209.5B
228.4B19.5B163.7B11.4B$210.5B226.4B21.5B153.2A7.6B13.4B$211.5B224.4B
23.5B153.A6.7B14.4B$212.5B222.4B25.5B152.A.AB3.7B15.4B$213.5B220.4B
27.5B152.2AB2.8B16.4B$214.5B5.B212.4B29.5B153.11B17.4B$215.5B4.B211.
4B31.5B152.11B18.4B$216.5B3.B210.4B33.5B151.11B19.4B$217.5B2.B209.4B
35.5B149.11B21.4B$218.5B.B208.4B37.5B149.7B.2B22.4B$219.6B207.4B39.5B
148.11B22.4B$220.5B206.4B41.5B148.10B23.4B$221.5B204.4B43.5B147.12B
22.4B$222.5B202.4B45.5B147.13B21.4B$215.13B200.4B47.5B143.17B21.4B$
224.5B198.4B49.5B141.18B22.4B$225.5B196.4B51.5B139.2B2A13B.B2A21.4B$
226.5B194.4B53.5B139.B2A6B.4B3.BA.A21.4B$227.5B192.4B55.5B131.2A4.8B
4.B8.A22.4B$228.5B190.4B57.5B131.A4.6B15.2A22.4B$229.5B188.4B59.5B
130.A.AB.7B39.4B$230.5B186.4B61.5B130.2AB2.6B39.4B$231.5B184.4B63.5B
131.8B40.5B$232.5B182.4B65.5B130.8B39.9B$233.5B180.4B67.5B130.8B38.9B
$234.5B178.4B69.5B130.7B8.A29.9B$235.5B176.4B71.5B130.6B6.3A28.10B$
236.5B174.4B73.5B129.7B4.A30.12B$237.5B172.4B75.5B128.7B4.2A19.2A8.
13B$238.5B170.4B77.5B127.8B.4B4.A15.A9.11B$239.5B168.4B79.5B126.11B4.
3A15.A.AB4.12B$240.5B166.4B81.5B125.12B2.A19.2AB.15B$241.5B164.4B83.
5B124.12B2.2A20.17B$242.5B162.4B85.5B124.11B3.B20.17B$243.5B160.4B87.
5B126.7B4.3B19.17B.B$244.5B158.4B89.5B124.8B3.6B16.19B2A$245.5B156.4B
91.5B122.9B2.10B11.19B.B2A$246.5B154.4B93.5B120.23B3.2B2.20B4.B$247.
5B152.4B95.5B117.B.16B2A32B$248.5B150.4B97.5B115.2A17B2A22B.9B$249.5B
140.B7.4B99.5B114.2A41B2.7B$250.5B139.B6.4B101.5B114.42B2.7B$251.5B
138.B5.4B103.5B111.5B2.36B4.6B$252.5B137.B4.4B105.5B110.2A6.5B5.13B.
4B10.7B$253.5B136.B3.4B107.5B110.A7.2B.3B3.7B.B4.4B12.6B$254.5B135.B
2.4B109.5B106.3A12.2A15.4B13.7B$255.5B134.B.4B111.5B105.A14.A15.4B14.
6B$256.5B133.5B113.5B120.3A11.4B15.5B$257.5B132.4B115.5B121.A10.4B15.
6B$258.5B130.11B110.5B130.4B16.4B$259.5B128.4B119.5B128.4B17.2B2AB$
260.5B126.4B121.5B126.4B20.2A$261.5B124.4B123.5B124.4B$262.5B122.4B
125.5B122.4B$263.5B120.4B127.5B120.4B$264.5B118.4B129.5B118.4B$265.5B
116.4B131.5B116.4B$266.5B114.4B133.5B114.4B$267.5B98.A13.4B135.5B98.A
13.4B$268.5B97.3A10.4B137.5B97.3A10.4B$269.5B99.A8.4B139.5B99.A8.4B$
270.5B97.2AB6.4B141.5B97.2AB6.4B$271.5B96.5B3.4B3.2A138.5B96.5B3.4B3.
2A$272.5B97.3B2.4B4.A140.5B97.3B2.4B4.A$273.5B96.8B2.BA.A141.5B96.8B
2.BA.A$274.5B93.2BA8B.B2A143.5B93.2BA8B.B2A$275.5B90.3BABA9B146.5B90.
3BABA9B$276.5B89.3BABA10B146.5B89.3BABA10B$277.5B86.2AB.2BA10B148.5B
86.2AB.2BA10B$278.5B84.A.AB.11B.B2A147.5B84.A.AB.11B.B2A$279.5B83.A6.
7B3.BA.A147.5B83.A6.7B3.BA.A$280.5B81.2A5.7B7.A148.5B81.2A5.7B7.A$
281.5B88.6B7.2A148.5B88.6B7.2A$282.5B86.7B158.5B86.7B$283.5B74.2A8.8B
159.5B74.2A8.8B$284.5B74.A7.9B160.5B74.A7.9B$285.5B73.A.AB3.4B.5B161.
5B73.A.AB3.4B.5B$286.5B73.2AB2.4B.7B161.5B73.2AB2.4B.7B$287.5B74.6B2.
2B2A3B162.5B74.6B2.2B2A3B$288.5B73.5B4.B2A2B164.5B73.5B4.B2A2B$289.5B
72.5B3.6B165.5B72.5B3.6B$290.5B70.7B2.6B166.5B70.7B2.6B$291.5B68.4B.
4B.7B166.5B68.4B.4B.7B$292.5B66.4B3.4B.6B167.5B66.4B3.4B.6B$293.5B64.
4B5.9B169.5B64.4B5.9B$294.5B62.4B7.8B170.5B62.4B7.8B$295.5B60.4B9.8B
170.5B60.4B9.8B$296.5B58.4B11.7B171.5B58.4B11.7B$297.5B56.4B13.6B7.2A
163.5B56.4B13.6B7.2A$298.5B13.A40.4B14.7B6.A165.5B13.A40.4B14.7B6.A$
299.5B2.4B4.3A39.4B15.7B3.BA.A166.5B2.4B4.3A39.4B15.7B3.BA.A$300.11B
2.A41.4B16.8B2.B2A168.11B2.A41.4B16.8B2.B2A$301.10B2.2A39.4B17.11B
171.10B2.2A39.4B17.11B$302.13B4.A33.4B18.11B172.13B4.A33.4B18.11B$
302.11B4.3A32.4B19.11B172.11B4.3A32.4B19.11B$301.13B2.A34.4B21.11B
170.13B2.A34.4B21.11B$300.4B.4BD4B2.2A32.4B22.2B.7B170.4B.4BD4B2.2A
32.4B22.2B.7B$299.9BDBD3B.3B31.4B22.11B169.9BDBD3B.3B31.4B22.11B$298.
4B.5B2D6B32.4B23.10B169.4B.5B2D6B32.4B23.10B$297.4B3.13B30.4B22.12B
168.4B3.13B30.4B22.12B$296.4B6.11B29.4B21.13B168.4B6.11B29.4B21.13B$
295.4B7.10B29.4B21.17B164.4B7.10B29.4B21.17B$294.4B8.11B27.4B22.18B
162.4B8.11B27.4B22.18B$293.4B11.9B26.4B21.2AB.13B2A2B160.4B11.9B26.4B
21.2AB.13B2A2B$292.4B12.10B24.4B21.A.AB3.4B.6B2AB161.3B12.10B24.4B21.
A.AB3.4B.6B2AB$291.4B12.12B22.4B22.A8.B4.8B4.2A152.4B12.12B22.4B22.A
8.B4.8B4.2A$290.4B13.13B20.4B22.2A15.6B4.A152.4B13.13B20.4B22.2A15.6B
4.A$289.4B14.14B18.4B39.7B.BA.A151.4B14.14B18.4B39.7B.BA.A$288.4B16.
14B16.4B40.6B2.B2A151.4B16.14B16.4B40.6B2.B2A$287.4B15.4B.12B14.4B42.
8B152.4B15.4B.12B14.4B42.8B$286.4B16.2A4.12B12.4B43.8B151.4B16.2A4.
12B12.4B43.8B$285.4B18.A4.7B.5B10.4B43.8B151.4B18.A4.7B.5B10.4B43.8B$
284.4B16.3A6.6B2.5B8.4B35.A8.7B151.4B16.3A6.6B2.5B8.4B35.A8.7B$283.4B
17.A8.7B2.5B6.4B36.3A6.6B151.4B17.A8.7B2.5B6.4B36.3A6.6B$282.4B27.8B
2.5B4.4B40.A4.7B150.4B27.8B2.5B4.4B40.A4.7B$281.4B29.8B2.5B2.4B19.A
20.2A4.7B149.4B29.8B2.5B2.4B19.A20.2A4.7B$280.4B30.9B2.9B.3B.B12.3A
15.A4.4B.8B148.4B30.9B2.9B.3B.B12.3A15.A4.4B.8B$279.4B30.6B.21B10.A
18.3A4.11B147.4B30.6B.21B10.A18.3A4.11B$278.4B31.7B.17B2A2B5.B3.2A20.
A2.12B146.4B31.7B.17B2A2B5.B3.2A20.A2.12B$277.4B33.6B2.16B2A2B3.8B19.
2A2.12B145.4B33.6B2.16B2A2B3.8B19.2A2.12B$276.4B34.7B.20B.8B21.B3.11B
145.4B34.7B.20B.8B21.B3.11B$275.4B34.38B19.3B4.7B147.4B34.38B19.3B4.
7B$274.4B35.23B.15B16.6B3.8B145.4B35.23B.15B16.6B3.8B$273.4B35.18B2.
22B11.10B2.9B143.4B35.18B2.22B11.10B2.9B$272.4B32.B3.19B2.24B2.2B3.
23B141.4B32.B3.19B2.24B2.2B3.23B$271.4B32.2AB.15B2.4B2.35B2A16B.B138.
4B32.2AB.15B2.4B2.35B2A16B.B$270.4B33.2A18B2.4B2.11B.22B2A17B2A136.4B
33.2A18B2.4B2.11B.22B2A17B2A$269.4B35.B.3B2A12B3.4B2.52B2A135.4B35.B.
3B2A12B3.4B2.52B2A$268.4B39.2B2A11B5.4B2.52B135.4B39.2B2A11B5.4B2.52B
$267.4B41.2B2.10B6.4B2.8B2.36B2.5B132.4B41.2B2.10B6.4B2.8B2.36B2.5B$
266.4B41.2B3.6B.B9.4B.6B11.4B.13B5.5B6.2A131.4B41.2B3.6B.B9.4B.6B11.
4B.13B5.5B6.2A$265.4B41.B2AB2.4B14.11B11.3B5.B.7B3.3B.2B7.A131.4B41.B
2AB2.4B14.11B11.3B5.B.7B3.3B.2B7.A$264.4B43.2A3.2B2AB14.11B11.4B15.2A
12.3A127.4B43.2A3.2B2AB14.11B11.4B15.2A12.3A$263.4B51.2A16.11B12.2A
16.A14.A126.4B51.2A16.11B12.2A16.A14.A$262.4B71.5B.5B11.A14.3A141.4B
71.5B.5B11.A14.3A$261.4B72.3B4.5B11.3A11.A142.4B72.3B4.5B11.3A11.A$
260.4B74.3B4.5B12.A153.4B74.3B4.5B12.A$259.4B75.B2AB4.5B164.4B75.B2AB
4.5B$258.4B77.2A6.5B162.4B77.2A6.5B$257.4B87.5B160.4B87.5B$256.4B89.
5B158.4B89.5B$255.4B91.5B156.4B91.5B$254.4B93.5B154.4B93.5B$253.4B95.
5B152.4B95.5B$252.4B97.5B150.4B97.5B$251.4B99.5B148.4B99.5B$250.4B
101.5B146.4B101.5B$249.4B103.5B144.4B103.5B$248.4B58.31D16.5B142.4B8.
13D13.19D5.31D16.5B$247.4B59.31D17.5B140.4B8.14D13.19D5.31D17.5B$246.
4B60.31D18.5B138.4B9.15D12.19D5.31D18.5B$245.4B61.6D19.6D19.5B136.4B
10.D6.8D20.6D10.6D19.6D19.5B$244.4B62.6D18.7D20.5B134.4B18.9D19.6D10.
6D18.7D20.5B$243.4B63.6D17.7D22.5B132.4B19.10D18.6D10.6D17.7D22.5B$
242.4B64.6D17.7D23.5B130.4B20.10D18.6D10.6D17.7D23.5B$241.4B65.6D16.
7D25.5B128.4B21.11D17.6D10.6D16.7D25.5B$240.4B66.6D15.7D27.5B126.4B
22.11D17.6D10.6D15.7D27.5B$239.4B67.6D15.7D28.5B124.4B23.12D16.6D10.
6D15.7D28.5B$238.4B68.6D14.7D30.5B122.4B24.5D.7D15.6D10.6D14.7D30.5B$
237.4B69.6D13.7D32.5B120.4B25.5D2.6D15.6D10.6D13.7D32.5B$236.4B70.6D
13.6D34.5B118.4B26.5D2.7D14.6D10.6D13.6D34.5B$235.4B71.6D12.7D35.5B
116.4B27.5D3.6D14.6D10.6D12.7D35.5B$234.4B72.6D11.7D37.5B114.4B28.5D
3.7D13.6D10.6D11.7D37.5B$233.4B89.7D39.5B112.4B29.5D4.6D13.6D26.7D39.
5B$232.4B90.7D40.5B110.4B30.5D5.6D12.6D26.7D40.5B$231.4B90.7D42.5B
108.4B31.5D5.7D11.6D25.7D42.5B$230.4B90.7D44.5B106.4B32.5D6.6D11.6D
24.7D44.5B$229.4B91.7D45.5B104.4B33.5D6.7D10.6D24.7D45.5B$228.4B91.7D
47.5B102.4B34.5D7.6D10.6D23.7D47.5B$227.4B91.7D49.5B100.4B35.5D8.6D9.
6D22.7D49.5B$226.4B92.6D51.5B98.4B36.5D8.7D8.6D22.6D51.5B$225.4B92.7D
52.5B96.4B37.5D9.6D8.6D21.7D52.5B$224.4B92.7D54.5B94.4B38.5D9.7D7.6D
20.7D54.5B$223.4B93.6D56.5B92.4B39.5D10.6D7.6D20.6D56.5B$222.4B93.7D
57.5B90.4B40.5D11.6D6.6D19.7D57.5B$221.4B93.7D59.5B88.4B41.5D11.7D5.
6D18.7D59.5B$220.4B93.7D61.5B86.4B42.5D12.6D5.6D17.7D61.5B$219.4B94.
7D62.5B84.4B43.5D12.7D4.6D17.7D62.5B$218.4B94.7D14.5D45.5B82.4B44.5D
13.6D4.6D16.7D14.5D45.5B$217.4B94.7D15.6D45.5B80.4B45.5D13.7D3.6D15.
7D15.6D45.5B$216.4B95.7D15.6D46.5B78.4B46.5D14.7D2.6D15.7D15.6D46.5B$
215.4B95.7D16.6D47.5B76.4B47.5D15.6D2.6D14.7D16.6D47.5B$214.4B95.7D
17.6D48.5B74.4B48.5D15.7D.6D13.7D17.6D48.5B$213.4B96.6D18.6D49.5B72.
4B49.5D16.6D.6D13.6D18.6D49.5B$212.4B96.7D18.6D50.5B70.4B50.5D16.13D
12.7D18.6D50.5B$211.4B96.7D19.6D51.5B68.4B51.5D17.12D11.7D19.6D51.5B$
210.4B96.7D20.6D52.5B66.4B52.5D18.11D10.7D20.6D52.5B$209.4B97.7D20.6D
53.5B64.4B53.5D18.11D10.7D20.6D53.5B$208.4B97.7D21.6D54.5B62.4B54.5D
19.10D9.7D21.6D54.5B$207.4B98.6D22.6D55.5B60.4B55.5D19.10D9.6D22.6D
55.5B$206.4B99.6D22.6D56.5B58.4B56.5D20.9D9.6D22.6D56.5B$205.4B100.
34D57.5B56.4B52.18D13.8D9.34D57.5B$204.4B101.34D58.5B54.4B53.19D12.8D
9.34D58.5B$203.4B102.34D59.5B52.4B54.18D14.7D9.34D59.5B$202.4B252.4B$
201.4B252.4B$200.4B252.4B$199.4B252.4B$198.4B252.4B$197.4B252.4B$196.
4B252.4B$195.4B252.4B$194.4B252.4B$193.4B252.4B$192.4B252.4B$191.4B
252.4B$190.4B252.4B$189.4B252.4B$188.4B252.4B$179.B7.4B244.B7.4B$179.
B6.4B245.B6.4B$179.B5.4B246.B5.4B$179.B4.4B247.B4.4B$179.B3.4B248.B3.
4B$179.B2.4B249.B2.4B$179.B.4B250.B.4B$179.5B251.5B$179.4B252.4B$179.
10B246.10B!
Here's what I have so far for a replacement:

Code: Select all

x = 293, y = 182, rule = LifeHistory
7.30D75.13D14.18D6.30D$7.30D75.13D14.18D6.30D$7.30D75.14D13.18D6.30D$
7.5D20.5D82.7D21.5D11.5D20.5D$7.5D19.6D82.8D20.5D11.5D19.6D$7.5D18.6D
83.9D19.5D11.5D18.6D$7.5D18.6D83.9D19.5D11.5D18.6D$7.5D17.6D84.10D18.
5D11.5D17.6D$7.5D16.6D85.4D.5D18.5D11.5D16.6D$7.5D16.6D85.4D.6D17.5D
11.5D16.6D$7.5D15.6D86.4D2.6D16.5D11.5D15.6D$7.5D14.6D87.4D3.5D16.5D
11.5D14.6D$7.5D14.5D88.4D3.6D15.5D11.5D14.5D$7.5D13.6D88.4D4.5D15.5D
11.5D13.6D$7.5D12.6D89.4D4.6D14.5D11.5D12.6D$23.6D90.4D5.5D14.5D27.6D
$23.6D90.4D6.5D13.5D27.6D$22.6D91.4D6.6D12.5D26.6D$21.6D92.4D7.5D12.
5D25.6D$21.6D92.4D7.6D11.5D25.6D$20.6D93.4D8.5D11.5D24.6D$19.6D94.4D
9.5D10.5D23.6D$19.5D95.4D9.6D9.5D23.5D$18.6D95.4D10.5D9.5D22.6D$17.6D
96.4D10.6D8.5D21.6D$17.5D97.4D11.5D8.5D21.5D$16.6D97.4D12.5D7.5D20.6D
$15.6D98.4D12.6D6.5D19.6D$14.6D99.4D13.5D6.5D18.6D$14.6D99.4D13.6D5.
5D18.6D$13.6D15.4D81.4D14.5D5.5D17.6D15.4D$12.6D16.5D80.4D14.6D4.5D
16.6D16.5D$12.6D16.5D80.4D15.6D3.5D16.6D16.5D$11.6D17.5D80.4D16.5D3.
5D15.6D17.5D$10.6D18.5D80.4D16.6D2.5D14.6D18.5D$10.5D19.5D80.4D17.5D
2.5D14.5D19.5D$9.6D19.5D80.4D17.6D.5D13.6D19.5D$8.6D20.5D80.4D18.11D
12.6D20.5D$7.6D21.5D80.4D19.10D11.6D21.5D$7.6D21.5D80.4D19.10D11.6D
21.5D78.A$6.6D22.5D80.4D20.9D10.6D22.5D77.BABA$6.5D23.5D80.4D20.9D10.
5D23.5D76.2B2A$6.5D23.5D80.4D21.8D10.5D23.5D75.4B$6.33D75.17D14.7D10.
33D74.4B$6.33D75.18D13.7D10.33D73.4B$6.33D75.17D15.6D10.33D64.B7.4B$
259.B6.4B$259.B5.4B$259.B4.4B$259.B3.4B$259.B2.4B$170.5B42.A41.B.4B$
171.5B39.3A41.5B$172.5B6.B30.A44.4B$173.5B5.B30.2A7.A34.11B$174.5B4.B
28.4B5.3A33.4B$175.5B3.B26.4B6.A24.A10.4B$176.5B2.B25.8B3.2A23.3A7.4B
$177.5B.B25.9B.3B4.B21.A5.4B$178.6B22.14B5.3B19.2A4.4B$179.5B21.16B3.
6B2.5B10.9B6.2A$55.2B123.5B20.16B2.7B2.7B10.6B7.A$55.3B116.12B19.34B.
2B2.B3.6B5.2A.A$55.4B123.5B19.28BD19B4.A2.A$55.5B6.B116.5B17.27BDBD
13BD6B3.B2A$56.5B5.B117.5B15.25B2AB3D9B2A2BDBD9B$57.5B4.B118.5B13.26B
2ABD11B2A2B2D9B$58.5B3.B119.5B11.4B.51B$59.5B2.B120.5B9.33B2.22B$60.
5B.B121.5B7.4B6.19B2.B5.20B$61.6B122.5B5.4B8.19B8.19B$62.5B123.5B3.4B
8.21B8.17B$63.5B123.5B.4B9.11B2.8B10.13B$57.12B123.8B10.11B2.5B2.B2A
6.A.2A4.8B$65.5B123.6B9.2AB.9B3.4B2.BA.A3.3AB2A6.6B$66.5B123.5B8.A.AB
.8B13.A2.A4.B8.5B$67.5B121.7B7.A4.9B12.2A2.3A.2A9.B.B$68.5B119.9B5.2A
5.9B17.A.A9.3B$69.5B117.4B2.5B12.3B2.4B16.A.A9.B2AB$70.5B115.4B4.5B
12.B4.4B16.A11.2A$71.5B113.4B6.5B17.4B$72.5B111.4B8.5B17.4B$73.5B109.
4B10.5B17.4B$74.5B107.4B12.5B17.4B$75.5B105.4B14.5B17.4B$76.5B103.4B
16.5B17.4B$77.5B101.4B18.5B17.4B$78.5B99.4B20.5B17.4B$79.5B97.4B22.5B
17.4B$80.5B95.4B24.5B17.4B$81.5B93.4B26.5B13.A3.4B$82.5B.5B4.3A78.4B
28.5B.5B4.3A4.4B$83.11B2.A80.4B30.11B2.A8.4B$84.10B2.2A78.4B32.10B2.
2A8.4B$85.13B4.A72.4B34.13B4.A4.4B$85.11B4.3A71.4B35.11B4.3A5.4B$84.
13B2.A73.4B35.13B2.A9.4B$83.4B.4BD4B2.2A71.4B35.4B.4BD4B2.2A9.4B$82.
9BDBD3B.3B70.4B35.9BDBD3B.3B10.4B$81.4B.5B2D6B71.4B35.4B.5B2D6B13.4B$
80.4B3.13B69.4B35.4B3.13B13.4B$79.4B6.11B68.4B35.4B6.11B14.4B$78.4B7.
10B68.4B35.4B7.10B16.4B$77.4B8.11B66.4B35.4B8.11B16.4B$76.4B11.9B65.
4B35.4B11.9B17.4B$75.4B12.10B63.4B35.4B12.10B17.4B$74.4B12.12B61.4B
35.4B12.12B17.4B$73.4B13.13B59.4B35.4B13.13B17.4B$72.4B14.14B57.4B35.
4B14.14B17.4B$71.4B16.14B55.4B35.4B16.14B17.4B$70.4B15.4B.4B3D5B53.4B
35.4B15.4B.4B3D5B17.4B$69.4B16.2A4.4BD7B51.4B35.4B16.2A4.4BD7B17.4B$
68.4B18.A4.2B3D8B49.4B35.4B18.A4.2B3D8B17.4B$67.4B16.3A6.7B.5B47.4B
35.4B16.3A6.7B.5B17.4B$66.4B17.A8.7B2.5B45.4B35.4B17.A8.7B2.5B17.4B$
65.4B27.8B2.5B43.4B35.4B27.8B2.5B17.4B13.A$64.4B28.9B2.5B41.4B35.4B
28.9B2.5B17.4B10.3A$63.4B30.8B3.5B39.4B35.4B30.8B3.5B17.4B8.A$62.4B
30.6B.4B2.5B37.4B35.4B30.6B.4B2.5B17.4B7.2A$61.4B31.7B.B2A3.5B35.4B
35.4B31.7B.B2A3.5B17.4B3.5B$60.4B33.6B2.A5.5B33.4B35.4B33.6B2.A5.5B
17.4B2.3B$59.4B34.6B3.3A3.5B31.4B35.4B34.6B3.3A3.5B17.9B7.2A$58.4B35.
6B5.A4.5B29.4B35.4B35.6B5.A4.5B17.8B8.A$57.4B35.8B10.5B27.4B35.4B35.
8B10.5B17.10B3.B.A.2A$56.4B35.8B12.5B25.4B35.4B35.8B12.5B16.7B2A2B.B
3A2.A$55.4B36.9B12.5B23.4B35.4B36.9B12.5B15.7B2A3BAB2.2A$54.4B37.9B
13.5B21.4B35.4B37.9B13.5B14.12B4A$53.4B37.10B14.5B19.4B35.4B37.10B14.
5B11.2AB.7B3.2B.A$52.4B38.3B2A5B15.5B17.4B35.4B38.3B2A5B15.5B9.A.AB.
7B2.B3A$51.4B33.2A3.4B2A5B16.5B15.4B35.4B33.2A3.4B2A5B16.5B8.A5.5B3.A
$50.4B35.A3.11B17.5B13.4B35.4B35.A3.11B17.5B6.2A5.5B4.5A$49.4B36.A.A
7BD4B18.5B11.4B35.4B36.A.A7BD4B18.5B11.4B10.A$48.4B38.2A2.4B3DB21.5B
9.4B35.4B38.2A2.4B3DB21.5B9.4B9.A$47.4B44.2B2D2BD4.2A16.5B7.4B35.4B
44.2B2D2BD4.2A16.5B7.4B10.2A$46.4B46.6B4.A18.5B5.4B35.4B46.6B4.A18.5B
5.4B$45.4B47.6B.BA.A19.5B3.4B35.4B47.6B.BA.A19.5B3.4B$44.4B47.7B.B2A
21.5B.4B35.4B47.7B.B2A21.5B.4B$43.4B49.8B24.8B35.4B49.8B24.8B$42.4B
50.7B26.6B35.4B50.7B26.6B$41.4B40.2A9.7B27.5B34.4B40.2A9.7B27.5B$40.
4B42.A8.7B4.B22.7B32.4B42.A8.7B4.B22.7B$39.4B43.A.AB6.6B.B.2BA20.9B
30.4B43.A.AB6.6B.B.2BA20.9B$38.4B45.2AB.3B.11BA.A18.4B2.5B28.4B45.2AB
.3B.11BA.A18.4B2.5B$37.4B48.11BD4B.BA18.4B4.5B26.4B48.11BD4B.BA18.4B
4.5B$36.4B49.10B3D3B9.A10.4B6.5B24.4B49.10B3D3B9.A10.4B6.5B$35.4B51.
9BD5B9.3A7.4B8.5B22.4B51.9BD5B9.3A7.4B8.5B$34.4B51.16B12.A5.4B10.5B
20.4B51.16B12.A5.4B10.5B$33.4B52.16B11.2A4.4B12.5B18.4B52.16B11.2A4.
4B12.5B$32.4B52.16B12.9B6.2A6.5B16.4B52.16B12.9B6.2A6.5B$31.4B53.16B
14.6B7.A8.5B14.4B53.16B14.6B7.A8.5B$30.4B54.19B2.2B2.B3.6B5.2A.A9.5B
12.4B54.19B2.2B2.B3.6B5.2A.A9.5B$29.4B51.2A2.35B4.A2.A11.5B10.4B51.2A
2.35B4.A2.A11.5B$28.4B51.A.A10B.27B3.B2A13.5B8.4B51.A.A10B.27B3.B2A
13.5B$27.4B52.A3.2B2A4B2.16B2A14B15.5B6.4B52.A3.2B2A4B2.16B2A14B15.5B
$26.4B52.2A3.BA2BA3B2.16B2A13B17.5B4.4B52.2A3.BA2BA3B2.16B2A13B17.5B$
25.4B59.B2A4B3.29B19.5B2.4B59.B2A4B3.29B19.5B$24.4B61.B.2B12.4B.17B
20.9B61.B.2B12.4B.17B20.5B$23.4B64.3B10.6B.15B22.7B64.3B10.6B.15B22.
5B$22.4B64.B2AB6.2A.2BA.3B.15B23.5B64.B2AB6.2A.2BA.3B.15B23.5B$21.4B
66.2A7.A.2BA.A.2B2.13B24.6B64.2A7.A.2BA.A.2B2.13B25.5B$20.4B77.A2.BA.
A2.13B25.8B73.A2.BA.A2.13B28.5B$19.4B79.A3.A.A.2A4.8B23.4B.5B73.A3.A.
A.2A4.8B28.5B$18.4B78.A.4A2.AB2A6.6B22.4B3.5B70.A.4A2.AB2A6.6B29.5B$
17.4B78.A.A3.A.A2.B8.5B21.4B5.5B68.A.A3.A.A2.B8.5B30.5B$16.4B79.A.A2.
A2.2A.2A9.B.B20.4B7.5B67.A.A2.A2.2A.2A9.B.B31.5B$15.4B81.A3.2A2.A.A9.
3B20.4B9.5B67.A3.2A2.A.A9.3B33.5B$14.4B90.A.A9.B2AB18.4B11.5B74.A.A9.
B2AB33.5B$13.4B92.A11.2A18.4B13.5B74.A11.2A35.5B$12.4B124.4B15.5B123.
5B$11.4B124.4B17.5B123.5B$10.4B124.4B$9.4B124.4B$B7.4B116.B7.4B$B6.4B
117.B6.4B$B5.4B118.B5.4B$B4.4B119.B4.4B$B3.4B120.B3.4B$B2.4B121.B2.4B
$B.4B122.B.4B$5B123.5B$4B124.4B$10B118.10B!

User avatar
Freywa
Posts: 718
Joined: June 23rd, 2011, 3:20 am
Location: Singapore
Contact:

Re: Smaller Pi Calculator Challenge

Post by Freywa » November 8th, 2019, 11:31 pm

I've had enough of these "challenges".
Princess of Science, Parcly Taxel

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

Re: Smaller Pi Calculator Challenge

Post by simsim314 » November 9th, 2019, 2:08 am

@dvgrn May I ask for at least T binary unit to have a slow salvo friendly version? I've thought of self replicating design. And although the other components are imaginary for now (maybe can be added to the challenge) but the design is based on T0 so if you already redesign all the components...

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

Re: Smaller Pi Calculator Challenge

Post by dvgrn » November 9th, 2019, 9:57 am

simsim314 wrote:
November 9th, 2019, 2:08 am
@dvgrn May I ask for at least T binary unit to have a slow salvo friendly version? I've thought of self replicating design. And although the other components are imaginary for now (maybe can be added to the challenge) but the design is based on T0 so if you already redesign all the components...
If you're going to add a "slow salvo friendly" requirement, there might not be any point in redesigning much of anything in the calculator circuitry. Silver reflectors are big and slow, but their construction cost is about the same as a Snark (for simple reflectors) or a syringe-based device (for splitters and merge circuits).

There are two slow-salvo-friendly binary memory storage tapes in the Spartan universal computer-constructor that use blocks for bits, and another read-only one that uses eaters. I suspect the block-bit memory unit could be adapted for your purposes, but it leaks gliders when it reads 1's so that would have to be fixed.

The "easy" option
Alternatively, the T tape units in the pi and phi calculators could be made Spartan fairly easily. The non-Spartan parts all seem to be from an early universal edge-shooter adjustment toolkit. So we'd just need to invent a Spartan version of that toolkit, and use it to replace those salvo-generating pieces of the binary tape unit. A few hours should be enough to finish that project.

I'm sure that a complete redesign could cut the size of that tape unit to a small fraction of its current size. E.g., we could find an improved way to read empty space as a 0 and a block/boat/whatever as a 1, and then the extra "guardian" sliding block registers in the southeast wouldn't be necessary. But the behavior of the circuit would change, so it couldn't be used as a drop-in replacement for the pi and phi calculators any more.

Too slow?
The problem I see, that makes me less interested in working on a self-replicating computer design along these lines, is that no matter how impressively you optimize one of these static-tape replicators, the estimated run time for one replication cycle is going to come out to several orders of magnitude larger than the replication time for a 0E0P metacell. We're already going to have to wait another decade or more for Moore's Law to catch up to the 0E0P metacell and make it easy to watch it running in real time. A construction that's thousands of times harder to simulate than _that_ ... is not something that sounds like very much fun to try to debug in the design stages, or to run once it's complete.

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

Re: Smaller Pi Calculator Challenge

Post by simsim314 » November 9th, 2019, 10:44 am

dvgrn wrote:
November 9th, 2019, 9:57 am
and another read-only one that uses eaters.
Yes read only is enough for self replication - but not enough for computation. I also saw there is no glider guns in this design - would you implement it this way in the new calculator or with the guns?
dvgrn wrote:
November 9th, 2019, 9:57 am
But the behavior of the circuit would change, so it couldn't be used as a drop-in replacement for the pi and phi calculators any more.
This specific property is less of my concern. I'm looking to write APGsembly simple compiler, so that you could write Copy, Add, MUL etc. and everything will compile into the APGsembly, so back compatibility is the least of my concerns. I prefer a good version of APGsembly with some nuances that make the design simpler.
dvgrn wrote:
November 9th, 2019, 9:57 am
A few hours should be enough to finish that project.
The project is far enough down the line to not be bothered by this. I prefer the existent spartan option or simplified redesign idea.
dvgrn wrote:
November 9th, 2019, 9:57 am
the estimated run time for one replication cycle is going to come out to several orders of magnitude larger than the replication time for a 0E0P metacell.
Yes there would be more cycles - but because almost everything is static golly might run it much faster. Think how much memory and time are wasted just to simulate the movement of all the gliders tape. I think the execution time would be comparable with the pi calculator run.

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

Re: Smaller Pi Calculator Challenge

Post by dvgrn » November 9th, 2019, 1:40 pm

simsim314 wrote:
November 9th, 2019, 10:44 am
dvgrn wrote:
November 9th, 2019, 9:57 am
the estimated run time for one replication cycle is going to come out to several orders of magnitude larger than the replication time for a 0E0P metacell.
Yes there would be more cycles - but because almost everything is static golly might run it much faster.
Well, I guess there's only one way to find out for sure. Maybe a quick test would help: build a T0 pattern containing the number of bits that you calculate will be needed in a self-replicating computer, and just see how long it takes to access all the bits once, returning Z or NZ.

What I've found is that HashLife handles the out-and-back READ operations on this kind of static linear tape fairly well for short and medium distances, but starts to bog down pretty badly when the distances get really long.

I wonder if it would be worth dodging those long distances by storing data in 2D memory? The Osqrtlogt's SQ storage device is available -- could be added right on as another callable mechanism in a calculator pattern. There's nothing that says that storage has to be in a triangular area, or that it has to count up in binary -- that's just a detail of the Osqrtlogt pattern's APGsembly code.
simsim314 wrote:
November 9th, 2019, 10:44 am
Think how much memory and time are wasted just to simulate the movement of all the gliders tape. I think the execution time would be comparable with the pi calculator run.
I'll certainly be happy to be proven wrong about that, if it happens! Seems to me there was a reason that the Spartan UCC never got programmed, and that it took half a decade for the Gemini spaceship to come along and use Paul Chapman's prototype UC. The prototype UC showed what it looked like to store data on a static tape, and it was hard to imagine completing a self-constructing pattern in that model. In practice, streams of moving gliders turned out to be a much less wasteful storage method than all those static 1s and 0s (plus the circuitry needed to interpret them).

EDIT: The new pi calculator comes in at less than a sixth of the area of the old one. It could be cut down quite a bit more, but only at the cost of making it less HashLife-friendly. I'm not sure how important alignment to powers of 2 is from the perspective of simulation speed, but keeping a strict alignment certainly reduces the size of the .mc or mc.gz file.

Now it's time to hook up the new computer to the old circuitry, and see if it all still works --

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

Re: Smaller Pi Calculator Challenge

Post by simsim314 » November 9th, 2019, 3:17 pm

For a while now I'm thinking about a *WSS based mechanism to use static tape, It's way faster. I wonder if some hybrid of T unit and *WSS based coding might solve the problem. Another option is to use something like zip mechanism, that stores a table of conversion from abstract codes to most common sets of operations. I think the major barrier for me is drying out all the *WSS armadas, if we had such script for this case just like we have slmake for slow salvo I don't think there would be competitive methods for static tape other than *WSS based.

EDIT Lets hope the compiler will work, I'm preparing a set of library functions and somewhat higher abstraction layer that will compile into APGsembly, with everything included: ADD, MUL, SUB, MOD, PRINT DECIMAL, COPY, STORE etc.

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

Re: Smaller Pi Calculator Challenge

Post by dvgrn » November 9th, 2019, 9:16 pm

simsim314 wrote:
November 9th, 2019, 3:17 pm
EDIT Lets hope the compiler will work, I'm preparing a set of library functions...
It's looking very promising so far. Here's what the compiler produces starting from the reconstructed pi-calculator APGsembly code:
recompiled-pi-calculator.mc.gz
pi calculator with computer/program part to reduced to ~one sixth of the original area
(132.93 KiB) Downloaded 136 times
So far I've only run this far enough to get "3.14" out, at just under 250B ticks. But the odds seem quite good that it won't do anything surprising from here on out.

Fairly soon it should be possible to compile arbitrary programs and hook up the resulting computer to a "general purpose" calculator -- I'm thinking twenty binary tape registers, ten SBRs, the usual MUL, SUB, and ADD even though I'm still not entirely clear what math they're doing... and a 2D memory module stolen from the Osqrtlogt, while I'm at it. Then the same calculator pattern could produce pi, phi, O(log(t)) growth, O(sqrt(log(t))) growth, or whatever else anyone wants to program, just by attaching the right compiler output to it.

User avatar
Nathaniel
Site Admin
Posts: 664
Joined: December 10th, 2008, 3:48 pm
Location: New Brunswick, Canada
Contact:

Re: Smaller Pi Calculator Challenge

Post by Nathaniel » November 10th, 2019, 7:30 am

dvgrn wrote:
November 9th, 2019, 9:16 pm
So far I've only run this far enough to get "3.14" out, at just under 250B ticks. But the odds seem quite good that it won't do anything surprising from here on out.
Very nice! After 34 trillion generations:

Code: Select all

x = 6339, y = 6316, rule = B3/S23
5761b2o$5761b2o63$5825b2o$5825b2o41$5632b2o$5632b2o21$5889b2o$5889b2o
41$5568b2o126b2o$5568b2o126b2o21$5953b2o$5953b2o41$5504b2o126b2o$5504b
2o126b2o21$6017b2o$6017b2o41$5440b2o126b2o$5440b2o126b2o21$6081b2o$
6081b2o41$5376b2o126b2o$5376b2o126b2o21$6145b2o$6145b2o41$5312b2o126b
2o382b2o126b2o$5312b2o126b2o382b2o126b2o21$6209b2o$6209b2o41$5376b2o
126b2o254b2o126b2o126b2o$5376b2o126b2o254b2o126b2o126b2o21$6273b2o$
6273b2o41$5440b2o126b2o126b2o126b2o126b2o126b2o$5440b2o126b2o126b2o
126b2o126b2o126b2o21$6337b2o$6337b2o41$5504b2o126b2o126b2o254b2o126b2o
$5504b2o126b2o126b2o254b2o126b2o63$5056b2o126b2o382b2o126b2o382b2o$
5056b2o126b2o382b2o126b2o382b2o63$4992b2o126b2o126b2o382b2o382b2o126b
2o$4992b2o126b2o126b2o382b2o382b2o126b2o63$4928b2o126b2o126b2o126b2o
638b2o126b2o$4928b2o126b2o126b2o126b2o638b2o126b2o63$4864b2o126b2o254b
2o638b2o126b2o$4864b2o126b2o254b2o638b2o126b2o63$4928b2o382b2o510b2o
126b2o$4928b2o382b2o510b2o126b2o63$4864b2o126b2o254b2o126b2o126b2o382b
2o$4864b2o126b2o254b2o126b2o126b2o382b2o63$4928b2o254b2o126b2o126b2o
126b2o$4928b2o254b2o126b2o126b2o126b2o63$4608b2o638b2o254b2o126b2o$
4608b2o638b2o254b2o126b2o63$4544b2o126b2o894b2o$4544b2o126b2o894b2o63$
4480b2o126b2o894b2o126b2o$4480b2o126b2o894b2o126b2o63$4416b2o126b2o
766b2o126b2o126b2o$4416b2o126b2o766b2o126b2o126b2o63$4352b2o126b2o766b
2o126b2o126b2o$4352b2o126b2o766b2o126b2o126b2o63$4288b2o126b2o382b2o
126b2o382b2o126b2o$4288b2o126b2o382b2o126b2o382b2o126b2o63$4352b2o126b
2o254b2o126b2o126b2o$4352b2o126b2o254b2o126b2o126b2o63$4416b2o126b2o
126b2o126b2o126b2o126b2o$4416b2o126b2o126b2o126b2o126b2o126b2o63$4480b
2o126b2o126b2o254b2o126b2o$4480b2o126b2o126b2o254b2o126b2o63$4032b2o
126b2o382b2o126b2o382b2o$4032b2o126b2o382b2o126b2o382b2o63$3968b2o126b
2o126b2o382b2o382b2o126b2o$3968b2o126b2o126b2o382b2o382b2o126b2o63$
3904b2o126b2o126b2o766b2o126b2o$3904b2o126b2o126b2o766b2o126b2o63$
3840b2o126b2o894b2o126b2o$3840b2o126b2o894b2o126b2o63$3904b2o382b2o
126b2o382b2o126b2o$3904b2o382b2o126b2o382b2o126b2o63$3840b2o126b2o254b
2o126b2o126b2o382b2o$3840b2o126b2o254b2o126b2o126b2o382b2o63$3904b2o
126b2o126b2o126b2o126b2o126b2o$3904b2o126b2o126b2o126b2o126b2o126b2o
63$3968b2o126b2o126b2o254b2o126b2o$3968b2o126b2o126b2o254b2o126b2o63$
3520b2o126b2o382b2o126b2o382b2o$3520b2o126b2o382b2o126b2o382b2o63$
3456b2o126b2o126b2o382b2o126b2o254b2o126b2o$3456b2o126b2o126b2o382b2o
126b2o254b2o126b2o63$3392b2o126b2o126b2o126b2o382b2o126b2o126b2o126b2o
$3392b2o126b2o126b2o126b2o382b2o126b2o126b2o126b2o63$3328b2o126b2o254b
2o510b2o126b2o126b2o$3328b2o126b2o254b2o510b2o126b2o126b2o63$3392b2o
382b2o510b2o126b2o$3392b2o382b2o510b2o126b2o63$3328b2o126b2o254b2o$
3328b2o126b2o254b2o63$3392b2o382b2o$3392b2o382b2o63$3712b2o382b2o$
3712b2o382b2o63$3008b2o126b2o638b2o254b2o126b2o$3008b2o126b2o638b2o
254b2o126b2o63$2944b2o126b2o126b2o510b2o254b2o126b2o$2944b2o126b2o126b
2o510b2o254b2o126b2o63$2880b2o126b2o126b2o126b2o510b2o126b2o126b2o$
2880b2o126b2o126b2o126b2o510b2o126b2o126b2o63$2816b2o126b2o254b2o126b
2o382b2o126b2o126b2o$2816b2o126b2o254b2o126b2o382b2o126b2o126b2o63$
2880b2o382b2o126b2o382b2o126b2o$2880b2o382b2o126b2o382b2o126b2o63$
2816b2o126b2o254b2o126b2o126b2o382b2o$2816b2o126b2o254b2o126b2o126b2o
382b2o63$2880b2o126b2o126b2o126b2o126b2o126b2o$2880b2o126b2o126b2o126b
2o126b2o126b2o63$2560b2o382b2o126b2o126b2o254b2o126b2o$2560b2o382b2o
126b2o126b2o254b2o126b2o63$2496b2o126b2o382b2o126b2o382b2o$2496b2o126b
2o382b2o126b2o382b2o63$2432b2o126b2o894b2o126b2o$2432b2o126b2o894b2o
126b2o63$2368b2o126b2o766b2o126b2o126b2o$2368b2o126b2o766b2o126b2o126b
2o63$2304b2o126b2o766b2o126b2o126b2o$2304b2o126b2o766b2o126b2o126b2o
63$2240b2o126b2o382b2o126b2o382b2o126b2o$2240b2o126b2o382b2o126b2o382b
2o126b2o63$2304b2o126b2o254b2o126b2o126b2o$2304b2o126b2o254b2o126b2o
126b2o63$2368b2o126b2o126b2o126b2o126b2o126b2o$2368b2o126b2o126b2o126b
2o126b2o126b2o63$2432b2o126b2o126b2o254b2o126b2o$2432b2o126b2o126b2o
254b2o126b2o63$2496b2o126b2o382b2o$2496b2o126b2o382b2o63$1920b2o638b2o
382b2o126b2o$1920b2o638b2o382b2o126b2o63$1856b2o126b2o894b2o126b2o$
1856b2o126b2o894b2o126b2o63$1920b2o126b2o766b2o126b2o$1920b2o126b2o
766b2o126b2o63$1856b2o126b2o126b2o638b2o126b2o$1856b2o126b2o126b2o638b
2o126b2o63$1920b2o126b2o126b2o638b2o$1920b2o126b2o126b2o638b2o63$1856b
2o254b2o126b2o$1856b2o254b2o126b2o63$1536b2o638b2o126b2o254b2o$1536b2o
638b2o126b2o254b2o63$1472b2o126b2o638b2o126b2o126b2o126b2o$1472b2o126b
2o638b2o126b2o126b2o126b2o63$1536b2o126b2o638b2o126b2o126b2o$1536b2o
126b2o638b2o126b2o126b2o63$1600b2o126b2o638b2o126b2o$1600b2o126b2o638b
2o126b2o63$1280b2o382b2o126b2o510b2o126b2o$1280b2o382b2o126b2o510b2o
126b2o63$1216b2o126b2o382b2o126b2o382b2o126b2o$1216b2o126b2o382b2o126b
2o382b2o126b2o63$1280b2o126b2o254b2o126b2o126b2o382b2o$1280b2o126b2o
254b2o126b2o126b2o382b2o63$1344b2o126b2o126b2o126b2o126b2o126b2o$1344b
2o126b2o126b2o126b2o126b2o126b2o63$1408b2o126b2o126b2o254b2o126b2o$
1408b2o126b2o126b2o254b2o126b2o63$1472b2o126b2o382b2o126b2o$1472b2o
126b2o382b2o126b2o63$896b2o1150b2o$896b2o1150b2o63$832b2o126b2o$832b2o
126b2o63$896b2o126b2o$896b2o126b2o63$832b2o126b2o126b2o$832b2o126b2o
126b2o63$896b2o126b2o126b2o$896b2o126b2o126b2o63$832b2o254b2o126b2o$
832b2o254b2o126b2o63$1152b2o126b2o254b2o$1152b2o126b2o254b2o63$1216b2o
126b2o126b2o126b2o$1216b2o126b2o126b2o126b2o63$1280b2o126b2o126b2o$
1280b2o126b2o126b2o63$1344b2o126b2o$1344b2o126b2o63$768b2o510b2o126b2o
$768b2o510b2o126b2o63$192b2o126b2o382b2o126b2o382b2o126b2o$192b2o126b
2o382b2o126b2o382b2o126b2o63$128b2o126b2o126b2o382b2o510b2o$128b2o126b
2o126b2o382b2o510b2o63$64b2o126b2o126b2o126b2o$64b2o126b2o126b2o126b2o
63$2o126b2o254b2o$2o126b2o254b2o63$64b2o382b2o$64b2o382b2o63$2o126b2o
254b2o126b2o126b2o$2o126b2o254b2o126b2o126b2o63$64b2o254b2o126b2o126b
2o126b2o$64b2o254b2o126b2o126b2o126b2o63$384b2o254b2o126b2o$384b2o254b
2o126b2o63$704b2o$704b2o63$640b2o126b2o$640b2o126b2o63$448b2o126b2o
126b2o$448b2o126b2o126b2o63$384b2o126b2o126b2o$384b2o126b2o126b2o63$
448b2o126b2o$448b2o126b2o!

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

Re: Smaller Pi Calculator Challenge

Post by dvgrn » November 10th, 2019, 11:34 pm

dvgrn wrote:
November 9th, 2019, 9:16 pm
Fairly soon it should be possible to compile arbitrary programs and hook up the resulting computer to a "general purpose" calculator...
Here's what a slightly updated version of the General Purpose Calculator (GPC) looks like, with the phi calculation program compiled for it instead of the pi program. The only difference is that the clock speed is now 2^24 instead of 2^20, because the 2D memory has some instructions that are too slow to work correctly at 2^20.
GPC-2^24-phi-calculator.mc
GPC with phi calculator program
(617.37 KiB) Downloaded 140 times
The O(sqrt(log(t))) program can also be run on the same hardware:
GPC-2^24-Osqrtlogt.mc
GPC with Osqrtlogt program
(601.86 KiB) Downloaded 150 times
This was just an experiment with running the phi and pi calculators and the Osqrtlogt on the same hardware. Each program uses a different subset of the available logic circuits. It will be fairly easy to adjust the compiler to reduce the GPC back down to just the circuits needed for each program, if that's what is wanted.

Next on the to-do list is some more generalized compiler code. It looks like it will be fairly straightforward to set up the compiler to include whatever logic circuits are wanted for a particular program. It should be possible to add new types of logic circuits and their associated action inputs, without making any significant code changes to the compiler.

For example, someone might want to build a sliding-block register with an additional RESET Rn input, to move the sliding block back to 0 in one step instead of having to TDEC back to zero. The emulator and compiler can be adjusted to handle this kind of thing fairly easily.

EDIT An alpha version of emulator and compiler code is now checked in to GitHub. One major upgrade is coming, to finish modularizing everything so that the compiler can build any APGsembly program with just the circuits needed to run that program.

-- It's funny that calcyman had all this compiler and emulator stuff available almost a decade ago, but nobody ever did anything with it! I still have the compiled DarkBasic program, but it didn't seem to be recoverable. APGsembly is really very straightforward to work with; if anyone wants to give it a try, just post questions here.

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

Re: Smaller Pi Calculator Challenge

Post by simsim314 » November 11th, 2019, 11:23 am

@dvgrn - All this looks super great. The SQ addition is very nice and the GPC in general looks amazing.

Several notes (maybe before the optimal fit script):

1. We have the two parts - the APGsembly code generated by the script and the static tape interpreter of GPC. But they're located in different places each. I would suggest to assume the user has in directory golly/scipts/calculator all the components from github and a script that reads apgsembly.txt and places all it together in working calculator. I think it's important because people could play with the current not optimized hardware this way, and even if you have an optimized hardware you will still need to have all this functionality for the users.

2. A design note - If the program is long enough and the printer output is also long enough they'll intersect eventually (after enough prints). To avoid this I suggest to print in the original SW direction instead of current NW i.e. to rotate the printer 90 degree anti-clockwise. I think the SQ will not mind, if the printer is placed below it.
dvgrn wrote:
November 10th, 2019, 11:34 pm
It's funny that calcyman had all this compiler and emulator stuff available almost a decade ago, but nobody ever did anything with it!
Yes, for a while now I was showing people CGOL patterns and the calculator was one of the most interesting patterns that people were extremely impressed by. It was a real pain for me having it as a black box. I think I gave up when I saw the glider is doing some logic and I have no clue how it works. Good job on back engineering it. I think calcyman just wanted to print pi digits, he didn't want to support apgsembly in the wider sense. I mean how many people even knew APGsembly exists? On the other hand he documented the apgsembly code, so he did wanted people to use it eventually. Maybe there was simply no interest at a time...

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

Re: Smaller Pi Calculator Challenge

Post by dvgrn » November 11th, 2019, 12:15 pm

simsim314 wrote:
November 11th, 2019, 11:23 am
1. We have the two parts - the APGsembly code generated by the script and the static tape interpreter of GPC. But they're located in different places each. I would suggest to assume the user has in directory golly/scipts/calculator all the components from github and a script that reads apgsembly.txt and places all it together in working calculator.
Yup, that's the basic plan. Version 1.0 of the compiler will either read from apgsembly.txt, or accept program input from the clipboard. It will build a custom calculator with the requested components, probably listed in header comments in the APGsembly code, and then compile the program to connect to those components.
simsim314 wrote:
November 11th, 2019, 11:23 am
2. A design note - If the program is long enough and the printer output is also long enough they'll intersect eventually (after enough prints). To avoid this I suggest to print in the original SW direction instead of current NW i.e. to rotate the printer 90 degree anti-clockwise. I think the SQ will not mind, if the printer is placed below it.
Well, that's easy enough to do, assuming you mean "SE" and "NE". But I kind of like the new direction... I might just have the compiler check the length of the program, and move the digitprinter to a safe offset. The whole thing can just move NE any distance, with no other adjustments needed.

-- Or if the plans for new custom components work out, we can add both an NE_DIGITPRINTER and a SE_DIGITPRINTER to the component list, and have the compiler add in whichever one the APGsembly header comments call for. Might as well go get the NE_APRILFOOLPRINTER from the fine-structure constant calculator and have it as an option, too, while we're at it.
simsim314 wrote:
November 11th, 2019, 11:23 am
I think calcyman just wanted to print pi digits, he didn't want to support apgsembly in the wider sense. I mean how many people even knew APGsembly exists? On the other hand he documented the apgsembly code, so he did wanted people to use it eventually. Maybe there was simply no interest at a time...
Ten years ago was really a different era in Conway's Life pattern engineering. Andrew Wade's Gemini hadn't quite appeared on the scene yet, so the original Caterpillar was one of the very few comparably ambitious megapatterns... along with Brice Due's metapixels from 2006, I guess, and also calcyman's P1 megacell from 2008, which really never quite got the advertising it deserved either.

Anyway, I seem to remember most people being pretty much floored by the fact that this thing could run at all. The fact that the calculators spent most of their time in a quiescent state, waiting for the next clock tick to extract a Z/NZ from the regulators, made it fairly painful to figure out what the pattern was doing.

Also, it's strange to remember this, but Golly didn't even support multiple states until December 2008, about a year before the calculators showed up. Before that, a slightly buggy version of MCell was the only choice for anyone doing pattern engineering who wanted a LifeHistory-style blueprint view of a project. Golly's envelope.py was just too awkward for editing work.

But the pi calculator was way too big to fit in MCell's slow and limited universe. And LifeHistory didn't get included in Golly until September 2009; before that, it was a separate download from the Rule Table Repository. So only early adopters of Golly 2.1 would have had it available, and hardly anyone had any practice in using it.

Reverse engineering the pi calculator would have been a really horrible headache without LifeHistory to lean on. So I guess I can see why everyone in February 2010 (myself included) preferred to stand back and marvel, rather than diving into the details.

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

Re: Smaller Pi Calculator Challenge

Post by simsim314 » November 12th, 2019, 7:51 am

dvgrn wrote:
November 11th, 2019, 12:15 pm
I might just have the compiler check the length of the program, and move the digitprinter to a safe offset. The whole thing can just move NE any distance, with no other adjustments needed.
Just notice if the program is way too long - the printer will jump to unknown place. Say if I have 10M lines of code. I don't see it happening soon so for any practical short term it doesn't matter, but in the long term it might, if apgsembly becomes a success. I guess until then we will be able to rotate the printer...
dvgrn wrote:
November 11th, 2019, 12:15 pm
So I guess I can see why everyone in February 2010 (myself included) preferred to stand back and marvel, rather than diving into the details.
Interesting.

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

Re: Smaller Pi Calculator Challenge

Post by simsim314 » November 17th, 2019, 1:18 am

99 bottles of beer on the wall... A recursive song printed with apgsembly on GPC.

EDIT Recommended golly step 2^34

EDIT2 Reposted with minor bug fix which caused rouge gliders.
Attachments
99bottles.mc.gz
(209.35 KiB) Downloaded 186 times
Last edited by simsim314 on November 19th, 2019, 1:25 am, edited 2 times in total.

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

Re: Smaller Pi Calculator Challenge

Post by dvgrn » November 17th, 2019, 10:25 am

simsim314 wrote:
November 17th, 2019, 1:18 am
99 bottles of beer on the wall... A recursive song printed with apgsembly on GPC.

EDIT Recommended golly step 2^34
Or for a use of the same technology on a much simpler scale, here's one that displays a graph of y = sin(x):
sine-display.mc
draws y = sin(x) on the SQ "display"
(341.7 KiB) Downloaded 145 times
I cheated, though. The "calculator" doesn't actually calculate anything, just hard-codes the drawing instructions.

This pattern can best be watched step-by-step in LifeHistory at a step size of 2^22, which is one clock tick for this GPC. The 99-bottles pattern uses the same step size.

There are a variety of GPCs checked in for different program sizes, but any calculator that uses its SQ unit will need at least a 2^22 clock speed. Even that might be cutting things a little close; the original Osqrtlogt clock guns were 2^24.

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

Re: Smaller Pi Calculator Challenge

Post by simsim314 » November 18th, 2019, 3:53 am

Koch curve fractal (recommended step 2^30 and above). The apgsembly code is here.

I've used this logic golly script:

Code: Select all

import golly as g 

def dir2xy(d):
	if d == 0:
		return (1,0)
	if d == 1:
		return (1, 1)
	if d == 2:
		return (0, 1)
	if d == 3:
		return (-1, 1)
	if d == 4:
		return (-1, 0)
	if d == 5:
		return (-1, -1)
	if d == 6:
		return (0, -1)
	if d == 7:
		return (1, -1)


def draw(d, x, y):
	dx, dy = dir2xy(d)
	
	for i in range(5):
		g.setcell(x + i * dx, y + i * dy, 1)
		
	return (x + 5 * dx, y + 5 * dy)

ds = [0, 1, 6, 1]
vals = [0]
d = 0 
x, y = draw(d, 0, 0)

def next():
	global d 
	global ds 
	global vals 
	global x 
	global y 
	
	i = 0 
	
	while vals[i] == 3:
		vals[i] = 0
		i += 1
		
		if i == len(vals):
			vals.append(0)
			break
			
	vals[i] += 1
	d += ds[vals[i]]
	d = d % 8
	x, y = draw(d, x, y)
cnt = 0 

while True:
	next()
	cnt += 1 
	
	if cnt % 10000 == 0:
		g.update()
Attachments
Koch.mc
(604.21 KiB) Downloaded 134 times

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

Re: Smaller Pi Calculator Challenge

Post by simsim314 » November 19th, 2019, 11:12 am

A script to generate any cgol state (i.e. black and white image) with the SQ display.

Instructions:

1. Inside golly open
GPC-2^22.mc
(593.1 KiB) Downloaded 109 times
(taken from here)

2. Run this script (copy -> open golly -> Ctrl + R) - do not press OK when you see a note Copy state from golly

Code: Select all


import golly as g 
import ast
g.addlayer()
g.note("Copy state from golly")
g.putcells(g.parse(g.getclipstr().split('rule = B3/S23')[1]))

def SnakeReader():
	
	rect = g.getrect()
	
	y0 = rect[1]
	h = rect[3] 
	l = rect[2] 
	x0 = rect[0] 
	y = y0
	x = x0 
	code = "" 
	dir = 1
	
	if l % 2 == 1:
		l += 1 
	while True: 
		
		if g.getcell(x, y) != 0:
			code += "SET;"
			
		if y < y0:
				
			dir = 1
			y += dir
			x += 1
			code += "Y+;X+;"
			
		elif y >= y0 + h:
			dir = -1
			y += dir 
			x += 1
			code += "Y-;X+;"
			
		else: 
			if dir == -1:
				code += "Y-;"
			else: 
				code += "Y+;"

			y += dir 
		
		if x > x0 + l and y == y0 and dir == 1:
			break 
			
	for i in range(l + h):		
		code = code.replace("Y+;X+;Y-;", "X+;")
		code = code.replace("Y-;X+;Y+;", "X+;")
		code = code.replace("Y+;Y-;", "")
		code = code.replace("Y-;Y+;", "")
	
	code = code.replace("X", "Z").replace("Y", "X").replace("Z", "Y")
	return code 

T6s = ""
idx = 0 

cmd = SnakeReader()
cmd = cmd.split(";")

for i in cmd:
	if i == "SET":
		T6s += "111"
	if i == "X+":
		T6s += "010"
	if i == "X-":
		T6s += "011"
	if i == "Y+":
		T6s += "100"
	if i == "Y-":
		T6s += "101"
	
T6s += "000"


program = {}
registers = {"T6":[0,T6s]}
g.dellayer()

blck = g.parse("2o$2o!")
boat = g.parse("bo$obo$b2o!")

#Use movement block as center (dx, dy)
def setupR(val, dx, dy):
	g.select([dx, dy, 2, 2])
	g.clear(0)
	g.putcells(blck, dx - val, dy - val)
	
#Use head of slider gun block as center for (dx, dy)
def setupT(dhead, binaryStr, dx, dy):
	setupR(dhead, dx, dy)
	setupR(len(binaryStr) - 1 - dhead, dx + 310, dy - 506)
	setupR(dhead * 16, dx + 130, dy - 3286)
	setupR(dhead * 16, dx - 1113, dy - 2062)

	if len(binaryStr) == 0:
		return 
		
	x = dx + 142
	y = dy - 3305
	g.select([x, y, 3, 3])
	g.clear(0)

	for i in range(len(binaryStr)):
		if binaryStr[i] == '0':
			g.putcells(boat, x, y)
		else:
			g.putcells(boat, x - 3, y - 3)
			
		x -= 16 
		y -= 16

def setRegs(registers):
	T0x = 65281 
	T0y = 29180
	Td = 2560 

	R0x = 16608
	R0y = 79397
	Rd = 1024

	for reg in registers:
		if reg[0] == 'T':
			dreg = int(reg.replace("T", ""))
			dx = T0x - dreg * Td
			dy = T0y + dreg * Td
			setupT(registers[reg][0], registers[reg][1], dx, dy)
		if reg[0] == 'R':
			dreg = int(reg.replace("R", ""))
			dx = R0x - dreg * Rd
			dy = R0y + dreg * Rd
			setupR(registers[reg], dx, dy)
			
setRegs(registers)

APGsembly = """
INITIAL; *; ROOT; INC SQX, INC SQY, NOP

ROOT; *; A0; NOP

# --- Printing letter from T6 --- 
A0; *; A1; READ T6
A1; Z; X0; RESET T6, INC T6
A1; NZ; X1; SET T6, INC T6
X0; *; Y0; READ T6
Y0; Z; X00; RESET T6, INC T6
Y0; NZ; X01; SET T6, INC T6
X01; *; Y01; READ T6
Y01; Z; A0; INC SQX, RESET T6, INC T6
Y01; NZ; Z01; DEC SQX, SET T6
Z01; *; A0; INC T6
X1; *; Y1; READ T6
Y1; Z; X10; RESET T6, INC T6
Y1; NZ; X11; SET T6, INC T6
X10; *; Y10; READ T6
Y10; Z; A0; INC SQY, RESET T6, INC T6
Y10; NZ; Z10; DEC SQY, SET T6
Z10; *; A0; INC T6
X11; *; Y11; READ T6
Y11; Z; X110; READ SQ, RESET T6
Y11; NZ; A0; SET T6, SET SQ, INC T6
X110; *; A0; INC T6
X00; *; RX; DEC T6
RX; Z; ROOT; NOP
RX; NZ; RX; DEC T6

"""

outputlist = ["NOP", "OUTPUT 0", "OUTPUT 1", "OUTPUT 2", "OUTPUT 3", "OUTPUT 4", "OUTPUT 5", "OUTPUT 6", "OUTPUT 7", "OUTPUT 8", "OUTPUT 9", "OUTPUT .", \
             "DEC SQX", "INC SQX", "READ SQ", "SET SQ", "DEC SQY", "INC SQY", \
             "RESET T0", "SET T0", "READ T0", "DEC T0", "INC T0", "RESET T1", "SET T1", "READ T1", "DEC T1", "INC T1", \
             "RESET T2", "SET T2", "READ T2", "DEC T2", "INC T2", "RESET T3", "SET T3", "READ T3", "DEC T3", "INC T3", \
             "RESET T4", "SET T4", "READ T4", "DEC T4", "INC T4", "RESET T5", "SET T5", "READ T5", "DEC T5", "INC T5", \
             "RESET T6", "SET T6", "READ T6", "DEC T6", "INC T6", "RESET T7", "SET T7", "READ T7", "DEC T7", "INC T7", \
             "RESET T8", "SET T8", "READ T8", "DEC T8", "INC T8", "RESET T9", "SET T9", "READ T9", "DEC T9", "INC T9", \
             "RESET T10", "SET T10", "READ T10", "DEC T10", "INC T10", "RESET T11", "SET T11", "READ T11", "DEC T11", "INC T11", \
             "RESET T12", "SET T12", "READ T12", "DEC T12", "INC T12", "RESET T13", "SET T13", "READ T13", "DEC T13", "INC T13", \
             "RESET T14", "SET T14", "READ T14", "DEC T14", "INC T14", "RESET T15", "SET T15", "READ T15", "DEC T15", "INC T15", \
             "RESET T16", "SET T16", "READ T16", "DEC T16", "INC T16", "RESET T17", "SET T17", "READ T17", "DEC T17", "INC T17", \
             "RESET T18", "SET T18", "READ T18", "DEC T18", "INC T18", "RESET T19", "SET T19", "READ T19", "DEC T19", "INC T19", \
             "TDEC R0", "INC R0", "TDEC R1", "INC R1", "TDEC R2", "INC R2", "TDEC R3", "INC R3", "TDEC R4", "INC R4", \
             "TDEC R5", "INC R5", "TDEC R6", "INC R6", "TDEC R7", "INC R7", "TDEC R8", "INC R8", "TDEC R9", "INC R9", \
             "ADD B0", "ADD B1", "ADD A1", "SUB B0", "SUB B1", "SUB A1", "MUL 1", "MUL 0"]

outputdict = {}
for i in range(len(outputlist)):
  outputdict[outputlist[i]]=i

ZNZ = g.parse("""135bo$133b3o$132bo$132b2o7bo$139b3o$138bo24bo$138b2o23b3o$166bo$165b2o
$180b2o$180bo$177b2obo$176bo2bo$177b2o$147b2o13b2o$147b2o13b2o7$149b2o
6bob2o$126b2o21bobo3b3ob2o$125bobo23bo2bo$125bo25b2o2b3ob2o$124b2o31bo
bo$157bobo10b2o$158bo11b2o11$17bo127bo$15b3o125b3o$14bo127bo$14b2o126b
2o$20bo127bo$18b3o125b3o$17bo127bo$17b2o126b2o14$7b2o126b2o$8bo127bo$
5b3o125b3o$5bo127bo$191bo$189b3o$188bo$188b2o$23b2o126b2o$23bo127bo$
24b3o125b3o41b2o$26bo127bo42bo$197bob2o$189b2o4b3o2bo$189b2o3bo3b2o$
194b4o$180b2o15bo$15b2o126b2o34bobo12b3o$6b2o7b2o117b2o7b2o34bo13bo$7b
o127bo42b2o14b5o$7bobo125bobo60bo$8b2o126b2o58bo$24b2o126b2o42b2o$24bo
127bo$22bobo125bobo$22b2o126b2o3$3b2o126b2o$4bo127bo$4bobo18bo106bobo
18bo$5b2o17bobo106b2o17bobo$25bo127bo$32bo127bo$32b3o125b3o$35bo127bo$
34b2o126b2o$49b2o126b2o$49bo127bo$46b2obo124b2obo$2b2o41bo2bo81b2o41bo
2bo$bobo42b2o81bobo42b2o$bo5b2o22b2o96bo5b2o22b2o$2o4bo2bo21b2o95b2o4b
o2bo21b2o$7b2o126b2o3$9b2o7b2o3bo113b2o7b2o3bo$9b2o7bo3bobo112b2o7bo3b
obo$19bo3bobo121bo3bobo$20bo3bobob2o118bo3bobob2o$18bob4o2bob2o116bob
4o2bob2o$17bobo3bobo119bobo3bobo$17bobo2bo2b2ob2o115bobo2bo2b2ob2o$18b
o3b2o2bobo117bo3b2o2bobo$26bobo10b2o113bobo10b2o$27bo11b2o114bo11b2o!""")

onlyZ = g.parse("""135bo$133b3o$132bo$132b2o7bo$139b3o$138bo24bo$138b2o23b3o$166bo$165b2o
$180b2o$180bo$177b2obo$176bo2bo$177b2o$147b2o13b2o$147b2o13b2o7$149b2o
6bob2o$126b2o21bobo3b3ob2o$125bobo23bo2bo$125bo25b2o2b3ob2o$124b2o31bo
bo$138b2o17bobo10b2o$138bo19bo11b2o$139b3o$141bo9$17bo$15b3o$14bo$14b
2o$20bo$18b3o$17bo$17b2o14$7b2o$8bo$5b3o$5bo5$23b2o$23bo$24b3o$26bo6$
15b2o$6b2o7b2o$7bo$7bobo$8b2o$24b2o$24bo$22bobo$22b2o3$3b2o$4bo$4bobo
18bo$5b2o17bobo$25bo$32bo$32b3o$35bo$34b2o$49b2o$49bo$46b2obo$2b2o41bo
2bo$bobo42b2o$bo5b2o22b2o$2o4bo2bo21b2o$7b2o3$9b2o7b2o3bo$9b2o7bo3bobo
$19bo3bobo$20bo3bobob2o$18bob4o2bob2o$17bobo3bobo$17bobo2bo2b2ob2o$18b
o3b2o2bobo$26bobo10b2o$27bo11b2o!""")

splitter = g.parse("""48bo$48b3o$51bo$50b2o3$42b2o$42bo$39b2obo$39bo2b3o4b2o$40b2o3bo3b2o$
42b4o$42bo15b2o3b2o$43b3o12bobobobo$46bo13bobo$41b5o14bo2bo$41bo19bobo
$43bo18bo$42b2o4$77b2o$77b2o4$57b2o$56bobo$56bo18b2o$55b2o7b2o9bo$64b
2o10bo$75b2o$72b2o$9bo62b2ob2o$9b3o63bo$12bo59b2o3bo$11b2o10bo47bo2b4o
$22bobo45bobobo$22bobo27bo18bo2bob2o$o20b2ob3o25b3o19bobo$3o24bo27bo
17b2o2bo$3bo17b2ob3o6bo20b2o14bobo2bobo$2b2o17b2obo6b3o15bo20b2o2bobo$
30bo18b3o23bo$30b2o20bo$5b2o44b2o$4bo2bo$5b2o4$48b2o$48b2o17b2o$67b2o$
17b2o$18bo$15b3o50b2o$15bo52bo$55b2o12b3o$38b2o16bo14bo$38bo14b3o$39b
3o11bo$41bo!""")

transrefl = g.parse("""24bo$22b3o$21bo$20bobo$20bobo$21bo5$5b2o$5b2o4$25b2o$25bobo$27bo$18b2o
7b2o$18b2o2$8bob2o$6b3ob2o$5bo$6b3ob2o$8bobo$8bobo$9bo6$18b2o$18b2o16$
3bob2o$b3ob2o$o$b3ob2o$3bobo2bo$6b3o$11bo5b2o$8b4o5b2o$8bo$9bo$8b2o!""")

Snark_S = g.parse("""15bo$13b3o$12bo$12b2o7$2b2o$bobo5b2o$bo7b2o$2o2$14bo$10b2obobo$9bobobo
bo$6bo2bobobobob2o$6b4ob2o2bo2bo$10bo4b2o$8bobo$8b2o!""")

Snark_E = g.parse("""18b2o$18bo$20bo$2o14b5o$bo13bo$bobo12b3o$2b2o15bo$16b4o$11b2o3bo3b2o$
11b2o4b3o2bo$19bob2o$19bo$18b2o3$10b2o$10bo$11b3o$13bo!""")

Snark_N = g.parse("""9b2o$8bobo$2b2o4bo$o2bo2b2ob4o$2obobobobo2bo$3bobobobo$3bobob2o$4bo2$
17b2o$8b2o7bo$8b2o5bobo$15b2o7$5b2o$6bo$3b3o$3bo!""")

ZNZstopper = g.parse("2o126b2o$o127bo$b3o125b3o$3bo127bo!")

startpat = g.parse("3o$o$bo!", 255, 58)

progname = "letters-test"

proglines = (APGsembly + "\nEND OF PROGRAM; Z\nEND OF PROGRAM; NZ").split('\n')

# pre-processing to remove blank lines and comments, and deal with * / ZZ format
progonly = []
NZflag = 0
for line in proglines:
  if line.strip()!="" and line.strip()[:1]!="#":
    if NZflag == 0:
      Zline = line
      NZflag = 1
    else:
      NZflag = 0
      if line == "END OF PROGRAM; NZ":
        break
      
      # process the next pair of lines, make sure it's a matched Z + NZ set
      Zparts = Zline.split("; ")
      NZparts = line.split("; ")
      if Zparts[0]==NZparts[0]:
        if Zparts[1]=="Z" and NZparts[1]=="NZ":
          progonly += [Zline,line]
        else:
          g.note("Pre-processing failed on lines:\n" + Zline + "\n" + line + "\nNeed Z line followed by NZ line, or * / ZZ syntax.")
          g.exit()
      else:
        if Zparts[1]=="*":
          progonly += [Zline.replace("*","Z"),Zline.replace("*","NZ")]
          Zline = line
          NZflag = 1
        elif Zparts[1]=="ZZ":
          progonly += [Zline, Zparts[0]+"; NZ"]  # .replace("; ZZ;","; Z;")
          Zline = line
          NZflag = 1
        else:
          g.note("Pre-processing failed on lines:\n" + Zline + "\n" + line + "\nNeed a Z and NZ line for each state, or * / ZZ syntax.")
          g.exit()

numstates = len(progonly)

statedict = {}
for i in range(0,numstates,2):
  parts = progonly[i].split("; ")
  statedict[parts[0]]=i

if g.getname()[:3]!="GPC":
  g.new("Compiled " +  progname)
  GPClayer = -1
else:
  GPClayer = g.getlayer()
  g.addlayer()
  g.setname("Compiled " + progname)

g.putcells(startpat)

firstreflx, firstrefly = -1, -1
for k in range(0,numstates,2):
  g.putcells(Snark_N, 184+k*72, -20+k*56)
  g.putcells(Snark_E, -2177 + numstates*72 + len(outputdict)*16, -2369 -k*16 + numstates*72 + len(outputdict)*16)
  g.putcells(Snark_S, -7121 -k*24 - len(outputdict)*32 + len(outputdict)*16 + numstates*72, 2567 +k*8 + len(outputdict)*32 +len(outputdict)*16 + numstates*72)
  # The '72' above is mostly 64 per Z/NZ program row, but also 16 more cells diagonally for each state
  #   (there are only half as many states as rows) to leave enough space for all the reflectors at the bottom.
for i in range(numstates):
  parts = progonly[i].split("; ")
  if i%2==0:
    if parts[1]=="ZZ":
      g.putcells(onlyZ,i*64,i*64)
    else:
      g.putcells(ZNZ,i*64,i*64)
  if len(parts)==2:
    parts+=["",""]
  if parts[1]=="ZZ":
    parts = [parts[0],"Z",parts[2],parts[3]]
  actions = parts[3].split(", ")
  for j in actions:
    if j != "":
      g.putcells(splitter,-182 - outputdict[j]*64+i*64, 167 + outputdict[j]*64 + i*64)
  nextstate = parts[2]
  if nextstate != "":
    offset = statedict[nextstate]
    g.putcells(transrefl,-150 - len(outputlist)*64 + i*64 - offset*16, 165 + len(outputlist)*64 + i*64 + offset*16)

  # keep track of the placement of the first reflector, needed to place pattern correctly relative to GPC
  if firstreflx ==-1:
    firstreflx = -150 - len(outputlist)*64 + i*64 - offset*16
    firstrefly = 165 + len(outputlist)*64 + i*64 + offset*16

g.putcells(ZNZstopper,-49 + numstates*64,-11 + numstates*64)
g.fit()

if GPClayer != -1:
  calcpat = g.getcells(g.getrect())
  g.setlayer(GPClayer)
  g.putcells(calcpat, 77924 - firstreflx, 38284 - firstrefly)  # this is the location of the key first reflector in calculator, in the GPC
  if g.getname()[:6]=="GPC-2^":
    g.setstep(int(g.getname()[6:8]))
3. When you see the note: "Copy state from golly" - copy some state inside "B3/S23" rule and then press OK.

Example state to copy:

Code: Select all

x = 163, y = 148, rule = B3/S23
73b15o$71b40o$69b46o$66b24o5b22o$63b10o3b6o4b3o8b21o$52b3o5b12o26b3o5b
14o$52b7o3b8o37b15o$46b5o2bo4b3o3b5o38b16o$44b8o2bo5b3o21b3o20b7ob9o$
23b7o13b10ob2o6b2o15b18o11b5o5b8o$23b2o3b7o6b12o2bo8b2o10b22o10b6o5b8o
$24b2o8b3o4b13obo9b2o2b2ob27o10b5o7b7o$25b2o10b3o2b9o5bo9b2ob32o9b4o8b
7o$26bo12b3o2b6o6bo10b2ob33o21b6o$27bo13b2o2b4o7bo11b2ob3o10b21o20b6o$
27b2o14b2o2bo6bob2o11bo2bo23b8o21b7o$28bo15b2o6b3ob2o11b2o8bo17b8o20b
7o$28b2o15b2o3b5o2bo12b2o7b2o19b7o18b8o$29bo17bo2b5o2bo13bob3o3b2o2b6o
13b6o17b8o$29bo18bo2b4ob2o13b2ob4obobob9o6b3o3b6o18b6o$29b2o18bo2b3obo
15bob3o2bobo2b28o17b5o$30bo19bo2b2obo15bo2b2ob2ob2ob29o17b5o$30bo20bo
4bo16bob2obo3bo2b29o16b6o$30bo21bo2bo17bo4bo3b2ob30o14b9o$30bo21b4o17b
2o2bo5bo4b11o4b12o14b10o$30b2o21b2o19bo2bo5bo6b8o8b10o14b11o$31bo42bob
2o5b2o6b8o8b10o15b10o$31bo42bobo7bo8b7o8b11o15b9o$31bo42b3o7bo9b9o5b
15o12b9o$31bo43bo8bo10b10o4b16o11b10o$28bo2bo52bo16b4o5b15o11b11o$27b
2ob2o26b2o24b2o16b4o4b16o11b3o2b6o$12b5o9b3obo21b13o20bo16b4o5b16o10b
3o3b6o$9b5ob9o4bobo18b4o11b3o18bo16b5o5b15o11b2o4b6o$4b6o13b4o3bo16b3o
17b2o16bo17b5o4b16o4b2o4b2o4b7o$2b3o22b4o14b2o22b2o14bo18b5o4b4o2b16o
4b2o3b8o$3b2o24b2o12b2o25b2o13bo19b5o4b3o3b16o3b3o3b8o$5b2o35b2o27b2o
12bo20b4o5b3o4b14o4b2o4b8o$6b2o33bo30b2o11bo22b2o6b4o5b11o4b3o4b8o$8b
2o29b2o18b12o2b2o10bo32b4o4b8o7b2o5b8o$9b2o27b2o14b6o11b2obo10bo10b2o
20b4o5b7o15b7o$11b2o25bo12b4o17b2obo8b2o9b2o22b4o4b8o15b7o$12b2o23bo
11b3o21bob2o7bo8b2obo2b2o2b5o11b4o5b8o15b7o$13b2o21b2o8b3o24bo2bo7b9o
3bob11o10b5o5b8o15b6o$14b2o19b2o7b3o13b14o2b2o8b4o6bob12o9b7o4b8o14b7o
$15b2o18bo7b2o9b8o15bo17b2ob12o9b8o4b7o14b7o$16bo17b2o5b2o8b3o23b2o16b
o2b13o8b9o4b7o13b8o$17bo16bo5b2o7b3o26bo16bo5b10o8b9o5b6o13b8o$14b2ob
2o14b2o4b2o6b3o23b6o16bo5b12o7b8o6b6o4bo7b8o$14b2o2bo14bo5bo6b2o23b3o
4b3o14bo5b13o7b8o6b5o4b2o6b8o$13b4obo14bo4bo5b2o23b2o10b2o11b2o8b11o7b
8o4b7o3b3o6b7o$13b4o2bo12b2o4bo3b3o23b2o12b2o10bo10b11o7b3o3bo4b3ob3o
3b3o7b6o$13b5obo12bo6b4o24b2o14b2o9bo11b11o6b3o8b3o2b3o2b4o7b5o$12b6ob
o12bo33b2o16bo8b2o7b15o7b3o7b4o2b8o7b5o$12b6ob2o11bo14b8o11bo17b2o7bo
8b15o7b3o7b4o3b7o8b5o$12b6o2bo10b2o12b3o7b2o8bo19bo7bo8b14o8b4o5b6o3b
5o9b4o$11b8obo10bo12b2o11b2o6bo19bo6b2o9b13o8b5o4b6o3b4o10b4o$11b8obo
10bo11b2o13b2o4bo20bo6bo17b6o8b6o7b2o3b4o7b7o$11b5o4bo10bo10bo16bo4bo
20b2o5bo17b5o10b6o6b3o3b3o7b7o$18b3o10bo9b2o17bo3bo9b2o9b2o4b2o17b5o
10b7o6b2o4b3o6b7o$12b6o13bo8b2o18b2o2bo9b2o9b2o4bo18b5o23b3o4b2o6b7o$
14o17bo8bo20bo2bo20b2o3b2o18b3o5b13o8b3o4b2o6b6o$2bo28bo7b2o20bo2bo20b
o4bo6b2o11bo4b4o11b7o4b2o4b2o5b6o$3b2o26bo7bo21bo2bo20bo4b9o14b3o20b4o
8b2o4b6o$4b2o25bo7bo10bo10b2obo20bo12bo12b3o25b3o7bo4b6o$5b2o24bo7bo9b
2o11bob2o18bo12b2o11b2o29b3o5b2o3b6o$6b2o23bo7bo9b2o10b2o2bo18bo12bo
10b3o32b2o4b2o3b7o$7b2o22bo7bo21b2o2b2o16b2o12bo9b2o35b3o2b2o3b7o$8b2o
21bo7bo21bo4b2o14b3o12bo7b2o39b2o6b8o$9b2o20bo7bo21bo5b2o11b3obo11b2o
6b2o41b2o4b9o$10b2o19bo7bo20b2o6b3o7b3o2b2o11bo5b3o43b2o3b9o$12b2o17bo
7b2o19bo10b8o4b2o10b2o4b2o16b13o17b2o2b10o$10bo2b2o16bo8bo18bo9bo12b5o
8bo4b2o13b5o12b4o14b2o2b9o$10b2o3b2o14bo9bo16b2o9b2o10b2obob3o5b2o4bo
12b3o19b3o13b2o2b8o$10b4o3b3o11b2o8b2o14b2o11bo6b4o3bo4b2o3bo4b2o10b2o
25b2o12b2o2b7o$10b6o3b4o9bo9b3o10b2o13bo3b4o6bo5bo2bo5bo9b3o2b9o17b2o
11b2ob7o$10b6o4b4o8bo11b3o5b4o8bo5b2o12b2o4b4o5bo8b2o4bo7b3o17b2o10b2o
b6o$10b5o2b3o12bo14b6o11bo6bo13bo5b2o5b2o7bo35b2o10bo2b4o$10b3o2b3o14b
o8bo13bo8b2o5bo13bo5bo6bo6b2o7b4o26b2o9b2ob4o$9b3o2b2o16bo9b2o8b3o10bo
5bo13bo5bo5bo6b2o5b4o2b4o25bo9bob4o$9b2o2b2o17b2o9b10o12b2o4b2o12bo5bo
4b2o5b2o4b2o9b3o24bo8bo2b3o$9bo2bo20bo32bo4b2o12bo4bo4b2o5b2o4b2o12b2o
15b2o7bo7bo2b3o$11bo21bo33bo3bo13b2o2b2o4bo6bo4b2o14b2o15b4o4b2o7bob3o
$10bo21b2o34b4o13b5o4bo6bo4b2o16b2o17b3o3b2o6bob2o$9bo20b2ob2o34b2o15b
2o5b2o5b2o4bo18bo19b2o3bo6bo2bo$8b7o15bo3bo51bo5b2o6bo4b2o18b2o20bo3bo
5b2obo$14b3o12bo4bo51bo5bo6bo5bo20bo11b4o6bo2bo6bobo$9b3o5b3o9bo4b2o
50bo5bo5b2o5bo20bo8b10o7bo5bobo$9b7o3b2o8bo5bo50bo5bo5bo6bo20bo7b2o9b
2o5bo5bo$9b7o5b2o6bo5bo50bo5bo4b2o6bo8b3o9bo6bo13bo4b2o4b2o$9b8o5b3o4b
2o4b2o10bo10b15o13bo5b2o3bo7bo8b2o10bo5bo15bo4bo5bo$9b8o7b2o4bo5bo9bo
7b5o13b4o4bo5bo5b2o3bo7bo20bo4bo17bo3bo5bo$9b9o7b2o3b2o4bo9bo4b4ob2o
17b3o2bo5bo6bo2b2o8bo19bo3b2o17b2o2b2o4bo$9b10o6b2o4bo4b2o8bo2b3o4b2o
19bo2bo4b2o6bo2bo9bo18b2o3bo19bo3bo4bo$9b11o4b2o6b3o2bo8bo4bo2bobo22b
2o4bo7bo2bo9b2o17bo4bo19bo3bo4bo$9b11o3b2o9b5o7bo5bob3o22bo5bo7b4o10b
2o15bo5bo19b2o2bo4bo$9b11o3bo14bo7b2o4bobo23bo6bo6b5o11b2o13b2o4b2o20b
o2bo4bo$10b10o2b2o14b2o7b2o3b3o30bo5b2o2bo13b2o11b2o5b2o10bo9bo2bo4bo$
10b9o3bo16bo13bo30b2o4b2o3bo15b3o5b3o8bo9b3o8bo2bo4bo$10b10obo13b6o43b
o5bo4bo17b7o10bo10bo9bo2bo3b2o$11b8o2bo9b5o4b2o42bo5bo4bo34bo19bo3bo3b
o$11b8obo7b4o6bo2bo41b2o5bo4bo30bo3b2o18bo3bo3bo$12b6o2bo4b3o9b3o2bo
40bo6bo4bo30b2o3bo17b2o3bo3bo$12b6ob2o2b3o12b3o2bo38bo7bo4bo25b2o4b2o
3bo15b2o4bo2b2o$13b5obob3o5b2o6b5ob2o36b2o7bo4bo26b2o4bo3b2o14bo5bo2bo
$14b3o2b3o2bo4b3o4b7ob2o34b2o9bo3bo27b3ob2o5b2o10b2o6bo2bo$15b2ob2o3b
3o4b2o4b7o2b2o33bo11b5o28b3o7b3o6b3o6b2o2bo$16bobo2b6o3b3o3b9ob2o30b2o
14b3o40b8o8bo3bo$20b7o4b2o4b3o2b4o2b2o27b2o17bo13b12o31bo2b2o$18b10o3b
3o4bo4b4o2b2o24b3o18bo12b4o3bo4b3o29bo2bo$19b9o4b2o10b4o2b3o21b2o20b2o
9b7o2bo4bo2b2o26b2ob2o$20b9o3b3o10b5o2b3o16b3o23bo9b11o2bo4b2o25bo2bo$
21b9o2b3o11b5o3b4o10b4o25bo8b16o2b2obo24bob2o$22b14o10b7o5b11o28b2o7b
19o3bo22bo2bo$23b13o11b9o14b7o21bo7b19o3b2o21b4o$24b13o13b13o7b8o20b2o
6b25o19b4o$26b12o15b11o8b7o20bo6b25o19bo2bo$27b14o14b10o8b8o8b3o8bo6b
6o8b10o18bo3b2o$28b14o14b10o7b9o6b8o4b2o20b10o16b2o4bo$29b14o14b13o2b
12o2b13o2b2o20b9o16bo5bo$30b13o14b43o2b2o20b8o15bo5b2o$32b10o16b43o2b
2o20b6o15b2o5bo$33b9o17b43o2b2o20b5o14b2o5b2o$34b9o17b6o2b35o2b2o21bo
15b3o3b3o$35b10o17b6o4bo8b23o2b2o35b2ob5o$36b11o17b6o13b5o9b9o2b2o31b
2o$37b10o19b7o26b8o2b3o28b2o$38b9o20b8o24b10o2b3o24b2o$39b7o21b10o4b5o
13b11o3b4o18b4o$40b7o20b21o9b12o7b5o11b4o$41b7o21b37o14b13o4bo$42b8o8b
4o9b34o29b4o$44b7o7b5o10b26o3b2o12b21o$45b8o5b5o11b21o19b22o$46b8o4b6o
11b13ob3o20b23o$48b16o21b2o23b24o$49b16o38b29o$51b14o36b28o$53b13o5b3o
17b2o7b25o$55b21o6b4o3b7o2b23o$57b21o3b35o$59b54o$62b49o$65b44o$68b39o
$72b34o$83b21o$90b10o!
You can take any monochromatic black and white image, copy it and paste in golly.

4. Rotate clockwise 45 or 90 degrees clockwise.

5. Run at 2^30+ and wait for the image to be printed. It generates infinite loop copying the same image in a row.

6. Enjoy!

EDIT A simple script to reduce image resolution of selected area:

Code: Select all

import golly as g 

rect = g.getselrect()

x0 = rect[0] + rect[2] + 10
y0 = rect[1]
d = int(g.getstring("Reduce resolution by:", "3"))

for x in range(rect[0], rect[0] + rect[2], d):
	for y in range(rect[1], rect[1] + rect[3], d):
		xi = (x - rect[0]) / d
		yi = (y - rect[1]) / d
		
		if g.getcell(x, y) == 1:
			g.setcell(xi + x0, yi + y0, 1)
		
Similarly swap black-white script:

Code: Select all

import golly as g 

rect = g.getrect()

for x in range(rect[0], rect[0] + rect[2]):
	for y in range(rect[1], rect[1] + rect[3]):
		if g.getcell(x, y) == 0:
			g.setcell(x, y, 1)
		else:
			g.setcell(x, y, 0)

User avatar
gameoflifemaniac
Posts: 1229
Joined: January 22nd, 2017, 11:17 am
Location: There too

Re: Smaller Pi Calculator Challenge

Post by gameoflifemaniac » November 20th, 2019, 2:51 am

What about making the long-lost unbounded binary counter and the pseudoruler generator using the new GPC?
I was so socially awkward in the past and it will haunt me for the rest of my life.

Code: Select all

b4o25bo$o29bo$b3o3b3o2bob2o2bob2o2bo3bobo$4bobo3bob2o2bob2o2bobo3bobo$
4bobo3bobo5bo5bo3bobo$o3bobo3bobo5bo6b4o$b3o3b3o2bo5bo9bobo$24b4o!

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

Re: Smaller Pi Calculator Challenge

Post by simsim314 » November 20th, 2019, 4:48 am

gameoflifemaniac wrote:
November 20th, 2019, 2:51 am
What about making the long-lost unbounded binary counter and the pseudoruler generator using the new GPC?
This is extremely trivial task with the current state of GPC capabilities (6 lines of code):

Code: Select all

#Binary adder in SQ 
INITIAL; *; A0; NOP

A0; *; A1; READ SQ
A1; Z; B0; SET SQ, DEC SQY
A1; NZ; A0; INC SQY, NOP

B0; Z; A0; NOP
B0; NZ; B0; DEC SQY
I would be glad if people join and try to play with apgsembly. If something is missing in the documentation and there is some bottleneck in the learning curve myself and I'm sure dvrgn would also be glad to help and add explanations.

EDIT With today level of advancement in the calculator, we can even print the numbers one after another, but I think more impressive would be to print all prime numbers, and this will take some time to develop still.

EDIT2 Today we can actually draw a real image of infinite ruler as well. I see no point in doing so - it's some work, it's an obviously performed task, and it doesn't proves anything that we don't know.
Attachments
sq-adder.mc
(597.28 KiB) Downloaded 107 times

User avatar
gameoflifemaniac
Posts: 1229
Joined: January 22nd, 2017, 11:17 am
Location: There too

Re: Smaller Pi Calculator Challenge

Post by gameoflifemaniac » November 20th, 2019, 12:21 pm

So what's next? I'm very excited about what else it can print.
I was so socially awkward in the past and it will haunt me for the rest of my life.

Code: Select all

b4o25bo$o29bo$b3o3b3o2bob2o2bob2o2bo3bobo$4bobo3bob2o2bob2o2bobo3bobo$
4bobo3bobo5bo5bo3bobo$o3bobo3bobo5bo6b4o$b3o3b3o2bo5bo9bobo$24b4o!

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

Re: Smaller Pi Calculator Challenge

Post by dvgrn » November 20th, 2019, 1:44 pm

gameoflifemaniac wrote:
November 20th, 2019, 12:21 pm
So what's next? I'm very excited about what else it can print.
The GPC / APGsembly system is really very versatile. With the right program it could print the prime numbers using English text -- "two", "three", etc. -- or count in Roman numerals, or draw a graph on the SQ quarter-plane of anything you can write an algorithm for.

I think simsim314's binary counter program doesn't really need to use the two-dimensional SQ unit. The much simpler binary-tape "T" units can handle the same counting task.

Go ahead and try writing a simple APGsembly program, and see if it runs the way you expect it to in the APGsembly-emulator. If the emulator doesn't complain, then the compiler should be able to turn that program into a Life pattern. The pseudoruler generator would be a good advanced project, maybe to be sent to the old digit printer with the digits all strung together, or maybe separated by .s. The printer would have to be modified slightly to allow for spaces between digits. The original pseudoruler generator probably used the same printer -- I wonder if it was programmed to do the right thing after it got past "9"?

A somewhat more versatile "modularized compiler" will be showing up in a week or so, which will build the entire pattern from the ground up, with just the components needed for a particular program, instead of starting from a GPC.

At that point it will also become relatively easy to invent new logic circuits and compile them into a calculator with different capabilities. Maybe eventually we'll hook up a construction arm or two, and get back to universal computer-constructor capability -- but without the leaky memory tapes that plagued the 2009 Spartan universal computer-constructor.

User avatar
gameoflifemaniac
Posts: 1229
Joined: January 22nd, 2017, 11:17 am
Location: There too

Re: Smaller Pi Calculator Challenge

Post by gameoflifemaniac » November 20th, 2019, 2:28 pm

I'm not sure how do I use the script. Do I need some external program?
I was so socially awkward in the past and it will haunt me for the rest of my life.

Code: Select all

b4o25bo$o29bo$b3o3b3o2bob2o2bob2o2bo3bobo$4bobo3bob2o2bob2o2bobo3bobo$
4bobo3bobo5bo5bo3bobo$o3bobo3bobo5bo6b4o$b3o3b3o2bo5bo9bobo$24b4o!

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

Re: Smaller Pi Calculator Challenge

Post by dvgrn » November 20th, 2019, 3:12 pm

gameoflifemaniac wrote:
November 20th, 2019, 2:28 pm
I'm not sure how do I use the script. Do I need some external program?
Just start by running the APGsembly-emulator.py script in Golly -- nothing else is needed.

The default APGsembly program is the one used in the old Osqrtlogt, using an increasingly large triangle of bits in the SQ unit to count in binary, to get a O(sqrt(log(t))) growth rate.

You can try replacing that APGsembly code in the script -- maybe put in simpler programs like the ones given here (the "Reverse engineering" thread). The program is currently just hard-coded in the top of the emulator script, where it says APGsembly = """ ... """ .

If you can get the ADD R0 + R1 and the MULTIPLY R0 * R1 code to work in the emulator, then open up a GPC-2^24.mc pattern and put the same code into the compiler, and see if you can get a working ADD or MULTIPLY Life pattern out.

This will get a little more user-friendly eventually. The modularized compiler should probably ask the user to point to a separate APGsembly text file stored on your local machine somewhere. But there's no reason not to get started and try out the current version in the meantime!

User avatar
gameoflifemaniac
Posts: 1229
Joined: January 22nd, 2017, 11:17 am
Location: There too

Re: Smaller Pi Calculator Challenge

Post by gameoflifemaniac » November 20th, 2019, 3:23 pm

[Window Title]
Python error:

[Content]
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\frane\AppData\Roaming\Golly\golly_clip.py", line 6, in <module>
from glife.text import make_text
ImportError: No module named text


[OK]

Btw, maybe some more programs?
I was so socially awkward in the past and it will haunt me for the rest of my life.

Code: Select all

b4o25bo$o29bo$b3o3b3o2bob2o2bob2o2bo3bobo$4bobo3bob2o2bob2o2bobo3bobo$
4bobo3bobo5bo5bo3bobo$o3bobo3bobo5bo6b4o$b3o3b3o2bo5bo9bobo$24b4o!

Post Reply