David Bell's engineless caterpillar idea revisited

For discussion of specific patterns or specific families of patterns, both newly-discovered and well-known.
User avatar
simsim314
Posts: 1823
Joined: February 10th, 2014, 1:27 pm

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 7th, 2015, 8:00 am

Front with self destruct + generated SL (forgot it in previous design), same cost - 19 *WSS

Code: Select all

x = 153, y = 621, rule = LifeHistory
6.C$5.C.C$5.C.C$6.C2$.2C7.2C$C2.C5.C2.C$.2C7.2C2$6.C$5.C.C$5.C.C$6.C
53$9.3C$9.C2.C$9.C$9.C3.C$9.C$10.C.C50$62.3C$62.C2.C$62.C$62.C$63.C.C
2$54.3C$53.C2.C$56.C$52.C3.C$56.C$53.C.C41$6.C$5.3C$4.2C.C$4.3C$4.3C$
5.2C44$96.C$95.3C$95.C.2C$96.3C$96.2C23$73.C$72.3C$72.C.2C$73.3C$73.
2C5$70.C$69.3C$69.C.2C$70.3C$70.2C53$133.C$132.C.C$132.C2.C$133.2C19$
124.3C$123.C2.C$126.C$122.C3.C$126.C$123.C.C24$142.C$141.3C$140.2C.C$
140.3C$140.3C$141.2C35$126.3C$126.C2.C$126.C$126.C3.C$126.C$127.C.C8$
144.3C$143.C2.C$146.C$146.C$143.C.C17$151.C$150.3C$149.2C.C$149.3C$
150.2C6$123.C$122.3C$121.2C.C$121.3C$122.2C60$82.C$81.3C$81.C.2C$82.
3C$82.3C$82.2C2$92.3C$91.C2.C$94.C$90.C3.C$94.C$91.C.C12$97.3C$97.C2.
C$97.C$97.C3.C$97.C$98.C.C63$143.3C$142.C2.C$145.C$141.C3.C$145.C$
142.C.C4$132.3C$131.C2.C$134.C$130.C3.C$130.C3.C$134.C$131.C.C!

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

Re: David Bell's engineless caterpillar idea revisited

Post by dvgrn » August 7th, 2015, 10:34 am

simsim314 wrote:Front with self destruct + generated SL (forgot it in previous design), same cost - 19 *WSS...
Looks really good! Only one HWSS, and one pair of LWSSes that's maybe a little too close for comfort. The great majority of LWSS recipes won't work to add the trailing LWSS to that pair, due to preliminary sparks extending a little too far at just the wrong time. Luckily there are occasional exceptions:

Code: Select all

#C 21st "0" recipe in WSS750K.rle
x = 39, y = 43, rule = LifeHistory
19.2A$7.A11.2A$8.A$6.3A3$2A$2A4$10.3A2$8.A5.A12.A$8.A5.A2.2D7.A.A$8.A
5.A2.2D7.A.A$27.A$10.3A6$18.2A$17.A2.A$18.2A2$14.A$13.A.A$13.A.A$14.A
8$36.3A$35.A2.A$38.A$38.A$35.A.A!
So what's the next step? Is there code in the works to string together *WSS recipes, junk cleanup, and block-move recipes to automatically assemble a slow salvo that builds 19-*WSSS streams with the correct timing? Seems as if it has been possible for a while now to finish the construction on one of these strange-loop Caterpillars.

But it might still take a while to get all the bugs out of a universal Caterloopillar construction script. I'd love to see a random sample in action in the meantime...!

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

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 7th, 2015, 5:41 pm

The next steps are:

1. Self destruct for the back.
2. Adjustment script for front and back.
3. Cherry picking *WSS recipes.
4. Adding junk cleaning gliders for all the recipes.
5. Adding block moving monochromatic recipes to construct the "building blocks" of all the front and back recipes.
6. Putting it all together.

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

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 8th, 2015, 4:47 am

Here is a back with self destruct (hopefully adjustable for p8) - only 17 *WSS:

Code: Select all

x = 329, y = 1205, rule = LifeHistory
50$71.2C$70.3C$70.2C.C$71.3C$72.C253$171.C.C$174.C$174.C$171.C2.C$
172.3C11$136.2C$135.3C$135.2C.C$136.3C$137.C14$144.C.C$147.C$147.C$
144.C2.C$145.3C139$103.C.C$102.C$102.C3.C$102.C$102.C2.C$102.3C23$97.
C.C$96.C$96.C$96.C2.C$96.3C35$89.2C$89.3C$88.C.2C$88.3C$89.C6$69.C.C$
68.C$68.C3.C$68.C$68.C2.C$68.3C67$99.C.C$102.C$102.C$99.C2.C$100.3C
18$100.2C$99.3C$99.3C$99.2C.C$100.3C$101.C20$75.2C$74.C2.C$74.C.C$75.
C3$269.C.C$272.C$268.C3.C$272.C$269.C2.C$270.3C$132.C.C$131.C$131.C3.
C$131.C$131.C2.C$131.3C73$154.C.C$157.C$153.C3.C$157.C$154.C2.C$155.
3C69$173.C.C$176.C$172.C3.C$176.C$173.C2.C$174.3C55$200.2C$200.3C$
199.C.2C$199.3C$200.C16$201.C.C$200.C$200.C3.C$200.C$200.C2.C$200.3C
198$265.C.C$264.C$264.C3.C$264.C$264.C2.C$264.3C2$270.C$269.C.C$269.C
.C$270.C!
EDIT There will be 18 *WSS in the end, because the first SL for the back is created by collision of *WSS and glider.

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

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 8th, 2015, 10:12 am

Here is a modified script for the new adjustable Forward/Backward recipes:

Code: Select all

import golly as g 

def MakeBackwardSalvo(distance):
   
   backHelixSL = g.parse("bo$obo$obo$bo!", 201, 1083)
   backHelixSL2GliderWSS = g.parse("bobo$o$o3bo$o$o2bo$3o!", 196, 1076)
   backHelixReflect = g.parse("b2o$b3o$ob2o$3o$bo16$2bobo$bo$bo3bo$bo$bo2bo$b3o!", 131, 853)
   backHelixGlider2SL = g.parse("bobo$4bo$o3bo$4bo$bo2bo$2b3o!", 200, 635)

   backErasingReflectorWSS = g.parse("bobo$o$o3bo$o$o2bo$3o73$23bobo$26bo$22bo3bo$26bo$23bo2bo$24b3o69$42bobo$45bo$41bo3bo$45bo$42bo2bo$43b3o!", 63, 641)
   backSL = g.parse("b2o$o2bo$obo$bo!", 6, 629)
   backFrontPart = g.parse("3$bobo$o$o$o2bo$3o42$65bobo$64bo$64bo3bo$64bo$64bo2bo$64b3o23$59bobo$58bo$58bo$58bo2bo$58b3o35$51b2o$51b3o$50bob2o$50b3o$51bo6$31bobo$30bo$30bo3bo$30bo$30bo2bo$30b3o67$61bobo$64bo$64bo$61bo2bo$62b3o18$62b2o$61b3o$61b3o$61b2obo$62b3o$63bo!", -30, 384)
   backReflectingPart = g.parse("36bobo$39bo$39bo$36bo2bo$37b3o11$b2o$3o$2obo$b3o$2bo14$9bobo$12bo$12bo$9bo2bo$10b3o!", 67, 257)
   backBackPart = g.parse("b2o$3o$2obo$b3o$2bo!", 2, 0)
   
   d = (distance - 144) / 2
   g.putcells(backHelixSL, d, d * 3)
   g.putcells(backHelixSL2GliderWSS, d, d * 3)
   g.putcells(backHelixReflect)
   g.putcells(backHelixGlider2SL, d, -d * 3)
   g.putcells(backErasingReflectorWSS)
   g.putcells(backSL, -d, -d)
   g.putcells(backFrontPart, -d, -d)
   g.putcells(backReflectingPart, 0, -4 * d)
   g.putcells(backBackPart, -d, -d * 7)

def MakeForwardSalvo(distance):

   frontHelixSL = g.parse("6bo$5bobo$5bobo$6bo2$b2o7b2o$o2bo5bo2bo$b2o7b2o2$6bo$5bobo$5bobo$6bo!", 0, 0)
   frontHelixSL2GliderWSS = g.parse("2b3o$bo2bo$4bo$o3bo$4bo$bobo!", 7, 16)
   frontHelixReflect = g.parse("8b3o$7bo2bo$10bo$10bo$7bobo2$3o$o2bo$o$o3bo$o$bobo!", 54, 71)
   frontHelixGlider2SL = g.parse("bo$3o$ob2o$b3o$b3o$b2o!", 5, 123)

   frontErasingReflectorWSS = g.parse("28bo$27b3o$26b2obo$26b3o$27b2o23$5bo$4b3o$3b2obo$3b3o$4b2o5$2bo$b3o$2obo$3o$b2o!", 68, 172)
   frontSL = g.parse("bo$obo$o2bo$b2o!", 132, 314)
   frontFrontPart = g.parse("2b3o$2bo2bo$2bo$2bo3bo$2bo$3bobo24$20bo$19b3o$19bob2o$20b3o$20b3o$20b2o35$4b3o$3bo2bo$6bo$2bo3bo$6bo$3bobo8$22b3o$22bo2bo$22bo$22bo$23bobo17$29bo$28b3o$28bob2o$29b3o$29b2o6$bo$3o$ob2o$b3o$b2o!", 122, 287)
   frontReflectingPart = g.parse("2bo$b3o$2obo$3o$3o$b2o2$12b3o$12bo2bo$12bo$12bo3bo$12bo$13bobo12$17b3o$16bo2bo$19bo$15bo3bo$19bo$16bobo!", 80, 464)
   frontBackPart = g.parse("11b3o$11bo2bo$11bo$11bo3bo$11bo$12bobo4$3o$o2bo$o$o3bo$o3bo$o$bobo!", 132, 556)
  
   d = (distance - 98) / 2

   g.putcells(frontHelixSL, -d, -d)
   g.putcells(frontHelixSL2GliderWSS, -d, -d)
   g.putcells(frontHelixReflect)
   g.putcells(frontHelixGlider2SL, -d, d)
   g.putcells(frontErasingReflectorWSS)

   g.putcells(frontSL, d, d)
   g.putcells(frontFrontPart, d, d)
   g.putcells(frontReflectingPart, 0, 2 * d)
   g.putcells(frontBackPart, d, 3 * d)
   
operation = g.getstring("Enter even step size: \n F100 - 100 forarward \n B100 - 100 backward", "F100")

salvoType = ""

if operation[0] == 'B' or operation[0] == 'b':
   salvoType = "backward"
   try:
      step = int(operation.replace("B", "").replace("b", ""))
   except:
      g.exit("step must be integer")
   
if operation[0] == 'F' or operation[0] == 'f':
   salvoType = "forward"
   try:
      step = int(operation.replace("F", "").replace("f", ""))
   except:
      g.exit("step must be integer")

if salvoType == "":
   g.exit("Couldn't recogine command")
   
if step % 2 != 0:
   g.exit("Step must be even number")

if salvoType == "forward":
   g.new(operation)
   MakeForwardSalvo(step)
else:
   g.new(operation)
   MakeBackwardSalvo(step)

g.fit()
   
   
Notice that forward doesn't work for D in range [116, 150], due to *WSS and glider collision.
Last edited by simsim314 on August 9th, 2015, 6:11 pm, edited 1 time in total.

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

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 8th, 2015, 3:07 pm

Here are recipes for LWSS and MWSS which I think are the best per each output parity category:

Code: Select all

x = 16303, y = 1315, rule = LifeHistory
2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C
998.2C998.2C998.2C998.2C$2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C
998.2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C95$100.3C1997.3C997.
3C997.3C997.3C997.3C997.3C1997.3C997.3C997.3C2997.3C997.3C$100.C1999.
C999.C999.C999.C999.C999.C1999.C999.C999.C2999.C999.C$101.C1999.C999.
C999.C999.C999.C999.C1999.C999.C999.C2999.C999.C8$1100.3C6997.3C3997.
3C997.3C$1100.C6999.C3999.C999.C$1101.C6999.C3999.C999.C78$14200.3C$
14200.C$5200.3C8998.C$5200.C$5201.C4$9200.3C$9200.C$6200.3C2998.C
1998.3C$6200.C4999.C$6201.C4999.C2$3200.3C997.3C2997.3C2997.3C$3200.C
999.C2999.C2999.C$200.3C2998.C999.C2999.C2999.C4998.3C$200.C14999.C$
201.C1998.3C12998.C$2200.C$1200.3C998.C5998.3C3997.3C997.3C$1200.C
6999.C3999.C999.C$1201.C6999.C3999.C999.C78$2300.3C$2300.C$2301.C4$
3300.3C2997.3C2997.3C$3300.C2999.C2999.C$3301.C2999.C2999.C2$5300.3C$
5300.C$5301.C5998.3C$11300.C$11301.C3998.3C$15300.C$300.3C11997.3C
2998.C$300.C11999.C$301.C11999.C2$4300.3C3997.3C1997.3C2997.3C$4300.C
3999.C1999.C2999.C$4301.C2998.3C998.C1999.C2999.C$7300.C$1300.3C5998.
C6998.3C$1300.C12999.C$1301.C12999.C68$6400.3C$6400.C$6401.C2$9400.3C
$9400.C$9401.C6$400.3C14997.3C$400.C14999.C$401.C7998.3C6998.C$8400.C
$8401.C2$3400.3C6997.3C$3400.C6999.C$3401.C6999.C1998.3C$12400.C$
2400.3C9998.C$2400.C$2401.C4998.3C3997.3C$7400.C3999.C$5400.3C1998.C
3999.C1998.3C$5400.C7999.C$4400.3C998.C7999.C$4400.C$4401.C9998.3C$
14400.C$1400.3C12998.C$1400.C$1401.C58$9500.3C$9500.C$9501.C6$6500.3C
$6500.C$6501.C8$500.3C7997.3C$500.C7999.C$501.C7999.C2$15500.3C$
15500.C$15501.C2$13500.3C$13500.C$3500.3C6997.3C997.3C1998.C$3500.C
6999.C999.C$3501.C6999.C999.C2$2500.3C1997.3C$2500.C1999.C$2501.C
1999.C2998.3C$7500.C$7501.C4998.3C$12500.C$12501.C2$1500.3C$1500.C$
1501.C12998.3C$14500.C$5500.3C8998.C$5500.C$5501.C56$6600.3C$6600.C$
6601.C2$9600.3C$9600.C$9601.C12$600.3C6997.3C7997.3C$600.C6999.C7999.
C$601.C6999.C998.3C6998.C$8600.C$8601.C2$3600.3C$3600.C$3601.C6998.3C
$10600.C$10601.C2$13600.3C$13600.C$13601.C998.3C$14600.C$14601.C2$
5600.3C$5600.C$2600.3C2998.C5998.3C997.3C$2600.C8999.C999.C$2601.C
1998.3C6998.C999.C$4600.C$4601.C4$1600.3C$1600.C$1601.C62$700.3C$700.
C$701.C8998.3C$9700.C$9701.C3998.3C$13700.C$7700.3C997.3C4998.C$7700.
C999.C$7701.C999.C6$11700.3C3997.3C$11700.C3999.C$3700.3C7998.C3999.C
$3700.C$3701.C2$14700.3C$14700.C$14701.C2$10700.3C$10700.C$5700.3C
997.3C3998.C$5700.C999.C$4700.3C998.C999.C$4700.C$1700.3C2998.C7998.
3C$1700.C10999.C$1701.C998.3C9998.C$2700.C$2701.C66$800.3C8997.3C$
800.C8999.C$801.C8999.C2$4800.3C997.3C$4800.C999.C$4801.C999.C5998.3C
$11800.C$7800.3C3998.C$7800.C$7801.C2$3800.3C11997.3C$3800.C11999.C$
3801.C6998.3C2997.3C997.3C998.C$10800.C2999.C999.C$10801.C2999.C999.C
4$1800.3C6997.3C$1800.C6999.C$1801.C6999.C2$2800.3C$2800.C$2801.C
9998.3C$12800.C$6800.3C5998.C$6800.C$6801.C66$900.3C$900.C$901.C2$
13900.3C$13900.C$13901.C2$1900.3C$1900.C$1901.C12998.3C$14900.C$3900.
3C1997.3C8998.C$3900.C1999.C$3901.C998.3C998.C$4900.C$4901.C2$6900.3C
2997.3C997.3C$6900.C2999.C999.C$6901.C2999.C999.C2$12900.3C$12900.C$
8900.3C3998.C$8900.C$7900.3C998.C$7900.C$7901.C7998.3C$15900.C$11900.
3C3998.C$11900.C$11901.C6$2900.3C$2900.C$2901.C64$2000.3C$2000.C$
2001.C8$1000.3C8997.3C$1000.C8999.C$1001.C1998.3C4997.3C997.3C998.C
2998.3C1997.3C$3000.C4999.C999.C3999.C1999.C$3001.C2998.3C1998.C999.C
3999.C1999.C$6000.C$4000.3C1998.C4998.3C$4000.C6999.C$4001.C6999.C2$
14000.3C$14000.C$14001.C6$7000.3C4997.3C$7000.C4999.C$7001.C4999.C2$
16000.3C$16000.C$16001.C2$5000.3C$5000.C$5001.C50$7100.3C$7100.C$
7101.C10$10100.3C$10100.C$2100.3C7998.C$2100.C$2101.C2$14100.3C$
14100.C$14101.C2$4100.3C4997.3C$4100.C4999.C$4101.C4999.C2$8100.3C$
8100.C$8101.C2$1100.3C$1100.C$1101.C2$11100.3C997.3C$11100.C999.C$
3100.3C7998.C999.C$3100.C$3101.C2998.3C9997.3C$6100.C9999.C$6101.C
8998.3C998.C$15100.C$15101.C2$13100.3C$13100.C$13101.C8$5100.3C$5100.
C$5101.C52$10200.3C$10200.C$10201.C4$2200.3C$2200.C$2201.C11998.3C$
14200.C$1200.3C2997.3C9998.C$1200.C2999.C$1201.C2999.C6$7200.3C$7200.
C$6200.3C998.C8998.3C$6200.C9999.C$6201.C5998.3C997.3C2998.C$12200.C
999.C$12201.C999.C6$8200.3C$8200.C$8201.C2998.3C$11200.C$11201.C3998.
3C$15200.C$15201.C4$3200.3C$3200.C$3201.C4$5200.3C$5200.C$5201.C58$
11300.3C$11300.C$11301.C4$5300.3C$5300.C$5301.C2$4300.3C$4300.C$4301.
C5998.3C3997.3C$10300.C3999.C$10301.C3999.C2$16300.3C$16300.C$2300.3C
9997.3C3998.C$2300.C9999.C$2301.C9999.C6$13300.3C$13300.C$13301.C!
#C [[ MAXGRIDSIZE 14 ]]
And the recipes move table:

Code: Select all

-4,2,2,-8,-10,-8,-16,-16,-20,-6,2,-10
6,6,10,12,12,20,14,4,-12,-16,-14,-14,4
-4,4,-14,2,4,12,16,8,18,-4,8,20
-4,0,-8,-2,0,-2,0,-4,-8,0,-6,-10,-4
-4,0,6,8,4,14,12,-12,-6,20,26,26,-8
-4,-12,-4,6,16,10,10,-12,-8,-2,10,0
-4,-4,-8,-20,-20,-26,10,12,-2,12,-28,-2
-4,0,8,4,6,-8,-10,-8,6,-4,-2,10
6,6,6,-6,-10,-6,-10,4,4,-4,-6
-4,-6,-8,-16,-28,-22,-14,-16,-2,-6,-16,-20,-2
-4,0,6,-2,0,0,8,-2,-2,0,6,12,-14
-4,-4,-2,4,0,12,-2,-10,10,12,6,2,4
6,6,2,0,8,12,14,10,2,-4,16,2,12
6,6,6,6,-2,4,-12,-2,-16,4,-10,-12,-2
-4,-14,10,10,14,6,4,-2,-10,-4,12,14
-4,2,0,-8,-6,-8,-2,-4,8,16,10,0,2
EDIT Hopefully this will suffice, but if for some reason it won't work (like the case dvgrn mentioned) will need to add some extra recipes. There is a degree of freedom - the forward and backward recipes can have any relative relation we want (the only limitation on them is the distance and period of the *WSS salvos in the same direction).

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

Re: David Bell's engineless caterpillar idea revisited

Post by dvgrn » August 8th, 2015, 6:06 pm

simsim314 wrote:Here are recipes for LWSS and MWSS which I think are the best per each output parity category...
Looks like a very nice collection. The third MWSS recipe is the only one with a really big spark past the insertion lane. With any luck the degree of freedom can be used to avoid ending up with that recipe in a critical location.

I'm not entirely clear how the timing of the two halves of the loop will work out, though. Let's see if I have the theory right. Suppose we have a working caterloopillar with a step of 100. For, let's say, a c/11 spaceship, the forward *WSS salvos will be 450 cells apart, and the backward salvos will be 650 cells apart, so the period will be 1100: 100c/1100 = c/11.

Forward and backward slow-salvo MWSS and LWSS constructions will be a scattering of different recipes with different mod-8 output parities. To keep things simple let's suppose the recipes happen to be all 4-parity, in both directions of the loop.

Then it should be possible to build another c/11 ship with completely different slow salvos, by shifting all the parities of the recipes in one half of the loop by D ticks, and shifting the other half of the loop in the other direction, -D ticks. 3-parity *WSS recipes in the forward direction, let's say, and 5-parity *WSS recipes in the backward direction, would also produce a c/11 ship.

If one set of recipes is changed but the other stays the same, the result should be a different period. For example, changing 4-parity recipes to 5-parity recipes for just the downward half of the loop in the above example would produce a 100c/1101 spaceship.

(Do I have that all right?)

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

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 8th, 2015, 7:28 pm

@dvgrn Yes definitely, switching recipes for upstream by +D ticks will require the downstream use recipes of -D ticks, thus keeping the loop period untouched.

Here are the recipes with cleaning addition:

Code: Select all

x = 17553, y = 3285, rule = LifeHistory
2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C
998.2C998.2C998.2C998.2C$2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C
998.2C998.2C998.2C998.2C998.2C998.2C998.2C998.2C145$150.3C1997.3C997.
3C997.3C997.3C997.3C997.3C1997.3C997.3C997.3C2997.3C997.3C$150.C1999.
C999.C999.C999.C999.C999.C1999.C999.C999.C2999.C999.C$151.C1999.C999.
C999.C999.C999.C999.C1999.C999.C999.C2999.C999.C8$1150.3C6997.3C3997.
3C997.3C$1150.C6999.C3999.C999.C$1151.C6999.C3999.C999.C128$14300.3C$
14300.C$5300.3C8998.C$5300.C$5301.C4$9300.3C$9300.C$6300.3C2998.C
1998.3C$6300.C4999.C$6301.C4999.C2$3300.3C997.3C2997.3C2997.3C$3300.C
999.C2999.C2999.C$300.3C2998.C999.C2999.C2999.C4998.3C$300.C14999.C$
301.C1998.3C12998.C$2300.C$1300.3C998.C5998.3C3997.3C997.3C$1300.C
6999.C3999.C999.C$1301.C6999.C3999.C999.C128$2450.3C$2450.C$2451.C4$
3450.3C2997.3C2997.3C$3450.C2999.C2999.C$3451.C2999.C2999.C2$5450.3C$
5450.C$5451.C5998.3C$11450.C$11451.C3998.3C$15450.C$450.3C11997.3C
2998.C$450.C11999.C$451.C11999.C2$4450.3C3997.3C1997.3C2997.3C$4450.C
3999.C1999.C2999.C$4451.C2998.3C998.C1999.C2999.C$7450.C$1450.3C5998.
C6998.3C$1450.C12999.C$1451.C12999.C118$6600.3C$6600.C$6601.C2$9600.
3C$9600.C$9601.C6$600.3C14997.3C$600.C14999.C$601.C7998.3C6998.C$
8600.C$8601.C2$3600.3C6997.3C$3600.C6999.C$3601.C6999.C1998.3C$12600.
C$2600.3C9998.C$2600.C$2601.C4998.3C3997.3C$7600.C3999.C$5600.3C1998.
C3999.C1998.3C$5600.C7999.C$4600.3C998.C7999.C$4600.C$4601.C9998.3C$
14600.C$1600.3C12998.C$1600.C$1601.C108$9750.3C$9750.C$9751.C6$6750.
3C$6750.C$6751.C8$750.3C7997.3C$750.C7999.C$751.C7999.C2$15750.3C$
15750.C$15751.C2$13750.3C$13750.C$3750.3C6997.3C997.3C1998.C$3750.C
6999.C999.C$3751.C6999.C999.C2$2750.3C1997.3C$2750.C1999.C$2751.C
1999.C2998.3C$7750.C$7751.C4998.3C$12750.C$12751.C2$1750.3C$1750.C$
1751.C12998.3C$14750.C$5750.3C8998.C$5750.C$5751.C106$6900.3C$6900.C$
6901.C2$9900.3C$9900.C$9901.C12$900.3C6997.3C7997.3C$900.C6999.C7999.
C$901.C6999.C998.3C6998.C$8900.C$8901.C2$3900.3C$3900.C$3901.C6998.3C
$10900.C$10901.C2$13900.3C$13900.C$13901.C998.3C$14900.C$14901.C2$
5900.3C$5900.C$2900.3C2998.C5998.3C997.3C$2900.C8999.C999.C$2901.C
1998.3C6998.C999.C$4900.C$4901.C4$1900.3C$1900.C$1901.C112$1050.3C$
1050.C$1051.C8998.3C$10050.C$10051.C3998.3C$14050.C$8050.3C997.3C
4998.C$8050.C999.C$8051.C999.C6$12050.3C3997.3C$12050.C3999.C$4050.3C
7998.C3999.C$4050.C$4051.C2$15050.3C$15050.C$15051.C2$11050.3C$11050.
C$6050.3C997.3C3998.C$6050.C999.C$5050.3C998.C999.C$5050.C$2050.3C
2998.C7998.3C$2050.C10999.C$2051.C998.3C9998.C$3050.C$3051.C116$1200.
3C8997.3C$1200.C8999.C$1201.C8999.C2$5200.3C997.3C$5200.C999.C$5201.C
999.C5998.3C$12200.C$8200.3C3998.C$8200.C$8201.C2$4200.3C11997.3C$
4200.C11999.C$4201.C6998.3C2997.3C997.3C998.C$11200.C2999.C999.C$
11201.C2999.C999.C4$2200.3C6997.3C$2200.C6999.C$2201.C6999.C2$3200.3C
$3200.C$3201.C9998.3C$13200.C$7200.3C5998.C$7200.C$7201.C116$1350.3C$
1350.C$1351.C2$14350.3C$14350.C$14351.C2$2350.3C$2350.C$2351.C12998.
3C$15350.C$4350.3C1997.3C8998.C$4350.C1999.C$4351.C998.3C998.C$5350.C
$5351.C2$7350.3C2997.3C997.3C$7350.C2999.C999.C$7351.C2999.C999.C2$
13350.3C$13350.C$9350.3C3998.C$9350.C$8350.3C998.C$8350.C$8351.C7998.
3C$16350.C$12350.3C3998.C$12350.C$12351.C6$3350.3C$3350.C$3351.C114$
2500.3C$2500.C$2501.C8$1500.3C8997.3C$1500.C8999.C$1501.C1998.3C4997.
3C997.3C998.C2998.3C1997.3C$3500.C4999.C999.C3999.C1999.C$3501.C2998.
3C1998.C999.C3999.C1999.C$6500.C$4500.3C1998.C4998.3C$4500.C6999.C$
4501.C6999.C2$14500.3C$14500.C$14501.C6$7500.3C4997.3C$7500.C4999.C$
7501.C4999.C2$16500.3C$16500.C$16501.C2$5500.3C$5500.C$5501.C100$
7650.3C$7650.C$7651.C10$10650.3C$10650.C$2650.3C7998.C$2650.C$2651.C
2$14650.3C$14650.C$14651.C2$4650.3C4997.3C$4650.C4999.C$4651.C4999.C
2$8650.3C$8650.C$8651.C2$1650.3C$1650.C$1651.C2$11650.3C997.3C$11650.
C999.C$3650.3C7998.C999.C$3650.C$3651.C2998.3C9997.3C$6650.C9999.C$
6651.C8998.3C998.C$15650.C$15651.C2$13650.3C$13650.C$13651.C8$5650.3C
$5650.C$5651.C100$9800.3C$9800.C$9801.C998.3C$10800.C$10801.C4$2800.
3C$2800.C$2801.C11998.3C$14800.C$1800.3C2997.3C9998.C$1800.C2999.C$
1801.C2999.C6$7800.3C$7800.C$6800.3C998.C8998.3C$6800.C9999.C$6801.C
5998.3C997.3C2998.C$12800.C999.C$12801.C999.C6$8800.3C$8800.C$8801.C
2998.3C$11800.C$11801.C3998.3C$15800.C$15801.C4$3800.3C$3800.C$3801.C
4$5800.3C$5800.C$5801.C94$6950.3C$6950.C$6951.C12$9950.3C1997.3C$
9950.C1999.C$9951.C1999.C2$3950.3C$3950.C$1950.3C1998.C1998.3C$1950.C
3999.C$1951.C3999.C2$4950.3C10997.3C$4950.C10999.C$4951.C5998.3C3997.
3C998.C$10950.C3999.C$10951.C3999.C2$16950.3C$16950.C$2950.3C4997.3C
997.3C3997.3C3998.C$2950.C4999.C999.C3999.C$2951.C4999.C999.C3999.C6$
13950.3C$13950.C$13951.C94$7100.3C$7100.C$7101.C2$11100.3C$11100.C$
11101.C18$10100.3C$10100.C$8100.3C1998.C$8100.C$3100.3C4998.C$3100.C$
3101.C2$4100.3C$4100.C$4101.C1998.3C$6100.C$6101.C2$16100.3C$16100.C$
16101.C2$9100.3C$9100.C$9101.C4998.3C$14100.C$2100.3C11998.C$2100.C$
2101.C2$5100.3C$5100.C$5101.C6998.3C$12100.C$12101.C2$15100.3C1997.3C
$15100.C1999.C$15101.C1999.C10$13100.3C$13100.C$13101.C104$9250.3C$
9250.C$5250.3C1997.3C1998.C$5250.C1999.C$5251.C1999.C8$8250.3C$8250.C
$8251.C3998.3C$12250.C$11250.3C998.C4998.3C$11250.C5999.C$11251.C
5999.C4$3250.3C$3250.C$3251.C10998.3C$14250.C$14251.C2$4250.3C1997.3C
$4250.C1999.C$4251.C1999.C3998.3C$10250.C$10251.C12$13250.3C$13250.C$
13251.C4$16250.3C$16250.C$16251.C6$15250.3C$15250.C$15251.C82$3400.3C
3997.3C$3400.C3999.C$3401.C3999.C6$17400.3C$17400.C$17401.C2$9400.3C$
9400.C$9401.C5998.3C$15400.C$5400.3C9998.C$5400.C$5401.C8$4400.3C$
4400.C$4401.C1998.3C$6400.C$6401.C4998.3C2997.3C$11400.C2999.C$11401.
C998.3C1998.C$12400.C$12401.C998.3C$13400.C$13401.C2$10400.3C$10400.C
$10401.C112$11550.3C$11550.C$11551.C12$9550.3C5997.3C$9550.C5999.C$
9551.C5999.C6$17550.3C$17550.C$17551.C8$13550.3C$13550.C$13551.C4$
14550.3C$14550.C$3550.3C10998.C$3550.C$3551.C3998.3C$7550.C$7551.C94$
11700.3C$11700.C$11701.C32$9700.3C$9700.C$9701.C10$13700.3C$13700.C$
13701.C2$15700.3C$15700.C$15701.C102$11850.3C$11850.C$11851.C16$
15850.3C$15850.C$15851.C24$13850.3C$13850.C$13851.C2$9850.3C$9850.C$
9851.C122$12000.3C$12000.C$12001.C2$16000.3C$16000.C$16001.C138$
12150.3C$12150.C$12151.C44$16150.3C$16150.C$16151.C100$12300.3C$
12300.C$12301.C!

Code: Select all

-4,2,2,-8,-10,-8,-16,-16,-20,-6,2,-10,-8,4
6,6,10,12,12,20,14,4,-12,-16,-14,-14,4,-14,4,-26,16
-4,4,-14,2,4,12,16,8,18,-4,8,20,-10,-10,10,0
-4,0,-8,-2,0,-2,0,-4,-8,0,-6,-10,-4,8,-16,-10
-4,0,6,8,4,14,12,-12,-6,20,26,26,-8,-8,10,2
-4,-12,-4,6,16,10,10,-12,-8,-2,10,0,-28,-42,-16,-26,18
-4,-4,-8,-20,-20,-26,10,12,-2,12,-28,-2,4,-16,-6
-4,0,8,4,6,-8,-10,-8,6,-4,-2,10,4,0,-18,-14,-10,-2,16
6,6,6,-6,-10,-6,-10,4,4,-4,-6,-22,-14,-18,12,12
-4,-6,-8,-16,-28,-22,-14,-16,-2,-6,-16,-20,-2,-38,-2,4,-24,-36,-32,-10,-16,-18
-4,0,6,-2,0,0,8,-2,-2,0,6,12,-14,10,-4,6
-4,-4,-2,4,0,12,-2,-10,10,12,6,2,4,26,26,8,8,10,12
6,6,2,0,8,12,14,10,2,-4,16,2,12,2,6,4,14
6,6,6,6,-2,4,-12,-2,-16,4,-10,-12,-2,14,40,-12,-10,14,-14,-6,30
-4,-14,10,10,14,6,4,-2,-10,-4,12,14,-4,-4,32
-4,2,0,-8,-6,-8,-2,-4,8,16,10,0,2,14,-2,-18,-2
It's probably sub optimal for some cases, but hopefully statistically speaking the long recipes will not be dominant (or can be made non dominant using the degree of freedom - hopefully not overloading it too much - we have 5/8 HWSS recipes this still leaves us a lot place for adjustments).

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

Re: David Bell's engineless caterpillar idea revisited

Post by dvgrn » August 9th, 2015, 12:54 pm

simsim314 wrote:Here are the recipes with cleaning addition...
Wow, you're moving right along -- only two items left on the To-Do list already!

Is there anything left that you could use help with? I suppose a separate search starting from each of these recipes would eventually turn up alternate ways of converting the junk into a clean target block -- and some of those blocks would happen to be in particularly good locations for starting the next *WSS recipe, or at least for adding the most efficient block move.

That's a lot of data to generate for maybe a 10-30% length reduction in the final spaceship, though. Most of the macro-spaceships -- centipede, Gemini, and Caterpillar in particular, I don't know about the waterbear -- could be reduced in length by 10-30% with a similar amount of work... but somehow it doesn't seem like very interesting work until it's possible to remove at least a factor of two, or preferably an order of magnitude.

Do you have the leftover junk from five HWSS recipes cleaned up yet? I double-checked the five recipes -- the 16 and 18 reactions have sparks that could theoretically affect the nearby MWSS, but with the particular relative timing in the forward salvo, there's no problem.
simsim314 wrote:It's probably sub optimal for some cases, but hopefully statistically speaking the long recipes will not be dominant (or can be made non dominant using the degree of freedom - hopefully not overloading it too much - we have 5/8 HWSS recipes this still leaves us a lot place for adjustments).
Even the longest recipe is only about 50% longer than the shortest recipe -- and it makes sense, because there's more junk to clean up there. I might try an exhaustive search to cut down that cleanup a little bit, but really it looks like any improvements are going to be statistically insignificant.

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

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 9th, 2015, 3:04 pm

dvgrn wrote:you're moving right along
Yes well I now need to update the SL placing script to use the new recipes. Those TODO lists never work...
dvgrn wrote:Is there anything left that you could use help with?
Well I will get to it eventually but it would be nice if you could check that those recipes are good enough for all the tight places, or are there some constrains (like HWSS must be of certain type or some other constrains in hard places). It would be beneficial to start from some "internal state" out of 8 possible, and see if something goes wrong/at some internal parity everything goes right (ignoring the block moving stuff checking only the *WSS recipes themselves).
dvgrn wrote:That's a lot of data to generate for maybe a 10-30% length reduction in the final spaceship
Yes thanks to Glue++ we improved from recipes of length 40-50 (or more) to recipes of length 15-20, I think further reductions should be considered minor.

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

Re: David Bell's engineless caterpillar idea revisited

Post by dvgrn » August 9th, 2015, 3:27 pm

simsim314 wrote:Well I will get to it eventually but it would be nice if you could check that those recipes are good enough for all the tight places, or are there some constrains (like HWSS must be of certain type or some other constrains in hard places).
What I've done so far is just to check that each of the 5 HWSS recipes can be triggered successfully with the nearby MWSS stream already in existence. I don't think I could have missed any problems with the intermediate targets -- that MWSS will always be the same distance from the HWSS no matter how the recipe's step is adjusted, and unless a spark extends more than two cells past the HWSS lane, there's no possible interaction.

The LWSS and MWSS recipes were cherry-picked from a much bigger list, and it looks like they'll be more reliable in close proximity with other *WSS streams. I'll look around a little more, but everything seems very good so far.

EDIT: Maybe it makes sense to see what a reasonable lowest step would be. At some point the adjustment might start bringing streams dangerously close together, even if the reaction still works. It's possible to construct any required spaceship speed without using the smaller step sizes, so maybe it's simplest to just work with step sizes above 150.

There's also a minimum safe period for a given step size, which is the smallest period for which both the forward and backward helix reactions can safely follow each other. Also all of the *WSS insertion reactions have to work without getting in their own way. Some of those final reactions take a long time to complete, and sometimes there's temporary junk that lingers a long time in the output lane, where it could interfere with the previous *WSS passing by. Have a look at the first MWSS recipe for example:

Code: Select all

x = 2396, y = 2408, rule = B3/S23
2o$2o148$143b3o$143bo$144bo148$293b3o$293bo$294bo148$443b3o$443bo$444b
o136$593b3o$593bo$594bo144$743b3o$743bo$744bo152$893b3o$893bo$894bo
144$1043b3o$1043bo$1044bo162$1193b3o$1193bo$1194bo148$1343b3o$1343bo$
1344bo140$1493b3o$1493bo$1494bo146$1643b3o$1643bo$1644bo132$1793b3o$
1793bo$1794bo156$1943b3o$1943bo$1944bo144$2093b3o$2093bo$2094bo178$
2243b3o$2243bo$2244bo148$2393b3o$2393bo$2394bo!
A transient honeyfarm spends about a hundred ticks in the output lane before getting converted to an MWSS, and there's an earlier spark higher up that also touches the edge of the interference zone.

I don't think that these slow edge-shooting reactions will be the limiting factor. There has to be a fairly wide separation between cycles anyway, just due to the length of the *WSS helix. But it's pretty easy to double-check.

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

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 9th, 2015, 5:23 pm

Here is a script that converts recipes to SL placement (currently works for backward only). You can manually change the step and period or the recipe. This script is currently working at c/8 with step = 200 and period = 1600, and applies the first LWSS recipe from here.

Code: Select all

import golly as g 

hwssRecipe = [-4,2,2,-8,-10,-8,-16,-16,-20,-6,2,-10,-8,4]
step = 200
period = 1600
directionType = "B"

distBack = period / 2 + step
distForward = period / 2 - step

def MakeBackwardSalvo(distance, dx, dy, helixSLdy, toPlaceHelixSL = False, toPlaceFirstSL = False):
   
   backHelixSL = g.parse("bo$obo$obo$bo!", 201, 1083)
   backHelixSL2GliderWSS = g.parse("bobo$o$o3bo$o$o2bo$3o!", 196, 1076)
   backHelixReflect = g.parse("b2o$b3o$ob2o$3o$bo16$2bobo$bo$bo3bo$bo$bo2bo$b3o!", 131, 853)
   backHelixGlider2SL = g.parse("bobo$4bo$o3bo$4bo$bo2bo$2b3o!", 200, 635)

   backErasingReflectorWSS = g.parse("bobo$o$o3bo$o$o2bo$3o73$23bobo$26bo$22bo3bo$26bo$23bo2bo$24b3o69$42bobo$45bo$41bo3bo$45bo$42bo2bo$43b3o!", 63, 641)
   backSL = g.parse("b2o$o2bo$obo$bo!", 6, 629)
   backFrontPart = g.parse("3$bobo$o$o$o2bo$3o42$65bobo$64bo$64bo3bo$64bo$64bo2bo$64b3o23$59bobo$58bo$58bo$58bo2bo$58b3o35$51b2o$51b3o$50bob2o$50b3o$51bo6$31bobo$30bo$30bo3bo$30bo$30bo2bo$30b3o67$61bobo$64bo$64bo$61bo2bo$62b3o18$62b2o$61b3o$61b3o$61b2obo$62b3o$63bo!", -30, 384)
   backReflectingPart = g.parse("36bobo$39bo$39bo$36bo2bo$37b3o11$b2o$3o$2obo$b3o$2bo14$9bobo$12bo$12bo$9bo2bo$10b3o!", 67, 257)
   backBackPart = g.parse("b2o$3o$2obo$b3o$2bo!", 2, 0)
   
   d = (distance - 144) / 2
   
   if toPlaceHelixSL:
	g.putcells(backHelixSL, d + dx, d * 3 + dy + helixSLdy)
	
   g.putcells(backHelixSL2GliderWSS, d + dx, d * 3 + dy)
   g.putcells(backHelixReflect, dx, dy)
   g.putcells(backHelixGlider2SL, d + dx, -d * 3 + dy)
   g.putcells(backErasingReflectorWSS,dx, dy)
   g.putcells(backFrontPart, -d + dx, -d + dy)
   g.putcells(backReflectingPart, 0 + dx, -4 * d + dy)
   g.putcells(backBackPart, -d + dx, -d * 7 + dy)
   
   if toPlaceFirstSL:
	g.putcells(backSL, -d + dx, -d + dy)
   
def MakeBackwardRecipe(distance, dx, dy, recipe): 
	d = (distance - 144) / 2
	backSL = g.parse("b2o$o2bo$obo$bo!", 6 - d + dx, 629 - d + dy)
	curd = distance + 2
	
	recipe.insert(0, -4)
	
	for r in recipe: 
		g.putcells(backSL, 0, curd - r)

		curd += distance

def MakeForwardSalvo(distance, dx, dy, toPlaceHelixSL = False, toPlaceFirstSL = False):

   frontHelixSL = g.parse("6bo$5bobo$5bobo$6bo2$b2o7b2o$o2bo5bo2bo$b2o7b2o2$6bo$5bobo$5bobo$6bo!", 0, 0)
   frontHelixSL2GliderWSS = g.parse("2b3o$bo2bo$4bo$o3bo$4bo$bobo!", 7, 16)
   frontHelixReflect = g.parse("8b3o$7bo2bo$10bo$10bo$7bobo2$3o$o2bo$o$o3bo$o$bobo!", 54, 71)
   frontHelixGlider2SL = g.parse("bo$3o$ob2o$b3o$b3o$b2o!", 5, 123)

   frontErasingReflectorWSS = g.parse("28bo$27b3o$26b2obo$26b3o$27b2o23$5bo$4b3o$3b2obo$3b3o$4b2o5$2bo$b3o$2obo$3o$b2o!", 68, 172)
   frontSL = g.parse("bo$obo$o2bo$b2o!", 132, 314)
   frontFrontPart = g.parse("2b3o$2bo2bo$2bo$2bo3bo$2bo$3bobo24$20bo$19b3o$19bob2o$20b3o$20b3o$20b2o35$4b3o$3bo2bo$6bo$2bo3bo$6bo$3bobo8$22b3o$22bo2bo$22bo$22bo$23bobo17$29bo$28b3o$28bob2o$29b3o$29b2o6$bo$3o$ob2o$b3o$b2o!", 122, 287)
   frontReflectingPart = g.parse("2bo$b3o$2obo$3o$3o$b2o2$12b3o$12bo2bo$12bo$12bo3bo$12bo$13bobo12$17b3o$16bo2bo$19bo$15bo3bo$19bo$16bobo!", 80, 464)
   frontBackPart = g.parse("11b3o$11bo2bo$11bo$11bo3bo$11bo$12bobo4$3o$o2bo$o$o3bo$o3bo$o$bobo!", 132, 556)
  
   d = (distance - 98) / 2
   
   if toPlaceHelixSL:
	g.putcells(frontHelixSL, -d + dx, -d + dy)
	
   g.putcells(frontHelixSL2GliderWSS, -d + dx, -d + dy)
   g.putcells(frontHelixReflect, dx, dy)
   g.putcells(frontHelixGlider2SL, -d + dx, d + dy)
   g.putcells(frontErasingReflectorWSS, dx, dy)

   g.putcells(frontSL, d + dx, d + dy)
   g.putcells(frontFrontPart, d + dx, d + dy)
   g.putcells(frontReflectingPart, 0 + dx, 2 * d + dy)
   g.putcells(frontBackPart, d + dx, 3 * d + dy)
   
   if toPlaceFirstSL:
	g.putcells(frontSL, d + dx, d + dy)
	
def MakeForwardRecipe(distance, dx, dy, recipe): 
	d = (distance - 98) / 2
	
	frontSL = g.parse("bo$obo$o2bo$b2o!", 132 + d + dx, 314 + d + dy)
	curd = -distance
	
	for r in recipe: 
		g.putcells(backSL, 0, curd + r)

		curd -= distance
	
if directionType == "B":
	for y in xrange(-3 * len(hwssRecipe), 1):
		MakeBackwardSalvo(step, 0, distBack * y, step * len(hwssRecipe) + 100, y == 0, y == 0)
	
	MakeBackwardRecipe(step, 0, 0, hwssRecipe)
	
else:
	for y in xrange(0, 3 * len(hwssRecipe) + 1):
	   MakeForwardSalvo(step, distForward * y, y == 0, y == 0)
	
	MakeForwardRecipe(step, 0, 0, hwssRecipe)
	
g.fit()


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

Re: David Bell's engineless caterpillar idea revisited

Post by dvgrn » August 11th, 2015, 8:01 am

dvgrn wrote:I don't think that these slow edge-shooting reactions will be the limiting factor. There has to be a fairly wide separation between cycles anyway, just due to the length of the *WSS helix.
Yes, a quick test seems to indicate that those insertion reactions could last a few hundred ticks longer, and there still wouldn't be any problem:

Code: Select all

x = 312, y = 453, rule = B3/S23
obo$b2o$bo280$302bo$301bobo$302b2o5$300b2o$300b2o2$309b2o$308bo2bo$
309b2o3$300b2o3b2o$299bo2bo2b2o$299bo2bo$300b2o131$279bobo$280b2o$280b
o$302bo$301bobo$302b2o5$300b2o$300b2o2$309b2o$308bo2bo$309b2o3$300b2o
3b2o$299bo2bo2b2o$299bo2bo$300b2o!
It appears that for a step size of 152, the fastest allowable spaceship period will be 1115:

Code: Select all

x = 208, y = 1082, rule = B3/S23
6bo$5bobo$5bobo$6bo2$b2o7b2o$o2bo5bo2bo$b2o7b2o2$6bo$5bobo$5bobo$6bo3b
o$9b3o$8b2obo$8b3o$8b3o$9b2o77$90bo$89b3o$88b2obo$88b3o$89b2o2$82bo$
81b3o$81bob2o$82b3o$82b3o$82b2o69$5b3o$4bo2bo$7bo$3bo3bo$7bo$4bobo17$
122b3o$122bo2bo$122bo$122bo$123bobo23$99b3o$99bo2bo$99bo$99bo$100bobo
5$96b3o$96bo2bo$96bo$96bo$97bobo101$179bo$178b3o$178bob2o$179b3o$179b
3o$179b2o25$195b3o$187bo6bo2bo$186bobo8bo$186bo2bo3bo3bo$187b2o8bo$
194bobo34$181bo$180b3o$179b2obo$179b3o$179b3o$180b2o7$9b3o$8bo2bo187bo
$11bo186b3o$7bo3bo186bob2o$11bo187b3o$8bobo188b2o18$204b3o$203bo2bo$
206bo$206bo$203bobo6$176b3o$175bo2bo$178bo$178bo$175bobo45$89b3o$88bo
2bo$91bo$91bo$88bobo2$81b3o$81bo2bo$81bo$81bo3bo$81bo$82bobo31$108b3o$
108bo2bo$108bo$108bo3bo$108bo$109bobo$120bo$119b3o$119bob2o$120b3o$
120b3o$120b2o12$125bo$124b3o$123b2obo$123b3o$123b3o$124b2o9$6bo$5b3o$
5bob2o$6b3o$6b3o$6b2o17$123bo$122b3o$121b2obo$121b3o$122b2o23$100bo$
99b3o$98b2obo$98b3o$99b2o5$97bo$96b3o$95b2obo$95b3o$96b2o19$198bo$197b
3o$197bob2o$198b3o$198b3o$198b2o4$187bo$186b3o$186bob2o$187b3o$187b3o$
187b3o$187b2o68$178b3o$178bo2bo$178bo$178bo3bo$178bo$179bobo24$196bo$
195b3o$195bob2o$196b3o$196b3o$196b2o35$180b3o$179bo2bo$182bo$178bo3bo$
182bo$179bobo8$198b3o$198bo2bo$198bo$198bo$199bobo17$205bo$204b3o$204b
ob2o$205b3o$205b2o6$177bo$176b3o$176bob2o$177b3o$177b2o87$109bo$108b3o
$107b2obo$107b3o$107b3o$108b2o2$119b3o$119bo2bo$119bo$119bo3bo$119bo$
120bobo12$124b3o$123bo2bo$126bo$122bo3bo$126bo$123bobo90$197b3o$197bo
2bo$197bo$197bo3bo$197bo$198bobo4$186b3o$186bo2bo$186bo$186bo3bo$186bo
3bo$186bo$187bobo!
If that's right, then any rational speed not faster than 152c/1115 should be possible. Maybe there will be a few slightly faster speeds based on that discontinuous stretch of shorter step sizes below F116, but that might not be worth worrying about.

I'm not absolutely sure that having the helix cycles following each other so closely will not cause some unforeseen construction problem, but it would have to be something very subtle. I certainly don't see any obvious difficulties. The closest approach is toward the center of the helix --

Code: Select all

x = 19, y = 64, rule = LifeHistory
3A$A2.A$A$A3.A$A$.A.A$12.A$11.3A$11.A.2A$12.3A$12.3A$12.2A12$17.A$16.
3A$15.2A.A$15.3A$15.3A$16.2A31$15.C$14.3C$13.2C.C$13.3C$14.2C!
-- but that LWSS is trailing by a very safe distance, and it's offset a couple of lanes from the MWSSes above that will be constructed before and after it. (For anyone else following along, the LWSS can't come any closer without interfering with a glider crossing ahead of it from left to right. If the LWSS tries to move ahead of the glider, sparks from the generation of the glider get in the way.)

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

Re: David Bell's engineless caterpillar idea revisited

Post by dvgrn » August 11th, 2015, 8:32 am

simsim314 wrote:Here are recipes for LWSS and MWSS which I think are the best per each output parity category...

EDIT Hopefully this will suffice, but if for some reason it won't work (like the case dvgrn mentioned) will need to add some extra recipes.
Unfortunately only one out of the eight LWSS inserters can handle the closest-spaced insertion in the forward salvo. EDIT: Ha, no, I take it back -- silly mistake explained at end of message...

Are there any other options for that glider-splitting LWSS pair?

Code: Select all

x = 8219, y = 3949, rule = B3/S23
5901bo$5902bo$5900b3o6$3901bo$3902bo$3900b3o2$2901bo$2902bo$2900b3o64$
3001bo$3002bo$3000b3o4$5001bo$5002bo$5000b3o8$bo$2bo$3o8$2001bo$2002bo
$1001bo998b3o$1002bo$1000b3o6$4001bo2999bo$4002bo2999bo$4000b3o2997b3o
2$6001bo$6002bo$6000b3o58$3101bo$3102bo$3100b3o14$2101bo$2102bo$2100b
3o2998bo$5102bo$5100b3o4$7101bo$7102bo$7100b3o2$101bo$102bo$100b3o2$
4101bo$4102bo$4100b3o6$6101bo$6102bo$6100b3o12$1101bo$1102bo$1100b3o
50$3201bo$3202bo$3200b3o6$1201bo$1202bo$1200b3o10$4201bo$4202bo$2201bo
1998b3o$2202bo$201bo1998b3o2998bo$202bo4999bo$200b3o4997b3o1998bo$
7202bo$7200b3o8$6201bo$6202bo$6200b3o64$5301bo$5302bo$5300b3o10$301bo$
302bo$300b3o6$1301bo$1302bo$1300b3o2$3301bo$3302bo$2301bo998b3o998bo$
2302bo1999bo$2300b3o1997b3o2$6301bo$6302bo$6300b3o6$7301bo$7302bo$
7300b3o66$1401bo$1402bo$1400b3o2$5401bo$5402bo$5400b3o2$6401bo$6402bo$
6400b3o6$4401bo$4402bo$4400b3o2$401bo$402bo$400b3o2$2401bo999bo$2402bo
999bo$2400b3o997b3o2$7401bo$7402bo$7400b3o66$5501bo$5502bo$5500b3o998b
o$6502bo$3501bo2998b3o$3502bo$1501bo999bo998b3o$1502bo999bo$1500b3o
997b3o8$4501bo$4502bo$4500b3o8$501bo$502bo$500b3o4$7501bo$7502bo$7500b
3o62$6601bo$6602bo$6600b3o4$3601bo$3602bo$3600b3o1998bo$5602bo$2601bo
2998b3o$2602bo$2600b3o10$4601bo$4602bo$4600b3o4$601bo6999bo$602bo6999b
o$600b3o6997b3o16$1601bo$1602bo$1600b3o56$2701bo$2702bo$2700b3o2$6701b
o$6702bo$6700b3o4$701bo$702bo$700b3o2998bo1999bo$3702bo1999bo$3700b3o
1997b3o2$4701bo$4702bo$4700b3o8$7701bo$7702bo$7700b3o8$1701bo$1702bo$
1700b3o66$6801bo$6802bo$6800b3o2$3801bo$3802bo$2801bo998b3o$2802bo$
801bo1998b3o$802bo$800b3o4998bo$5802bo$5800b3o2$4801bo$4802bo$4800b3o
4$7801bo$7802bo$7800b3o10$1801bo$1802bo$1800b3o68$6901bo$6902bo$901bo
5998b3o$902bo$900b3o2998bo$3902bo$3900b3o2$7901bo$7902bo$7900b3o4$
2901bo$2902bo$2900b3o2$1901bo2999bo$1902bo2999bo$1900b3o2997b3o4$5901b
o$5902bo$5900b3o78$7001bo$7002bo$6001bo998b3o$6002bo$6000b3o1998bo$
8002bo$1001bo2999bo999bo2998b3o$1002bo2999bo999bo$1000b3o2997b3o997b3o
2$2001bo$2002bo$2000b3o6$3001bo$3002bo$3000b3o80$7101bo$7102bo$7100b3o
8$1101bo999bo999bo999bo999bo999bo1999bo$1102bo999bo999bo999bo999bo999b
o1999bo$1100b3o997b3o997b3o997b3o997b3o997b3o1997b3o95$1201b2o998b2o
998b2o998b2o998b2o998b2o998b2o998b2o$1201b2o998b2o998b2o998b2o998b2o
998b2o998b2o998b2o2423$2212b3o$2212bo2bo$2212bo$2212bo$2213bobo2$8216b
3o$8215bo2bo$1215bo7002bo$1214b3o7001bo$1214bob2o6997bobo$1215b3o$
1215b2o7$3217bo$3216b3o$3215b2obo$3215b3o$3216b2o13$6215b3o$6215bo2bo$
6215bo$6215bo$6216bobo164$5212bo$5211b3o$5211bob2o$5212b3o$5212b2o4$
4219b3o$4218bo2bo$4221bo$4221bo3002bo$4218bobo3002b3o$7222b2obo$7222b
3o$7223b2o!
If that LWSS pair is too hard to replace, it might be necessary to go back to much longer recipes for that one insertion, seven times out of eight -- attach the one working reaction to seven different retimer recipes.

The only other alternative would be building the two LWSSes in the opposite order. But I don't think I saw eight different recipes with the necessary high clearance, so that probably wouldn't reduce the problem very much.

EDIT: The silly mistake, of course, is that the forward and backward streams face each other, so those LWSSes have to be built in the other order -- and luckily I think there's no problem if the leading LWSS is constructed second. Test pattern coming eventually in a new post...

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

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 11th, 2015, 1:19 pm

Actually the front is built right to left (not left to right). Making this case pretty trivial (here are 3 cases didn't check others):

Code: Select all

x = 3219, y = 3677, rule = B3/S23
3217bo$3216bo$3216b3o8$1217bo$1216bo$1216b3o998bo$2216bo$2216b3o86$
1117bo$1116bo$1116b3o10$3117bo$3116bo$3116b3o24$2117bo$2116bo$2116b3o
58$2017bo$2016bo$2016b3o12$1017bo$1016bo$1016b3o1998bo$3016bo$3016b3o
88$2917bo$2916bo$2916b3o6$1917bo$1916bo$1916b3o4$917bo$916bo$916b3o78$
1817bo$1816bo$1816b3o18$2817bo$2816bo$2816b3o2$817bo$816bo$816b3o76$
717bo999bo$716bo999bo$716b3o997b3o18$2717bo$2716bo$2716b3o78$617bo$
616bo$616b3o16$2617bo$2616bo$2616b3o16$1617bo$1616bo$1616b3o56$517bo$
516bo$516b3o8$2517bo$2516bo$2516b3o24$1517bo$1516bo$1516b3o72$417bo$
416bo$416b3o1998bo$2416bo$2416b3o22$1417bo$1416bo$1416b3o70$2317bo$
2316bo$2316b3o10$317bo$316bo$316b3o2$1317bo$1316bo$1316b3o90$2217bo$
2216bo$2216b3o2$1217bo$1216bo$1216b3o6$217bo$216bo$216b3o90$117bo999bo
999bo$116bo999bo999bo$116b3o997b3o997b3o95$16b2o998b2o998b2o$16b2o998b
2o998b2o2441$1004b3o$1003bo2bo$1006bo$1006bo$1003bobo4$2003bo$2002b3o$
2001b2obo$2001b3o$2002b2o7$bo$3o$ob2o$b3o$b2o!
EDIT Saw your EDIT message after posted.

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

Re: David Bell's engineless caterpillar idea revisited

Post by dvgrn » August 11th, 2015, 1:25 pm

simsim314 wrote:Actually the front is built right to left (not left to right). Making this case pretty trivial (here are 3 cases didn't check others)...
Yes, the correct orientation is fairly trivial. There are still two recipes that aren't good enough, but that's a lot better than seven:

Code: Select all

x = 8219, y = 3967, rule = B3/S23
5901bo$5902bo$5900b3o6$3901bo$3902bo$3900b3o2$2901bo$2902bo$2900b3o64$
3001bo$3002bo$3000b3o4$5001bo$5002bo$5000b3o8$bo$2bo$3o8$2001bo$2002bo
$1001bo998b3o$1002bo$1000b3o6$4001bo2999bo$4002bo2999bo$4000b3o2997b3o
2$6001bo$6002bo$6000b3o58$3101bo$3102bo$3100b3o14$2101bo$2102bo$2100b
3o2998bo$5102bo$5100b3o4$7101bo$7102bo$7100b3o2$101bo$102bo$100b3o2$
4101bo$4102bo$4100b3o6$6101bo$6102bo$6100b3o12$1101bo$1102bo$1100b3o
50$3201bo$3202bo$3200b3o6$1201bo$1202bo$1200b3o10$4201bo$4202bo$2201bo
1998b3o$2202bo$201bo1998b3o2998bo$202bo4999bo$200b3o4997b3o1998bo$
7202bo$7200b3o8$6201bo$6202bo$6200b3o64$5301bo$5302bo$5300b3o10$301bo$
302bo$300b3o6$1301bo$1302bo$1300b3o2$3301bo$3302bo$2301bo998b3o998bo$
2302bo1999bo$2300b3o1997b3o2$6301bo$6302bo$6300b3o6$7301bo$7302bo$
7300b3o66$1401bo$1402bo$1400b3o2$5401bo$5402bo$5400b3o2$6401bo$6402bo$
6400b3o6$4401bo$4402bo$4400b3o2$401bo$402bo$400b3o2$2401bo999bo$2402bo
999bo$2400b3o997b3o2$7401bo$7402bo$7400b3o66$5501bo$5502bo$5500b3o998b
o$6502bo$3501bo2998b3o$3502bo$1501bo999bo998b3o$1502bo999bo$1500b3o
997b3o8$4501bo$4502bo$4500b3o8$501bo$502bo$500b3o4$7501bo$7502bo$7500b
3o62$6601bo$6602bo$6600b3o4$3601bo$3602bo$3600b3o1998bo$5602bo$2601bo
2998b3o$2602bo$2600b3o10$4601bo$4602bo$4600b3o4$601bo6999bo$602bo6999b
o$600b3o6997b3o16$1601bo$1602bo$1600b3o56$2701bo$2702bo$2700b3o2$6701b
o$6702bo$6700b3o4$701bo$702bo$700b3o2998bo1999bo$3702bo1999bo$3700b3o
1997b3o2$4701bo$4702bo$4700b3o8$7701bo$7702bo$7700b3o8$1701bo$1702bo$
1700b3o66$6801bo$6802bo$6800b3o2$3801bo$3802bo$2801bo998b3o$2802bo$
801bo1998b3o$802bo$800b3o4998bo$5802bo$5800b3o2$4801bo$4802bo$4800b3o
4$7801bo$7802bo$7800b3o10$1801bo$1802bo$1800b3o68$6901bo$6902bo$901bo
5998b3o$902bo$900b3o2998bo$3902bo$3900b3o2$7901bo$7902bo$7900b3o4$
2901bo$2902bo$2900b3o2$1901bo2999bo$1902bo2999bo$1900b3o2997b3o4$5901b
o$5902bo$5900b3o78$7001bo$7002bo$6001bo998b3o$6002bo$6000b3o1998bo$
8002bo$1001bo2999bo999bo2998b3o$1002bo2999bo999bo$1000b3o2997b3o997b3o
2$2001bo$2002bo$2000b3o6$3001bo$3002bo$3000b3o80$7101bo$7102bo$7100b3o
8$1101bo999bo999bo999bo999bo999bo1999bo$1102bo999bo999bo999bo999bo999b
o1999bo$1100b3o997b3o997b3o997b3o997b3o997b3o1997b3o95$1201b2o998b2o
998b2o998b2o998b2o998b2o998b2o998b2o$1201b2o998b2o998b2o998b2o998b2o
998b2o998b2o998b2o2441$2212b3o$2212bo2bo$2212bo$2212bo$2213bobo2$8216b
3o$8215bo2bo$1215bo7002bo$1214b3o7001bo$1214bob2o6997bobo$1215b3o$
1215b2o7$3217bo$3216b3o$3215b2obo$3215b3o$3216b2o13$6215b3o$6215bo2bo$
6215bo$6215bo$6216bobo164$5212bo$5211b3o$5211bob2o$5212b3o$5212b2o4$
4219b3o$4218bo2bo$4221bo$4221bo3002bo$4218bobo3002b3o$7222b2obo$7222b
3o$7223b2o!
In other news, the minimum step for both forward and backward helices is now 96 cells -- very convenient and symmetrical. When I have some more time (not today) I'll have a quick look to see if that allows any significant change in the top speed.

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

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 11th, 2015, 6:50 pm

Some good new. I've managed to modify some minor stuff for the stapler script, to work with monochromatic recipes. With help of this script, I've managed to make the two right gliders of the front (now targeting c/8).

Code: Select all

import golly as g 
import copy

gld = g.parse("3o$o$bo!")
blck = g.parse("2o$2o!")

def FindActive():

   rect = g.getrect()
   
   cells = g.getcells([rect[0], rect[1], rect[2], 1])
   
   return [cells[0], cells[1]]
         
def FindConnected(listXY):
   result = copy.copy(listXY)
   
   for xy in listXY:
      x = xy[0]
      y = xy[1]
      
      for i in xrange(-1, 2): 
         for j in xrange(-1, 2): 
            if g.getcell(x + i, y + j) > 0 and len([i for t in listXY if (t[0] == x + i and t[1] == y + j)]) == 0:
				if len([i for t in result if (t[0] == x + i and t[1] == y + j)]) == 0:
					result.append([x + i, y + j])
         
   return result
   
def RemoveList(listXY):

   for xy in listXY:
      x = xy[0]
      y = xy[1]
      g.setcell(x, y, 0)

def CountSL():
	
	result = []
	while int(g.getpop()) > 0: 
	   xy = [FindActive()]
	   
	   while True: 
		  newXY = FindConnected(xy)
		  
		  #g.getstring(str(xy) + " : " + str(newXY) )
		  
		  if len(newXY) == len(xy):
			 break
			 
		  xy = newXY
	   
	   result.append(xy)
	   RemoveList(xy)
	  
	   
	  
	return result
  
class SlowSalvoConstructor:
	
	
	def __init__(self, path = None, SLpaths = None, SLExpected = None):
		self.blockX = 0
		self.blockY = 0
		self.sequence = []
		self.recipe = []
		self.block0 = [0,0]
		self.block1 = [0,0]
		self.splitterData1 = [[-4, -14],[-8,7],[12,5],  g.parse("5$22b2o$22b2o$2b2o$2b2o!", -10, 0)]
		self.splitterData2 = [[5, 15],[7,-8],[5,12], g.parse("2$7b2o$7b2o19$5b2o$5b2o!", 0, -10)]
		self.recipeIdxList = []
		self.lastGotoIdx = -1 
		self.SLsMoveTable = []
		self.SLsExpected = SLExpected
		self.init = g.getcells(g.getrect())
		
		if path != None:
			self.moveTable = self.LoadMoveTable(path, True)
		
		if SLpaths != None:
			for pt in SLpaths:
				self.SLsMoveTable.append(self.LoadMoveTable(pt, False))
			
	def CanApplySplit(self):
		return self.CanApplyRecipe(self.splitterData1[0], self.splitterData1[3])
		
	def ApplySplit(self, splitIdx):
		self.recipeIdxList.append("ApplySplit")
		self.recipeIdxList.append(splitIdx)
		
		if splitIdx == 0:
			splitData = self.splitterData1
		else:
			splitData = self.splitterData2
			
		self.AppendRecipe(splitData[0])
		self.block1[0]  = self.block0[0] + splitData[2][0]
		self.block1[1]  = self.block0[1] + splitData[2][1]
		
		self.block0[0]  += splitData[1][0]
		self.block0[1]  += splitData[1][1]
		
	def CanApplyRecipe(self, recipe, expected):
		g.new("")
		g.setstep(3)
		
		g.putcells(blck)
		g.putcells(self.init)
		
		for r in self.recipe:
			g.putcells(gld, 80, 80 + r)
			g.step()
		
		g.select([self.block0[0], self.block0[1], 2, 2])
		g.clear(0)
		cells = g.getcells(g.getrect())
		g.putcells(blck, self.block0[0], self.block0[1])
		delta = self.block0[1] - self.block0[0]
		
		for r in recipe:
			g.putcells(gld, 80, 80 + r + delta)
			g.step()
		
		for i in xrange(0, len(cells), 2):
			x = cells[i]
			y = cells[i + 1]
			
			if g.getcell(x, y) == 0:
				return False
				
		for i in xrange(0, len(expected), 2):
		
			x = expected[i] + self.block0[0]
			y = expected[i + 1] + self.block0[1]
			
			if g.getcell(x, y) == 0:
				return False
				
		return True
	
	def GotoSmart(self, x, y, moveTableIdx):
		return self.GotoSmartConstrained(x, y, moveTableIdx, 1000000)
	
	def GotoSmartConstrained(self, x, y, moveTableIdx, maxL):
		if moveTableIdx == -1:
			return self.Goto(x, y, self.moveTable, blck, maxL)
		else:
			return self.Goto(x, y, self.SLsMoveTable[moveTableIdx],  self.SLsExpected[moveTableIdx], maxL)
			
	def Goto(self, x, y, moveTable, expected, maxL):
		dx = x - self.block0[0]
		dy = y - self.block0[1]
		
		for i in xrange(0, len(moveTable)):
			if len(moveTable[i][2]) >= maxL:
				break
				
			x1 = moveTable[i][0]
			y1 = moveTable[i][1]
			
			if x1 == dx and y1 == dy:
				if self.CanApplyRecipe(moveTable[i][2], g.transform(expected, x1, y1)):
					self.AppendRecipe(moveTable[i][2])
					self.block0[0] = x
					self.block0[1] = y
					self.lastGotoIdx = i
					return True
		
		return False
	
	def Swap(self):
		x =  self.block0[0]
		y =  self.block0[1]
		
		self.block0[0] = self.block1[0]
		self.block0[1] = self.block1[1]
		
		self.block1[0] = x
		self.block1[1] = y
		
		self.recipeIdxList.append("Swap")
		
	def GotoAdvanced(self, x, y, tableIdx, targetL = -1):
		
		if self.GotoSmart(x, y, tableIdx):
			self.recipeIdxList.append("MOVE")
			self.recipeIdxList.append(self.lastGotoIdx)
			self.recipeIdxList.append(tableIdx)
			return True
			
		xtemp0 = self.block0[0]
		ytemp0 = self.block0[1]
		tempRecipe0 = copy.copy(self.recipe)
		
		besti = -1
		bestL = 10000000
		lastx = -1 
		lasty = -1 
		worked = []
		
		for i in xrange(0, len(self.moveTable )):
		
			x1 = self.moveTable[i][0]
			y1 = self.moveTable[i][1]
			
			#TODO autofix odd recipes instead of ignoring them 
			if (y1 - x1) % 2 != 0:
				continue 
				
			if (str(x1) + "," + str(y1)) in worked:
				continue
				
			g.show(str(x) + "," + str(y) + "," + str(i) + "/" + str( len(self.moveTable )) + " BESTi = {0}, BESTL {1}".format(besti, bestL))
			g.update()
		
			self.block0[0] = xtemp0
			self.block0[1] = ytemp0
			self.recipe = copy.copy(tempRecipe0)
			
			if self.CanApplyRecipe(self.moveTable[i][2], g.transform(blck, x1, y1)):
			
				worked.append(str(x1) + "," + str(y1))
				
				self.AppendRecipe(self.moveTable[i][2])
					
				self.block0[0] += x1
				self.block0[1] += y1
				
				recipeLength = bestL - len(self.recipe)
				
				if self.GotoSmartConstrained(x, y, tableIdx, recipeLength):
					if bestL > len(self.recipe) and targetL == -1:
						bestL = len(self.recipe)
						besti = i
						
					if len(self.recipe) == targetL:
						bestL = len(self.recipe)
						besti = i
						break
		
		self.block0[0] = xtemp0
		self.block0[1] = ytemp0
		self.recipe = tempRecipe0
		
		if besti == -1: 
			return False
		else:
			self.AppendRecipe(self.moveTable[besti][2])
			x1 = self.moveTable[besti][0]
			y1 = self.moveTable[besti][1]
			
			self.block0[0] += x1
			self.block0[1] += y1
			
			self.recipeIdxList.append("MOVE")
			self.recipeIdxList.append(besti)
			self.recipeIdxList.append(-1)
			
			self.GotoSmart(x, y, tableIdx)
			
			self.recipeIdxList.append("MOVE")
			self.recipeIdxList.append(self.lastGotoIdx)
			self.recipeIdxList.append(tableIdx)
			
			g.show(str([besti, self.lastGotoIdx]))
			
		return True
	
	def ApplyRecipeSmart(self, idx, moveTableIdx):
		if moveTableIdx == -1:
			self.ApplyRecipeByIndex(idx, self.moveTable)
		else:
			self.ApplyRecipeByIndex(idx, self.SLsMoveTable[moveTableIdx])
			
		self.recipeIdxList.append("MOVE")
		self.recipeIdxList.append(idx)
		self.recipeIdxList.append(moveTableIdx)
		
	def ApplyRecipeByIndex(self, idx, moveTable):
		x1 = moveTable[idx][0]
		y1 = moveTable[idx][1]
		self.AppendRecipe(moveTable[idx][2])
		self.block0[0] += x1
		self.block0[1] += y1
		
			
	def PlaceAt(self, x, y, tableIdx):
		strRes = ""
		self.ApplySplit(0)
		
		s = self.GotoAdvanced(x, y, tableIdx)
		
		if s: 
			self.Swap()
			return True

			
		return False
	
	def AppendExternalRecipe(self, recipe):	
		
		self.AppendRecipe(recipe)
		self.recipeIdxList.append("EXTERNAL")
		self.recipeIdxList.append(recipe)
		
	def AppendRecipe(self, recipe):	
		
		delta = self.block0[1] - self.block0[0]
		
		for r in recipe:
			self.recipe.append(r + delta)
	
	def PlaceActionList(self, list):
		for l in list:
			if l == "ApplySplit":
				self.ApplySplit()
			elif  l == "Swap":
				self.Swap()
			elif isinstance(l, int):
				self.ApplyRecipeByIndex(l)
			else:
				self.AppendExternalRecipe(l)
	
	def PlaceRecipe(self, x = 0, y = 0, makenew = True):
		if makenew:
			g.new("Results")
			
		g.show(str(self.recipe))
		g.setclipstr(str(self.recipe))
		g.putcells(blck, x, y)
		i = 0 
		for r in self.recipe:
			g.putcells(gld, x + 80 + i * 128, y + 80 + i * 128 + r)
			i += 1

	def LoadMoveTable(self, path, report):
		ins = open(path, "r" )
		array = []
		
		bestdxrecipe = []
		bestdx = 1
		idx = 0
		
		for line in ins:
			vals = line.split(":")
			
			vals[0] = vals[0].replace("m", "")
			vals[0] = vals[0].split(",")
			x = int(vals[0][0])
			y = int(vals[0][1])
			vals[1] = vals[1].replace("E", "").replace("\n", "").replace(" ", "")
			vals[1] = vals[1].split(",")
			
			for i in xrange(0, len(vals[1])):
				vals[1][i] = int(vals[1][i])
			
			if x < 0 and -x * len(bestdxrecipe) > -bestdx * len(vals[1]):
				bestdxrecipe = vals[1]
				bestdx = x
				idx = len(array)
				
			array.append([x, y, vals[1]])
			
		if report:
			g.show(str(bestdxrecipe) + ":" + str(idx))
			g.setclipstr(str(bestdxrecipe))
			
		ins.close()
		
		return array	
		
	def Reset(self):
		self.blockX = 0
		self.blockY = 0
		self.sequence = []
		self.recipe = []
		self.block0 = [0,0]
		self.block1 = [0,0]
		self.recipeIdxList = []
		self.lastGotoIdx = -1 
	
	def MonochromaticFix(self):
		dy = self.block0[1] - self.block0[0]
		
		if dy % 2 == 0:
			return
		
		self.recipe.append(dy - 5)
		self.block0[0] += 2
		self.block0[1] += 1
		
	def FindIndexByDx(self, dx):
		for i in xrange(0, len(self.moveTable )):
			if dx == self.moveTable[i][0]:
				return i
		
		return -1
			
	def FindIndexByDxy(self, dx, dy):
		for i in xrange(0, len(self.moveTable )):
			if dx == self.moveTable[i][0] and dy == self.moveTable[i][1]:
				return i
		
		return -1	
		 
SLfiles = []

SLfiles.append("C:\\Users\\SimSim314\\Documents\\GitHub\\Glue\\MonochromaticP2\\WSS.txt")

sls = []
sls.append(g.parse("!"))

salvo = SlowSalvoConstructor("C:\\Users\\SimSim314\\Documents\\GitHub\\Glue\\MonochromaticP2\\534725[[0, 0], [1, 0], [0, 1], [1, 1]].txt", SLfiles, sls)
#salvo = SlowSalvoConstructor("C:\\Users\\SimSim314\\Glue\\375448[[0, 0], [1, 0], [0, 1], [1, 1]].txt", SLfiles, sls)
#-4, -13, -8, -19, -11, 1, -19

def PlaceWSSRecipes():
	salvo.ApplyRecipeByIndex(47675,salvo.moveTable)
	salvo.MonochromaticFix()
	salvo.ApplyRecipeByIndex(47675,salvo.moveTable)
	salvo.MonochromaticFix()
	salvo.ApplyRecipeByIndex(47675,salvo.moveTable)
	salvo.MonochromaticFix()
	salvo.ApplyRecipeByIndex(0,salvo.SLsMoveTable[0])
	salvo.MonochromaticFix()
	salvo.ApplyRecipeByIndex(15,salvo.moveTable)
	salvo.ApplyRecipeByIndex(73830,salvo.moveTable)
	#salvo.ApplyRecipeByIndex(183862,salvo.moveTable)
	salvo.ApplyRecipeByIndex(7,salvo.SLsMoveTable[0])
	salvo.MonochromaticFix()

	salvo.PlaceRecipe()


#g.show(str(salvo.FindIndexByDx(-21)))
#g.show(str(salvo.FindIndexByDxy(-19,-3)))
PlaceWSSRecipes()

#salvo.GotoAdvanced(-19,-3,-1)
EDIT You need to config the path of the monochromatic recipes to use the script, you can download the block moving recipes from here. You also need this recipes with movement list (WSS.txt):

Code: Select all

11,9:-4,2,2,-8,-10,-8,-16,-16,-20,-6,2,-10,-8,4
11,-4:6,6,10,12,12,20,14,4,-12,-16,-14,-14,4,-14,4,-26,16
-2,19:-4,4,-14,2,4,12,16,8,18,-4,8,20,-10,-10,10,0
0,3:-4,0,-8,-2,0,-2,0,-4,-8,0,-6,-10,-4,8,-16,-10
0,-5:-4,0,6,8,4,14,12,-12,-6,20,26,26,-8,-8,10,2
11,9:-4,-12,-4,6,16,10,10,-12,-8,-2,10,0,-28,-42,-16,-26,18
6,-5:-4,-4,-8,-20,-20,-26,10,12,-2,12,-28,-2,4,-16,-6
24,19:-4,0,8,4,6,-8,-10,-8,6,-4,-2,10,4,0,-18,-14,-10,-2,16
6,8:6,6,6,-6,-10,-6,-10,4,4,-4,-6,-22,-14,-18,12,12
9,-11:-4,-6,-8,-16,-28,-22,-14,-16,-2,-6,-16,-20,-2,-38,-2,4,-24,-36,-32,-10,-16,-18
-1,8:-4,0,6,-2,0,0,8,-2,-2,0,6,12,-14,10,-4,6
10,-5:-4,-4,-2,4,0,12,-2,-10,10,12,6,2,4,26,26,8,8,10,12
10,26:6,6,2,0,8,12,14,10,2,-4,16,2,12,2,6,4,14
-8,18:6,6,6,6,-2,4,-12,-2,-16,4,-10,-12,-2,14,40,-12,-10,14,-14,-6,30
-8,12:-4,-14,10,10,14,6,4,-2,-10,-4,12,14,-4,-4,32
5,-5:-4,2,0,-8,-6,-8,-2,-4,8,16,10,0,2,14,-2,-18,-2
Attachments
caterloop_c8_back2front_2gliders.rle
(176.83 KiB) Downloaded 447 times
Last edited by simsim314 on August 11th, 2015, 7:01 pm, edited 2 times in total.

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

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 11th, 2015, 6:56 pm

dvgrn wrote:There are still two recipes that aren't good enough
Lets hope we'll pass those variation peacefully.
dvgrn wrote:In other news, the minimum step for both forward and backward helices is now 96 cells -- very convenient and symmetrical.
As I mentioned the front has dead zone in [116,152] due to glider collision with the front.
dvgrn wrote:I'll have a quick look to see if that allows any significant change in the top speed.
The top speed (c/4 - epsilon) is reached by increasing the period, so the step actually increases for high speed. Did you mean low period?

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

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 12th, 2015, 4:20 am

I think we missed some critical issue, that increases the internal state range to 16 per *WSS type and not 8:

Assuming we have some internal state out of 4. There is obviously no way to make the same recipe to work for other internal state only by moving the SLs two cells down or up, because all our periods are mod 8.

So lets assume we have some internal state, by moving the recipe two cells down (by moving all SLs two cells down), we move the output *WSS by 4 cells (4 ticks for the SL encounter and 4 more ticks because the output *WSS is two cells down). This means that per internal state we have 4 (!) options that can't be covered by SL movement and not 2. So we need 16 recipes (4 per each internal state).

This means we need to take the current recipes per output group, and divide them into two groups defined by (y - x) mod 4.

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

Re: David Bell's engineless caterpillar idea revisited

Post by dvgrn » August 12th, 2015, 10:31 am

simsim314 wrote:I think we missed some critical issue, that increases the internal state range to 16 per *WSS type and not 8...
Ha, yes, we used to know that perfectly well, after chris_c pointed it out.

I think one factor of two might have gotten lost -- the *WSS spatial parity -- after working mostly with odd-step caterloopillars for a while (where you can get the other *WSS parity just by leaving one helix cycle empty, so there really are only eight retimings to worry about).

Guess it's time to re-filter the big list of edge-shooters... maybe just use the close-spaced LWSS pair as a test to filter out usable recipes for each parity. On the other hand, I think there are a lot of recipes that throw a preliminary spark pretty far across the insertion lane, which wouldn't matter for that LWSS pair but would cause problems in some other parts of the helix -- so it's worth also saving recipes that can successfully place the trailing LWSS in, say,

Code: Select all

x = 10, y = 14, rule = B3/S23
8bo$7b3o$6b2obo$6b3o$7b2o5$2bo$b3o$2obo$3o$b2o!
(and the equivalent for MWSSes).

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

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 12th, 2015, 6:49 pm

I think I'll try to use the following trick: making sure the distance between the reading heads is of type 4k + 2. Thus making one cycle skip, will switch the parity mod 4, so only 8 recipes will be needed (when this constrain is possible).

The cases I won't be able to solve this way are speeds (2m + 1) c / (4n + 2), i.e. step = 2m + 1, period = 4n + 2, thus the forward dist = period / 2 - step will be in this case 2(n - m), so when n - m is even the forward distance will always be 0 mod 4, and the only universal recipe collection that works is 16 recipes per type.

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

Re: David Bell's engineless caterpillar idea revisited

Post by dvgrn » August 13th, 2015, 12:11 pm

simsim314 wrote:The cases I won't be able to solve this way are speeds (2m + 1) c / (4n + 2), i.e. step = 2m + 1, period = 4n + 2, thus the forward dist = period / 2 - step will be in this case 2(n - m), so when n - m is even the forward distance will always be 0 mod 4, and the only universal recipe collection that works is 16 recipes per type.
Well, those 48 recipes are definitely out there somewhere -- in the form of a "0-degree reflector" in front of a good *WSS seed, if nothing better shows up. Maybe it makes sense to put together recipes along those lines again?

It's a little tricky, because there won't necessarily be a spare target lying around to build the 0-degree retimer with. It's possible to solve each specific case, but it will cost a lot of gliders.

Does that mean it might be worth running the edge-shooter search for a few more weeks to fill most of the gaps in the toolkit -- and then maybe build a few long awkward recipes to patch up any remaining cases?

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

Re: David Bell's engineless caterpillar idea revisited

Post by simsim314 » August 13th, 2015, 2:54 pm

dvgrn wrote:those 48 recipes are definitely out there somewhere
My main reason why I don't want to go for those 48 recipes (although for HWSS we need only one recipe, and we can fit all other *WSS to the single HWSS in the reading heads so we only need 32 recipes), is not that it's impossible to find them, or that the current recipes have more gaps than what we thought (the MWSS recipes probably has 2-3 gaps for the 16 case), my main reason is that it takes too much time already and I want to build some prototype sacrificing full robustness. The missing set of speeds could be worked out later on.

As for running the search again - except the fact I need to modify the script to work with long long, is that I currently don't have access to machine with more than 8 GB which is requirement for deeper search. I think there is no really good reason to avoid shortcuts (like extra adjustment recipe in front of the existing recipes to fix the gaps), even single adjustment recipe will fix all the gaps, we just need to make sure they are not so common.

All in all there is just twice more work for pretty special case of speeds, so I want to leave it for later.

Post Reply