Home  •  LifeWiki  •  Forums  •  Download Golly

## (27,1)c/72 caterpillar challenge

For discussion of specific patterns or specific families of patterns, both newly-discovered and well-known.

### Re: (27,1)c/72 caterpillar challenge

`x = 172, y = 246, rule = B3/S2366b2o\$66b2o\$54b2o\$54b2o3\$58b2o\$58b2o11b2o\$70bo2bo\$54b2o14bobo\$54b2o15bo4\$52b2o\$51bo2bo\$52b2o3\$2bo\$b3o\$2obo\$3o\$b2o2\$7b3o\$7bo2bo\$7bo57b2o\$7bo57b2o\$8bobo42b2o\$16bo36b2o\$15b3o\$14b2obo\$14b3o40b2o\$15b2o40b2o11b2o\$69bo2bo\$69bobo\$4bo65bo\$3b3o\$2b2obo\$2b3o\$3b2o46b2o\$50bo2bo\$9b3o39b2o\$9bo2bo\$9bo\$9bo\$10bobo\$18bo\$17b3o\$16b2obo\$16b3o\$17b2o2\$64b2o\$6bo57b2o\$5b3o44b2o\$4b2obo44b2o\$4b3o\$5b2o\$56b2o\$11b3o42b2o11b2o\$11bo2bo53bo2bo\$11bo40b2o14bobo\$11bo40b2o15bo\$12bobo\$20bo\$19b3o\$18b2obo28b2o\$18b3o28bo2bo\$19b2o29b2o3\$8bo\$7b3o\$6b2obo\$6b3o\$7b2o2\$13b3o\$13bo2bo\$13bo49b2o\$13bo49b2o\$14bobo34b2o\$22bo28b2o\$21b3o\$20b2obo\$20b3o32b2o\$21b2o32b2o11b2o\$67bo2bo\$67bobo\$10bo57bo\$9b3o\$8b2obo\$8b3o\$9b2o38b2o\$48bo2bo\$15b3o31b2o\$15bo2bo\$15bo153b2o\$15bo153bobo\$16bobo150bo\$24bo\$23b3o\$22b2obo\$22b3o\$23b2o2\$62b2o86b2o\$12bo49b2o86bobo\$11b3o36b2o98bo\$10b2obo36b2o\$10b3o\$11b2o\$54b2o\$17b3o34b2o11b2o\$17bo2bo45bo2bo\$17bo32b2o14bobo62b2o\$17bo32b2o15bo63bobo\$18bobo110bo\$26bo\$25b3o\$24b2obo20b2o\$24b3o20bo2bo\$25b2o21b2o2\$112b2o\$14bo97bobo\$13b3o96bo\$12b2obo\$12b3o\$13b2o2\$19b3o\$19bo2bo\$19bo41b2o30b2o\$19bo41b2o30bobo\$20bobo26b2o42bo\$28bo20b2o\$27b3o\$26b2obo\$26b3o24b2o\$27b2o24b2o11b2o\$65bo2bo\$65bobo6b2o\$16bo49bo7bobo\$15b3o56bo\$14b2obo\$14b3o\$15b2o30b2o\$46bo2bo\$21b3o23b2o\$21bo2bo\$21bo\$21bo\$22bobo44b3o\$30bo40bo\$29b3o38bo\$28b2obo\$28b3o\$29b2o3\$18bo\$17b3o28b2o36b3o\$16b2obo28b2o38bo\$16b3o68bo\$17b2o\$52b2o\$23b3o26b2o\$23bo2bo\$23bo24b2o\$23bo24b2o\$24bobo\$32bo\$31b3o12b2o\$30b2obo12b2o\$30b3o12bo2bo\$31b2o12bo3b2o\$46b2o2\$20bo\$19b3o\$18b2obo\$18b3o\$19b2o2\$25b3o11bo\$25bo2bo10bo\$25bo\$25bo\$26bobo\$34bo\$33b3o\$32b2obo6bo\$32b3o6bobo\$33b2o5b2o2bo\$44bo\$38b2obo2bo\$22bo15b4o\$21b3o13b3o3bo\$20b2obo13b2o2bo\$20b3o15bobo2b3o\$21b2o16b6o\$42b3o\$27b3o\$27bo2bo\$27bo15bobo\$27bo15bobo\$28bobo13bo8\$24bo\$23b3o\$22b2obo\$22b3o\$23b2o2\$29b3o\$29bo2bo\$29bo\$29bo\$30bobo8\$26bo\$25b3o\$24b2obo\$24b3o\$25b2o2\$31b3o\$31bo2bo\$31bo\$31bo\$32bobo!`

This is a way to build the x2 streams, but it seems a little costly at 5 SL. The reflected NE glider is used to start a new construction target far enough right to align with the next ship. Using splitters with different timing should allow matching any color/phase LWSS - the one shown matches the middle LWSS in the 5 LWSS design chris_c posted.

x2 information is lost in this example, making the next synthesis require some explicit period doubler. I looked into NW/NE rake collisions to see if any are period doubling without being monstrously messy - none showed up. If we are looking for a self-sustaining x2 feedback loop, there should be an additional signal released by the no-fire option. There was a different block placement that gave off a SE glider but it also left two blocks behind so it seemed unusable.

With this as the example though, maybe someone can find significantly better ways to accomplish the same thing.
Physics: sophistication from simplicity.

biggiemac

Posts: 504
Joined: September 17th, 2014, 12:21 am
Location: California, USA

### Re: (27,1)c/72 caterpillar challenge

biggiemac wrote:This is a way to build the x2 streams, but it seems a little costly at 5 SL.

It looks pretty good to me. 3SL for a clean and edgy LWSS seems reasonable and we can probably reduce the cost of the splitter by searching for ones directly from slow salvo instead of from 2SL seeds.

biggiemac wrote:If we are looking for a self-sustaining x2 feedback loop, there should be an additional signal released by the no-fire option. There was a different block placement that gave off a SE glider but it also left two blocks behind so it seemed unusable.

With this as the example though, maybe someone can find significantly better ways to accomplish the same thing.

I couldn't find anything that gives a clean glider using a single still life but I did find these alternative vanish reactions which may be useful:

`x = 119, y = 17, rule = B3/S233b2o49b2o44b3o\$3b2o49b2o\$107b2o\$107b2o\$7b2o49b2o\$7b2o42bo6b2o\$50bobo58b2o\$3b2o7bobo35bobo10bobo45b2o\$3b2o7b2o37bo11b2o\$13bo50bo51bobo\$116b2o\$117bo\$b2o49b2o\$o2bo47bo2bo\$b2o49b2o51b2o\$104bo2bo\$105b2o!`

We can have blinkers (of this particular color and phase at least) as our x2 component using the following method:

`x = 78, y = 32, rule = B3/S232b3o37b3o2\$o5bo33bo5bo\$o5bo33bo5bo\$o5bo33bo5bo2\$42b3o3\$15b3o37b3o\$15bo39bo\$16bo39bo5\$28b3o37b3o\$28bo39bo\$29bo39bo11\$35b3o37b3o\$35bo39bo\$36bo39bo!`

I don't know about hives but there should be a method involving honey farms I imagine.

Since there is so much clearance in the LWSS recipe we could investigate alternative LOM seeds (possibly ones that are easy to make with our slow salvos) and hope that a clean glider can be made to pop out that way.

EDIT: A B-heptomino seed of opposite phase to that used below would yield a simple period doubler:

`x = 118, y = 130, rule = B3/S2311bo\$10bobo\$11b2o2\$3b2o\$3b2o22\$10bo\$9bobo\$10b2o2\$2b2o\$2b2o22\$9bo\$8bobo\$9b2o2\$b2o\$b2o2\$69b2o\$69bobo\$69bo7\$50b2o\$50bobo\$50bo7\$31b2o\$31bobo\$8bo22bo\$7bobo\$8b2o2\$2o\$2o2\$12b2o\$12bobo\$12bo10\$116b2o\$115b2o\$117bo7\$97b2o\$96b2o\$98bo7\$78b2o\$77b2o\$79bo7\$59b2o\$58b2o\$60bo!`
Last edited by chris_c on September 20th, 2016, 8:20 pm, edited 1 time in total.
chris_c

Posts: 892
Joined: June 28th, 2014, 7:15 am

### Re: (27,1)c/72 caterpillar challenge

I just resurrected the scss thread over in scripts. What occurred to me as I was thinking about parallel construction is a way to use only 4 LWSS instead of 5. In fact, it could be as low as 2 given some heisenburns.

We begin with a x2-spaced trail of something large (HF in the example), and hit it with a x1 rake such that the debris is gliderless and spans enough construction lanes to begin parallel construction using x1 rakes.
`x = 75, y = 82, rule = B3/S238bo\$7bobo\$7bobo\$8bo2\$3b2o7b2o\$2bo2bo5bo2bo\$3b2o7b2o2\$8bo\$7bobo\$7bobo\$8bo40\$72b2o\$72bobo\$6bo65bo\$5bobo\$5bobo\$6bo2\$b2o7b2o\$o2bo5bo2bo\$b2o7b2o41b2o\$53bobo\$6bo46bo\$5bobo\$5bobo\$6bo4\$34b2o\$34bobo\$34bo7\$15b2o\$15bobo\$15bo!`

It removes a zigzag, and might be more usable for the x2 LWSS constructions. The (major) downside is, I don't know the comparison between the number of rakes needed to turn this into options (1) and (2) from before and the depth feasible from a parallel-construction search utility. I imagine it isn't in our favor. However, parallel construction is likely to take larger depth to suffer the ballooning effect due to more candidates getting thrown out for poor behavior on one or the other target. Can't know for sure until it's written..!

At some point I think it'd be good if the parallel effort converged to build a x1 trail of splitters, so that there's no worry about achieving the extremely unlikely outcome of both giving a clean NE glider at the same point in the recipe. The second glider from the splitter goes on to activate the LWSS in one and destroy the constellation in the other.

For later constructions, the same doubling trick as above works starting from a x1 HF trail, just with more colorful debris.
`x = 75, y = 109, rule = B3/S239bo\$8bobo\$8bobo\$9bo2\$4b2o7b2o\$3bo2bo5bo2bo\$4b2o7b2o2\$9bo\$8bobo\$8bobo\$9bo15\$8bo\$7bobo\$7bobo\$8bo2\$3b2o7b2o\$2bo2bo5bo2bo\$3b2o7b2o2\$8bo\$7bobo\$7bobo\$8bo15\$7bo\$6bobo\$6bobo\$7bo2\$2b2o7b2o\$bo2bo5bo2bo\$2b2o7b2o2\$7bo\$6bobo\$6bobo\$7bo13\$72b2o\$72bobo\$6bo65bo\$5bobo\$5bobo\$6bo2\$b2o7b2o\$o2bo5bo2bo\$b2o7b2o41b2o\$53bobo\$6bo46bo\$5bobo\$5bobo\$6bo4\$34b2o\$34bobo\$34bo7\$15b2o\$15bobo\$15bo!`

And for the final construction, of the tracks that turn this singleton into the 5-track cluster, having a x1 trail to start off from is ideal. So really, all that we need is another tailored search program..
Physics: sophistication from simplicity.

biggiemac

Posts: 504
Joined: September 17th, 2014, 12:21 am
Location: California, USA

### Re: (27,1)c/72 caterpillar challenge

The blocks in this pattern are on the same lane with respect to NW rakes, but 2 cells displaced NW/SE. Parallel construction would then involve building the same pattern but 2 fd separate, and incorporating a x2 hive. That could work.

`x = 290, y = 192, rule = B3/S23171b2o\$171bobo\$171bo7\$152b2o\$152bobo\$bo150bo\$b2o\$obo5\$133b2o\$133bobo\$133bo7\$114b2o\$114bobo\$35bo78bo\$35b2o\$34bobo5\$95b2o\$95bobo\$95bo7\$76b2o\$76bobo\$69bo6bo\$69b2o\$68bobo23\$227b2o\$227bobo\$227bo7\$208b2o\$208bobo\$208bo7\$189b2o\$189bobo\$189bo7\$170b2o\$170bobo\$170bo7\$151b2o\$151bobo\$151bo7\$132b2o\$132bobo\$132bo25\$287b2o\$287bobo\$287bo7\$268b2o\$268bobo\$268bo7\$249b2o\$249bobo\$249bo7\$230b2o\$230bobo\$230bo7\$211b2o\$211bobo\$211bo7\$192b2o\$192bobo\$192bo!`

Edit: the above from only 2 *WSS, with the -4 offsets worked out. The second NW rake may be moved downward in steps of 180 to keep the heisenburn working. The remaining gliders can be killed off with another LWSS as far spaced as it needs to be, meaning the MWSS construction can safely leave debris.
`x = 564, y = 649, rule = B3/S23421b2o\$421bobo\$421bo7\$402b2o\$402bobo\$402bo7\$383b2o\$383bobo\$383bo7\$364b2o\$364bobo\$364bo7\$345b2o\$345bobo\$345bo7\$326b2o\$326bobo\$326bo7\$307b2o\$307bobo\$307bo7\$288b2o\$288bobo\$288bo7\$269b2o\$269bobo\$269bo7\$250b2o\$250bobo\$250bo7\$231b2o\$231bobo\$231bo7\$212b2o\$212bobo\$212bo7\$193b2o\$193bobo\$193bo7\$174b2o\$174bobo\$174bo7\$155b2o\$155bobo\$155bo7\$136b2o\$136bobo\$136bo7\$117b2o\$117bobo\$117bo7\$98b2o\$98bobo\$98bo7\$79b2o\$79bobo\$79bo7\$60b2o\$60bobo\$60bo7\$41b2o\$41bobo\$41bo7\$22b2o\$22bobo\$22bo7\$3b2o\$3bobo\$3bo2\$5bo\$4b3o\$4bob2o\$5b3o\$5b2o5\$2b3o\$bo2bo\$4bo\$o3bo\$4bo\$bobo4\$7bo\$6b3o26bo\$6bob2o25b2o\$7b3o24bobo\$7b2o5\$4b3o\$3bo2bo\$6bo\$2bo3bo\$6bo\$3bobo4\$9bo\$8b3o58bo\$8bob2o57b2o\$9b3o56bobo\$9b2o4\$455b2o\$6b3o446bobo\$5bo2bo446bo\$8bo\$4bo3bo\$8bo\$5bobo3\$436b2o\$11bo424bobo\$10b3o90bo332bo\$10bob2o89b2o\$11b3o88bobo\$11b2o4\$417b2o\$8b3o406bobo\$7bo2bo406bo\$10bo\$6bo3bo\$10bo\$7bobo3\$398b2o\$13bo384bobo\$12b3o122bo260bo\$12bob2o121b2o\$13b3o120bobo\$13b2o4\$379b2o\$10b3o366bobo\$9bo2bo366bo\$12bo\$8bo3bo\$12bo\$9bobo3\$360b2o\$15bo344bobo\$14b3o154bo188bo\$14bob2o153b2o\$15b3o152bobo\$15b2o4\$341b2o\$12b3o326bobo\$11bo2bo326bo\$14bo\$10bo3bo\$14bo\$11bobo3\$322b2o\$17bo304bobo\$16b3o186bo116bo\$16bob2o185b2o\$17b3o184bobo\$17b2o\$508b2o\$508bobo\$508bo\$303b2o\$14b3o286bobo\$13bo2bo286bo\$16bo\$12bo3bo\$16bo\$13bobo473b2o\$489bobo\$489bo\$284b2o\$19bo264bobo\$18b3o218bo44bo\$18bob2o217b2o\$19b3o216bobo\$19b2o\$470b2o\$470bobo\$470bo\$265b2o\$16b3o246bobo\$15bo2bo246bo\$18bo\$14bo3bo\$18bo\$15bobo433b2o\$451bobo\$451bo2\$21bo\$20b3o\$20bob2o\$21b3o\$21b2o\$432b2o\$264b2o166bobo\$255b2o3b2o2b2o166bo\$227b2o31b2o\$18b3o206bobo21b2o2bo\$17bo2bo206bo27bo\$20bo234bo2bo\$16bo3bo235bo\$20bo\$17bobo393b2o\$413bobo\$413bo2\$23bo\$22b3o\$22bob2o\$23b3o\$23b2o240bo\$263bo2bo127b2o\$266bo127bobo\$266bo2b2o123bo\$189b2o69b2o\$20b3o166bobo64b2o2b2o3b2o\$19bo2bo166bo66b2o\$22bo\$18bo3bo\$22bo\$19bobo353b2o\$375bobo\$375bo2\$25bo\$24b3o\$24bob2o\$25b3o\$25b2o\$356b2o\$356bobo\$356bo\$151b2o\$22b3o126bobo\$21bo2bo126bo\$24bo\$20bo3bo\$24bo\$21bobo313b2o\$337bobo\$337bo2\$27bo\$26b3o\$26bob2o\$27b3o\$27b2o\$318b2o\$262b2o54bobo\$258b2o2b2o54bo\$113b2o143b2o301b2o\$24b3o86bobo445bobo\$23bo2bo86bo447bo\$26bo\$22bo3bo\$26bo\$23bobo273b2o\$299bobo\$299bo\$542b2o\$29bo512bobo\$28b3o511bo\$28bob2o\$29b3o\$29b2o\$280b2o\$280bobo\$280bo\$75b2o181b2o263b2o\$26b3o46bobo176b2o2b2o263bobo\$25bo2bo46bo178b2o267bo\$28bo\$24bo3bo\$28bo\$25bobo233b2o\$261bobo\$261bo\$504b2o\$31bo472bobo\$30b3o471bo\$30bob2o\$31b3o\$31b2o4\$37b2o446b2o\$28b3o6bobo445bobo\$27bo2bo6bo447bo\$30bo\$26bo3bo\$30bo\$27bobo3\$466b2o\$33bo432bobo\$32b3o431bo\$32bob2o\$33b3o\$33b2o3\$256b2o\$256b2o189b2o\$30b3o414bobo\$29bo2bo414bo\$32bo\$28bo3bo\$32bo\$29bobo3\$428b2o\$35bo392bobo\$34b3o391bo\$34bob2o\$35b3o\$35b2o4\$409b2o\$32b3o374bobo\$31bo2bo219b2o153bo\$34bo219b2o\$30bo3bo\$34bo\$31bobo\$274bobo\$275b2o\$248b2o4b2o19bo114b2o\$37bo210b2o4b2o134bobo\$36b3o351bo\$36bob2o\$37b3o\$37b2o4\$371b2o\$34b3o334bobo\$33bo2bo334bo\$36bo\$32bo3bo\$36bo\$33bobo3\$352b2o\$39bo312bobo\$38b3o311bo\$38bob2o\$39b3o\$39b2o3\$254b2o\$254b2o77b2o\$36b3o294bobo\$35bo2bo294bo\$38bo\$34bo3bo\$38bo\$35bobo3\$314b2o\$41bo272bobo\$40b3o271bo\$40bob2o\$41b3o\$41b2o4\$295b2o\$38b3o254bobo\$37bo2bo211b2o41bo\$40bo211b2o\$36bo3bo\$40bo\$37bobo3\$246b2o4b2o\$43bo202b2o4b2o\$42b3o\$42bob2o\$43b3o\$43b2o4\$257b2o\$40b3o214bobo\$39bo2bo214bo\$42bo\$38bo3bo\$42bo\$39bobo4\$45bo\$44b3o\$44bob2o\$45b3o\$45b2o3\$252b2o\$252b2o\$42b3o\$41bo2bo\$44bo\$40bo3bo\$44bo\$41bobo4\$47bo\$46b3o\$46bob2o\$47b3o\$47b2o5\$44b3o\$43bo2bo\$46bo\$42bo3bo\$46bo\$43bobo203b2o\$249b2o3\$49bo\$48b3o\$48bob2o\$49b3o\$49b2o2\$250bo\$249bobo\$249bobo\$46b3o201bo\$45bo2bo\$48bo\$44bo3bo\$48bo\$45bobo4\$51bo\$50b3o\$50bob2o\$51b3o\$51b2o5\$48b3o\$47bo2bo\$50bo\$46bo3bo\$50bo\$47bobo4\$53bo\$52b3o\$52bob2o\$53b3o\$53b2o5\$50b3o\$49bo2bo\$52bo\$48bo3bo\$52bo\$49bobo!`

Edit2: The hive suppressing the LWSS chris_c found earlier still works with the no-fire pattern 2fd closer to the LWSS. Also, with the offset, x2 information is no longer lost to the next piece of trail, since the NE gliders will be caught to provide debris with the same offset. I like this a lot.
`x = 172, y = 248, rule = B3/S2364b2o\$64b2o\$52b2o\$52b2o3\$56b2o\$49bo6b2o11b2o\$48bobo17bo2bo\$48bobo17bobo\$49bo19bo4\$50b2o\$49bo2bo\$50b2o5\$2bo\$b3o\$2obo\$3o\$b2o2\$7b3o\$7bo2bo\$7bo57b2o\$7bo57b2o\$8bobo42b2o\$16bo36b2o\$15b3o\$14b2obo\$14b3o40b2o\$15b2o40b2o11b2o\$69bo2bo\$69bobo\$4bo65bo\$3b3o\$2b2obo\$2b3o\$3b2o46b2o\$50bo2bo\$9b3o39b2o\$9bo2bo\$9bo\$9bo\$10bobo\$18bo\$17b3o\$16b2obo\$16b3o\$17b2o43b2o\$62b2o\$50b2o\$6bo43b2o\$5b3o\$4b2obo\$4b3o47b2o\$5b2o40bo6b2o11b2o\$46bobo17bo2bo\$11b3o32bobo17bobo\$11bo2bo32bo19bo\$11bo\$11bo\$12bobo\$20bo27b2o\$19b3o25bo2bo\$18b2obo26b2o\$18b3o\$19b2o3\$8bo\$7b3o\$6b2obo\$6b3o\$7b2o2\$13b3o\$13bo2bo\$13bo49b2o\$13bo49b2o\$14bobo34b2o\$22bo28b2o\$21b3o\$20b2obo\$20b3o32b2o\$21b2o32b2o11b2o\$67bo2bo\$67bobo\$10bo57bo\$9b3o\$8b2obo\$8b3o\$9b2o38b2o\$48bo2bo\$15b3o31b2o\$15bo2bo\$15bo153b2o\$15bo153bobo\$16bobo150bo\$24bo\$23b3o\$22b2obo\$22b3o\$23b2o35b2o\$60b2o\$48b2o100b2o\$12bo35b2o100bobo\$11b3o136bo\$10b2obo\$10b3o39b2o\$11b2o32bo6b2o11b2o\$44bobo17bo2bo\$17b3o24bobo17bobo\$17bo2bo24bo19bo\$17bo113b2o\$17bo113bobo\$18bobo110bo\$26bo19b2o\$25b3o17bo2bo\$24b2obo18b2o\$24b3o\$25b2o2\$112b2o\$14bo97bobo\$13b3o96bo\$12b2obo\$12b3o\$13b2o2\$19b3o\$19bo2bo\$19bo41b2o30b2o\$19bo41b2o30bobo\$20bobo26b2o42bo\$28bo20b2o\$27b3o\$26b2obo\$26b3o24b2o\$27b2o24b2o11b2o\$65bo2bo\$65bobo6b2o\$16bo49bo7bobo\$15b3o56bo\$14b2obo\$14b3o\$15b2o30b2o\$46bo2bo\$21b3o23b2o\$21bo2bo\$21bo\$21bo\$22bobo40b3o\$30bo36bo\$29b3o34bo\$28b2obo\$28b3o\$29b2o2\$46b2o\$18bo27b2o\$17b3o66b3o\$16b2obo68bo\$16b3o31b2o35bo\$17b2o24bo6b2o\$42bobo\$23b3o16bobo\$23bo2bo16bo\$23bo\$23bo\$24bobo72b3o\$32bo11b2o55bo\$31b3o9bo2bo2bobo48bo\$30b2obo10b2o3b2o\$30b3o17bo\$31b2o3\$20bo\$19b3o98b3o\$18b2obo100bo\$18b3o100bo\$19b2o2\$25b3o11bo\$25bo2bo10bo\$25bo\$25bo\$26bobo108b3o\$34bo104bo\$33b3o102bo\$32b2obo6bo\$32b3o6bobo\$33b2o5b2o2bo\$44bo\$38b2obo2bo\$22bo15b4o\$21b3o13b3o3bo\$20b2obo13b2o2bo\$20b3o15bobo2b3o\$21b2o16b6o\$42b3o\$27b3o\$27bo2bo\$27bo15bobo\$27bo15bobo\$28bobo13bo8\$24bo\$23b3o\$22b2obo\$22b3o\$23b2o2\$29b3o\$29bo2bo\$29bo\$29bo\$30bobo8\$26bo\$25b3o\$24b2obo\$24b3o\$25b2o2\$31b3o\$31bo2bo\$31bo\$31bo\$32bobo!`

Edit3: Oh drat. The LoM + 2 blocks inserter doesn't work with the MWSS where it is. Excitement back down a bit.
`x = 30, y = 60, rule = B3/S232b3o\$bo2bo\$4bo\$o3bo\$4bo\$bobo20b2o\$24b2o3\$7bo20b2o\$6b3o19b2o\$6bob2o\$7b3o\$7b2o4\$22b2o\$4b3o14bo2bo3bo\$3bo2bo15b2o2b2o\$6bo20b2o\$2bo3bo\$6bo\$3bobo4\$9bo\$8b3o\$8bob2o\$9b3o\$9b2o5\$6b3o\$5bo2bo\$8bo\$4bo3bo\$8bo\$5bobo13\$8b3o\$7bo2bo\$10bo\$6bo3bo\$10bo\$7bobo!`

Edit4: Nor does the loaf+block+blinker inserter, nor the lauded champion. We might not get to use this *WSS pair.
`x = 25, y = 62, rule = B3/S2316b2o\$15bo2bo2b3o\$16bobo2bo\$17bo4bo5\$18b3o\$23b2o\$23b2o10\$3o\$o2bo\$o\$o3bo\$o\$bobo4\$5bo\$4b3o\$3b2obo\$3b3o\$4b2o5\$2b3o\$2bo2bo\$2bo\$2bo3bo\$2bo\$3bobo13\$4b3o\$4bo2bo\$4bo\$4bo3bo\$4bo\$5bobo!`

`x = 44, y = 105, rule = B3/S2341bobo\$41b2o\$42bo6\$23b2o\$23b2o13\$28b2o\$28b2o3\$19b2o\$18bobo\$19bo35\$3o\$o2bo\$o\$o3bo\$o\$bobo4\$5bo\$4b3o\$3b2obo\$3b3o\$4b2o5\$2b3o\$2bo2bo\$2bo\$2bo3bo\$2bo\$3bobo13\$4b3o\$4bo2bo\$4bo\$4bo3bo\$4bo\$5bobo!`
Physics: sophistication from simplicity.

biggiemac

Posts: 504
Joined: September 17th, 2014, 12:21 am
Location: California, USA

### Re: (27,1)c/72 caterpillar challenge

biggiemac wrote:Oh drat. The LoM + 2 blocks inserter doesn't work with the MWSS where it is. Excitement back down a bit.

How annoying. It was looking pretty good. I found a couple of alternatives: the first one downgrades the MWSS to an LWSS and adds an extra LWSS to clean; the second is a different reflection but requires a closely spaced pair of LWSS in order to delete a glider. Unfortunately neither of these works with the LOM + blocks method either. Double drat.

`x = 261, y = 68, rule = B3/S2344b2o\$44bobo\$44bo\$105b2o\$105bobo\$105bo2\$209b2o\$209bobo\$25b2o182bo\$25bobo\$25bo\$86b2o\$86bobo\$86bo2\$190b2o\$190bobo\$6b2o182bo\$6bobo\$6bo251b2o\$67b2o189bobo\$8bo58bobo188bo\$7b3o57bo\$7bob2o\$8b3o160b2o\$8b2o161bobo\$171bo2\$239b2o\$239bobo\$5b3o231bo\$4bo2bo\$7bo\$7bo138b3o3b2o\$4bobo139bo2bo2bobo\$146bo5bo\$146bo\$147bobo70b2o\$220bobo\$bo8bo209bo\$3o6b3o141b3o\$ob2o5bob2o140bo2bo\$b3o6b3o140bo\$b2o7b2o141bo3bo\$146bo6bo\$145b3o6bobo\$144b2obo\$144b3o\$7b3o135b2o\$6bo2bo\$9bo\$9bo138b3o\$6bobo139bo2bo\$148bo\$148bo\$149bobo2\$3bo\$2b3o150b3o\$2bob2o149bo2bo\$3b3o149bo\$3b2o150bo3bo\$148bo6bo\$147b3o6bobo\$146b2obo\$146b3o\$147b2o!`
chris_c

Posts: 892
Joined: June 28th, 2014, 7:15 am

### Re: (27,1)c/72 caterpillar challenge

In the first example you posted, the first insertion can be done with the R + blinker + G method, assuming the R can be placed without interfering. There might be a way to use frozen tracks (or generic splitters) to get the second signal synchronized without too much frustration. Then the other two are LOM + blocks compatible.
`x = 34, y = 95, rule = B3/S239bo\$8b3o\$7b2obo\$7b3o\$8b2o3\$16bo\$14b3o\$6b3o6bo\$6bo2bo\$6bo\$6bo\$7bobo3\$17bo\$17bo6b2o\$2bo14bo6bobo\$b3o20bo\$2obo\$3o\$b2o5\$8b3o\$8bo2bo\$8bo\$8bo\$9bobo5\$4bo\$3b3o\$2b2obo\$2b3o\$3b2o\$28b2o\$28b2o3\$10b3o19b2o\$10bo2bo18b2o\$10bo\$10bo\$11bobo4\$26b2o\$6bo18bo2bo2bo\$5b3o18b2o2bo\$4b2obo22b3o\$4b3o\$5b2o5\$12b3o\$12bo2bo\$12bo\$12bo\$13bobo5\$8bo\$7b3o\$6b2obo\$6b3o\$7b2o14\$10bo\$9b3o\$8b2obo\$8b3o\$9b2o!`

I would rather use the second (only 3 *WSS total) but no method I know of is able to insert either of the LWSS with the other present. If one were, it would probably be able to solve the original problem anyway.

Edit: Well, we can get the better of both alternatives with this:
`x = 220, y = 93, rule = B3/S23195bo\$194b3o\$67b3o123b2obo\$67bo125b3o\$68bo125b2o3\$202bo\$200b3o\$192b3o6bo\$192bo2bo\$48b3o141bo\$48bo143bo\$49bo143bobo\$109b3o\$109bo75b3o\$110bo73bo2bo15bo\$187bo15bo6b2o\$183bo3bo15bo6bobo\$187bo22bo\$29b3o152bobo\$29bo\$30bo\$90b3o\$90bo\$91bo2\$194b3o\$194bo2bo\$10b3o181bo\$10bo183bo\$11bo183bobo\$71b3o\$12bo58bo115b3o\$11b3o58bo113bo2bo\$10b2obo175bo\$10b3o172bo3bo\$11b2o176bo\$186bobo3\$214b2o\$9b3o202b2o\$9bo2bo\$9bo\$9bo186b3o19b2o\$10bobo183bo2bo18b2o\$196bo\$2b3o191bo\$bo2bo192bobo\$4bo\$o3bo9bo174b3o\$4bo8b3o172bo2bo\$bobo8b2obo175bo20b2o\$12b3o172bo3bo19bo2bo2bo\$13b2o176bo20b2o2bo\$188bobo25b3o4\$11b3o\$11bo2bo\$11bo\$11bo186b3o\$12bobo183bo2bo\$198bo\$4b3o191bo\$3bo2bo192bobo\$6bo\$2bo3bo184b3o\$6bo183bo2bo\$3bobo187bo\$189bo3bo\$193bo\$190bobo13\$193b3o\$192bo2bo\$195bo\$191bo3bo\$195bo\$192bobo!`

Avoid an extra LWSS later down the line with a MWSS doing double cleanup. And once again, this MWSS synthesis is permitted to be dirty.

Edit2: But of course there's an additional downside. Since the heisenburn before was in the MWSS spark, the pattern posted above doesn't allow for heisenburning the lower spare glider. (There is a LWSS heisenburn of a glider with the same shape but wrong color). So that would mean back up to 4 *WSS.

I was playing around earlier and there certainly exist precursors of patterns with the same footprint as an LWSS that can squeeze in between the MWSS in the original problem. Most interfere with the upper MWSS sparks but it can be done without destroying the MWSS. I can't really imagine tailoring a search to find *WSS-spark-assisted-edge-shooters but I know this isn't the first project where that has been desired. (Also brought up there is simultaneous production of both problematic ships. It's too bad apgsearch doesn't catalog closely-spaced standard spaceships since there might be some neat edgy double-shooters out there that someone's computer has run and long forgotten)

Edit3: I'm thinking the better option would be to try to look for similar ways to hit a target with a x1 rake that give a convergent-with-offset x1 trail with a small x2 defect. The blockade one was found with a manual search; higher depth on the HF posted earlier might give something nice.

Edit4: If we have any offset between the two patterns, there can be no help from frozen trails, so I'd really like a pattern where the ships can be simply slow-constructed. We can probably limp our way from something as sparse as a x2 block trail to the LOM if we really need to. I looked into the heisenburns more carefully. We can move a NW rake vertically by 2 cells by changing the climber phase, and with respect to constructions there are 14 different even lanes ((27+1)/2). Moving a rake down 28 cells gives the same intersection with the trail, while moving down 20 cells gives the same intersection with the x2 helix. If we end up needing a number of heisenburns to go through to reach a convergent-with-offset starting pattern, it only cuts the number of usable lanes in half (assuming the x2 helix is such that a heisenburn exists). Tomorrow I will try to categorize the reflectors in terms of synthesizability, heisenburnability, and whether the upper glider can be easily eliminated. Then we will try to see if we can get away with only 3 slow-constructible ships in the stream.
Physics: sophistication from simplicity.

biggiemac

Posts: 504
Joined: September 17th, 2014, 12:21 am
Location: California, USA

### Re: (27,1)c/72 caterpillar challenge

biggiemac wrote: Well, we can get the better of both alternatives with this:

Well the R + G + blinker method can be made to work with the original LWSS + MWSS reflector so we would be done if there was a nice way to build this and to make the reaction vanish in half of the cases:

`x = 31, y = 43, rule = B3/S2312bo\$3o8bobo\$o2bo7bo2bo\$o11b2o\$o3bo\$o\$bobo7b2o\$11b2o\$23b3o\$23bo\$5bo7bo10bo\$4b3o6bo\$3b2obo6bo\$3b3o\$4b2o5\$2b3o23b2o\$2bo2bo22bobo\$2bo25bo\$2bo3bo\$2bo\$3bobo13\$4b3o\$4bo2bo\$4bo\$4bo3bo\$4bo\$5bobo!`

Both of those requirements look like quite big "ifs" though.

biggiemac wrote:Tomorrow I will try to categorize the reflectors in terms of synthesizability, heisenburnability, and whether the upper glider can be easily eliminated. Then we will try to see if we can get away with only 3 slow-constructible ships in the stream.

From what I have seen so far, compatibility with the LoM plus blocks recipe is very desirable. It's simple and the high clearance means that vanishing half of the construction sites is doable.
chris_c

Posts: 892
Joined: June 28th, 2014, 7:15 am

### Re: (27,1)c/72 caterpillar challenge

I am attaching a file of roughly 500 dirty edge *WSS edge shooters (well, edgy enough for this project anway). I haven't gone through them mechanically but some of the best are capable of inserting into the LWSS + MWSS salvo:

`x = 201, y = 67, rule = B3/S2328bo\$27bo\$27b3o\$103bo\$103bobo\$103b2o\$190b2o\$14b2o173bo2bo\$9b3o2bobo172bo2bo\$15b2o173b2o3\$16b2o\$16b2o\$97b2o93b2o\$96bobo92bo2bo\$96b2o93bo2bo\$192b2o3\$187b3o8b3o\$3b3o192bo\$2bo2bo88b2o103bo\$5bo88bobo\$5bo89bo\$2bobo\$100b3o3\$2bo\$b3o\$2obo\$3o175b3o\$3o174bo2bo\$b2o177bo\$84b3o93bo\$83bo2bo90bobo\$86bo\$86bo\$83bobo\$177bo\$176b3o\$175b2obo\$83bo91b3o\$82b3o90b3o\$81b2obo91b2o\$81b3o\$4bo76b3o\$3b3o76b2o\$2b2obo\$2b3o\$2b3o\$3b2o6\$179bo\$178b3o\$177b2obo\$85bo91b3o\$84b3o90b3o\$83b2obo91b2o\$83b3o\$83b3o\$84b2o!`

They are interesting but I haven't had any luck with both cleaning and making an x2 on/off mechanism with them. Hopefully something is possible with some more effort.

EDIT: HWSS might be possible. I haven't investigated clean up:

`x = 28, y = 26, rule = B3/S237b3o4\$19bo\$18bobo\$17bo2bo4b2o\$18b2o5bobo\$25bo2\$11b2o\$11bobo\$12bo7\$3o\$o2bo\$o\$o3bo\$o3bo\$o\$bobo!`
Attachments
dirty_xwss.rle.gz
chris_c

Posts: 892
Joined: June 28th, 2014, 7:15 am

### Re: (27,1)c/72 caterpillar challenge

A few excellent options in there, thanks for running that search.

Playing around a bit manually, I actually got one to work! It relies on a unit cell consisting of a vertical beehive and the same 3 SL constellation above and below, above having a 2fd offset. The beehive is the correct color with respect to the LWSS so it can be kept from the earlier pattern. The trick is that the 3SL constellation is shifted relative to the actual LWSS seed - the seed itself is two from the constellation "below" and one from the "above". In this way, the no-fire option (including the hive) cleans up all the debris. There is a spark from the MWSS involved as well, so this is pretty much blind luck working wonders.

The trigger glider is the wrong phase, but I was planning to have it activated using a splitter anyway, since we want to use a NW rake output to give us another target for the MWSS construction. My earlier excitement is back in business

`x = 133, y = 195, rule = LifeHistory49.2A\$49.2A3\$50.2A\$49.A2.A\$49.A2.A\$50.2A7\$51.2A\$51.2A10\$46.2A\$46.2A3\$47.2A\$46.A2.A\$46.A2.A\$47.2A3\$42.A\$41.A.A\$41.A.A\$42.A5\$52.2A\$52.2A10\$47.2A\$47.2A3\$48.2A\$47.A2.A\$47.A2.A\$48.2A2\$19D17.19D\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D12.2A3.D\$D17.D17.D12.2A3.D\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D17.D\$D2.2A13.D17.D7.2A8.D\$D2.2A13.D17.D7.2A8.D\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D8.2A7.D75.3A\$D17.D17.D7.A2.A6.D75.A\$D17.D17.D7.A2.A6.D76.A\$D17.D17.D8.2A7.D\$D17.D17.D17.D\$D17.D9.D7.D17.D\$D3.A13.D10.D6.D3.A13.D\$D2.A.A12.D11.D5.D2.A.A12.D\$D2.A.A12.D4.9D4.D2.A.A12.D\$D3.A13.D11.D5.D3.A13.D56.3A\$D17.D10.D6.D17.D56.A\$D17.D9.D7.D17.D57.A\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D13.2A2.D\$D17.D17.D13.2A2.D\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D17.D37.3A\$D17.D17.D17.D37.A\$D17.D17.D17.D38.A\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D17.D\$D17.D17.D17.D\$D3.2A12.D17.D8.2A7.D\$D3.2A12.D17.D8.2A7.D\$D17.D17.D17.D18.3A\$D17.D17.D17.D18.A\$D17.D17.D9.2A6.D19.A\$D17.D17.D8.A2.A5.D\$D17.D17.D8.A2.A5.D\$D17.D17.D9.2A6.D\$D17.D17.D17.D\$19D17.19D2\$54.3A\$54.A\$55.A\$47.2A\$47.2A4\$30.3A\$30.A2.A\$30.A\$30.A\$31.A.A4\$29.A\$28.3A\$28.A.2A\$29.3A\$29.3A\$29.2A13\$31.A\$30.3A\$30.A.2A\$31.3A\$31.3A\$31.2A13\$33.A\$32.3A\$32.A.2A\$33.3A\$33.3A\$33.2A13\$35.A\$34.3A\$34.A.2A\$35.3A\$35.3A\$35.2A!`

Edit: There are a number of working hive placements with the right parity. The spare block included in the "below" constellation makes cleanup easy. This is a wonderfully convenient inserter. I'll look next for an MWSS that can be triggered directly by the rakes, remembering our starting target for the MWSS is just a glider collision alternatingly offset 2fd. It doesn't have to be clean.
`x = 277, y = 195, rule = LifeHistory49.2A142.2A\$49.2A142.2A3\$50.2A142.2A\$49.A2.A140.A2.A\$49.A2.A140.A2.A\$50.2A142.2A7\$51.2A142.2A\$51.2A142.2A10\$46.2A142.2A\$46.2A142.2A3\$47.2A137.A4.2A\$46.A2.A135.A.A2.A2.A\$42.A3.A2.A135.A.A2.A2.A\$41.A.A3.2A137.A4.2A\$41.A.A\$42.A9\$52.2A142.2A\$52.2A142.2A10\$47.2A142.2A\$47.2A142.2A3\$48.2A142.2A\$47.A2.A140.A2.A\$47.A2.A140.A2.A\$48.2A142.2A2\$19D17.19D89.19D17.19D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D12.2A3.D89.D17.D17.D12.2A3.D\$D17.D17.D12.2A3.D89.D17.D17.D12.2A3.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D89.D2.2A13.D17.D17.D\$D17.D17.D17.D89.D2.2A13.D17.D17.D\$D2.2A13.D17.D17.D89.D17.D17.D17.D\$D2.2A13.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D7.2A8.D89.D17.D17.D7.2A8.D\$D17.D17.D7.2A8.D89.D17.D17.D7.2A8.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D8.2A7.D75.3A11.D3.A13.D17.D3.A4.2A7.D75.3A\$D17.D17.D7.A2.A6.D75.A13.D2.A.A12.D17.D2.A.A2.A2.A6.D75.A\$D3.A13.D17.D3.A3.A2.A6.D76.A12.D2.A.A12.D17.D2.A.A2.A2.A6.D76.A\$D2.A.A12.D17.D2.A.A3.2A7.D89.D3.A13.D17.D3.A4.2A7.D\$D2.A.A12.D17.D2.A.A12.D89.D17.D17.D17.D\$D3.A13.D9.D7.D3.A13.D89.D17.D9.D7.D17.D\$D17.D10.D6.D17.D89.D17.D10.D6.D17.D\$D17.D11.D5.D17.D89.D17.D11.D5.D17.D\$D17.D4.9D4.D17.D89.D17.D4.9D4.D17.D\$D17.D11.D5.D17.D56.3A30.D17.D11.D5.D17.D56.3A\$D17.D10.D6.D17.D56.A32.D17.D10.D6.D17.D56.A\$D17.D9.D7.D17.D57.A31.D17.D9.D7.D17.D57.A\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D13.2A2.D89.D17.D17.D13.2A2.D\$D17.D17.D13.2A2.D89.D17.D17.D13.2A2.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D37.3A49.D17.D17.D17.D37.3A\$D17.D17.D17.D37.A51.D3.2A12.D17.D17.D37.A\$D17.D17.D17.D38.A50.D3.2A12.D17.D17.D38.A\$D3.2A12.D17.D17.D89.D17.D17.D17.D\$D3.2A12.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D17.D89.D17.D17.D17.D\$D17.D17.D8.2A7.D89.D17.D17.D8.2A7.D\$D17.D17.D8.2A7.D89.D17.D17.D8.2A7.D\$D17.D17.D17.D18.3A68.D17.D17.D17.D18.3A\$D17.D17.D17.D18.A70.D17.D17.D17.D18.A\$D17.D17.D9.2A6.D19.A69.D17.D17.D9.2A6.D19.A\$D17.D17.D8.A2.A5.D89.D17.D17.D8.A2.A5.D\$D17.D17.D8.A2.A5.D89.D17.D17.D8.A2.A5.D\$D17.D17.D9.2A6.D89.D17.D17.D9.2A6.D\$D17.D17.D17.D89.D17.D17.D17.D\$19D17.19D89.19D17.19D2\$54.3A141.3A\$54.A143.A\$55.A143.A\$47.2A142.2A\$47.2A142.2A4\$30.3A141.3A\$30.A2.A140.A2.A\$30.A143.A\$30.A143.A\$31.A.A141.A.A4\$29.A143.A\$28.3A141.3A\$28.A.2A140.A.2A\$29.3A141.3A\$29.3A141.3A\$29.2A142.2A13\$31.A143.A\$30.3A141.3A\$30.A.2A140.A.2A\$31.3A141.3A\$31.3A141.3A\$31.2A142.2A13\$33.A143.A\$32.3A141.3A\$32.A.2A140.A.2A\$33.3A141.3A\$33.3A141.3A\$33.2A142.2A13\$35.A143.A\$34.3A141.3A\$34.A.2A140.A.2A\$35.3A141.3A\$35.3A141.3A\$35.2A142.2A!`
Physics: sophistication from simplicity.

biggiemac

Posts: 504
Joined: September 17th, 2014, 12:21 am
Location: California, USA

### Re: (27,1)c/72 caterpillar challenge

biggiemac wrote:Playing around a bit manually, I actually got one to work!

Great! The fact that the block when offset by (3, -25) provides a cleanup for the beehive is a fantastic coincidence.

biggiemac wrote:I'll look next for an MWSS that can be triggered directly by the rakes, remembering our starting target for the MWSS is just a glider collision alternatingly offset 2fd. It doesn't have to be clean.

There is a clean MWSS in the attached file and it has a few options for cleanup in the offset case:

`x = 261, y = 62, rule = B3/S2341bo71bo69bo\$41bobo69bobo67bobo72bo\$41b2o70b2o68b2o73bobo\$258b2o13\$84b2o\$83bo2bo69b2o\$12b2o69bobo69bo2bo\$12b2o70bo70bobo\$156bo3\$14b2o70b2o68b2o\$13bo2bo68bo2bo66bo2bo72b2o\$13bobo6b2o61bobo6b2o59bobo6b2o64bo2bo\$14bo6bo2bo61bo6bo2bo59bo6bo2bo63bobo6b2o\$21bobo69bobo67bobo65bo6bo2bo\$22bo71bo69bo73bobo\$239bo\$14b2o70b2o68b2o\$13bo2bo68bo2bo66bo2bo72b2o\$14b2o70b2o68b2o72bo2bo7bo\$231b2o8bo\$241bo9\$20bo71bo69bo\$20bobo69bobo67bobo72bo\$20b2o70b2o68b2o73bobo\$237b2o2\$11b2o70b2o68b2o\$10bo2bo68bo2bo66bo2bo72b2o\$10bobo6b2o61bobo6b2o59bobo6b2o64bo2bo\$11bo6bo2bo61bo6bo2bo59bo6bo2bo63bobo6b2o\$18bobo69bobo67bobo65bo6bo2bo\$19bo71bo69bo73bobo\$236bo\$2b3o6b2o61b3o6b2o59b3o6b2o\$bo2bo5bo2bo59bo2bo5bo2bo57bo2bo5bo2bo63b3o6b2o\$4bo6b2o63bo6b2o61bo6b2o63bo2bo5bo2bo\$o3bo67bo3bo65bo3bo74bo6b2o\$4bo71bo69bo70bo3bo\$bobo69bobo67bobo75bo\$218bobo!`

EDIT: And here is a recipe for an x2 block from an x1-but-offset constellation (hopefully the color is correct... no time to check...)

`x = 65, y = 93, rule = B3/S2312bo\$11bobo\$11bobo\$6b2o4bo\$5bo2bo\$5bo2bo\$6b2o19\$9bo\$8bobo\$8bobo\$3b2o4bo\$2bo2bo\$2bo2bo\$3b2o23\$10bo\$9bobo\$9bobo\$4b2o4bo\$3bo2bo\$3bo2bo\$4b2o3\$62b2o\$62bobo\$62bo7\$43b2o\$43bobo\$43bo5\$7bo\$6bobo\$6bobo15b2o\$b2o4bo16bobo\$o2bo20bo\$o2bo\$b2o5\$5b2o\$5bobo\$5bo!`
chris_c

Posts: 892
Joined: June 28th, 2014, 7:15 am

### Re: (27,1)c/72 caterpillar challenge

For the MWSS, since it doesn't have to be clean, I am trying to find ways to trigger it directly using a rake, and have the debris be the next target instead of a NW output. Frustratingly, all of the properly-shaped options I have found so far are the wrong color.
`x = 254, y = 117, rule = B3/S23138b2o\$103bo33bobo\$26bo37b2o36bobo20b2o10b2o\$13bo11bobo23bo11bobo24b2o10bobo20b2o\$12bobo10bobo22bobo10b2o25b2o11bo27b2o\$12bobo11bo23bobo43b2o33bobo\$13bo5b2o30bo5b2o37bobo32bo\$19bobo35bobo36bo\$19bo37bo3\$132b2o\$97b2o33b2o\$20b2o36b2o37b2o\$20b2o36b2o14\$114b3o\$79b3o31bo2bo\$2b3o35b3o35bo2bo34bo\$bo2bo34bo2bo38bo30bo3bo\$4bo37bo34bo3bo34bo\$o3bo33bo3bo38bo31bobo\$4bo37bo35bobo\$bobo35bobo27\$247b2o\$246bo2bo\$239bo6bobo\$171bo66bobo6bo\$171bo66bobo\$27b2o142bo67bo4bo\$21bo4bo2bo213bobo\$21bo5b2o63bo89bo60bo2bo\$21bo70bo88bobo60b2o\$92bo88b2o\$174bo\$173bobo75b2o\$92bo79bo2bo75bobo\$91bobo4bo74b2o76bo\$23b2o66bo2bo3bo\$23bobo66b2o4bo\$24b2o\$174b2o52b3o\$174bobo50bo2bo\$93b2o79bo55bo\$93bobo130bo3bo\$26b2o65bo136bo\$26bobo198bobo\$26bo2\$9b3o\$8bo2bo\$11bo\$7bo3bo\$11bo\$8bobo15\$151b3o\$150bo2bo\$153bo\$149bo3bo\$82b3o68bo\$81bo2bo65bobo\$84bo\$80bo3bo\$84bo\$81bobo!`

Is there a slow-salvo friendly way to make this polyplet? It reacts with just a beehive to give a good MWSS. The file had two different collisions with closely spaced still lives, but I'm wondering if some constellation easier to make with salvo might trigger it using the right color and shape.
`x = 26, y = 27, rule = B3/S2316b2o\$15bo2bo\$16b2o3\$22b2o\$21bo2b2o\$24b2o\$21b4o13\$bo\$3o\$ob2o\$b3o\$b3o\$b2o!`
Physics: sophistication from simplicity.

biggiemac

Posts: 504
Joined: September 17th, 2014, 12:21 am
Location: California, USA

### Re: (27,1)c/72 caterpillar challenge

biggiemac wrote:Is there a slow-salvo friendly way to make this polyplet? It reacts with just a beehive to give a good MWSS.

Here's one. The phase is correct modulo 2 but I haven't checked anything more than that.

`x = 915, y = 905, rule = B3/S23b2o\$o2bo\$b2o\$12b2o\$12b2o101\$109b3o\$109bo\$110bo96\$211b3o\$211bo\$212bo99\$310b3o\$310bo\$311bo95\$413b3o\$413bo\$414bo96\$515b3o\$515bo\$516bo96\$617b3o\$617bo\$618bo104\$711b3o\$711bo\$712bo101\$808b3o\$808bo\$809bo94\$912b3o\$912bo\$913bo!`

Here's the code I used to find it. You will need to set MAX_GLIDERS_NE to something higher to find more but it seems like quite a lot of effort to avoid one glider rephaser.

`import golly as gfrom hashlib import sha256from itertools import chain#arbitrary numbersMAX_GENERATIONS = 400MAX_POPULATION = 30MAX_HEIGHT = 24MAX_GLIDERS_NE = 9MAX_GLIDERS_SE = 0GLIDER_NE = g.parse('3o\$2bo\$bo!')GLIDER_SE = g.parse('bo\$2bo\$3o!')#put any ad-hoc patterns that you want to bombard with slow gliders here.TARGET_PATTERNS = ['2o\$2o!', 'b2o\$b2o!'][    'b2o\$b2o!',    'b2o\$o2bo\$b2o\$5b2o\$5b2o2\$13b2o\$13b2o!',    '2bo\$bobo4b2o\$bobo4b2o\$2bo!',    '2b2o\$bo2bo\$bobo\$2bo!',    '2b3o7\$3o3\$7b2o\$7b2o!',    '2bo\$bobo\$bo2bo\$2b2o2\$10b2o\$5b2o3b2o\$bo3b2o\$obo\$obo\$bo10bo\$11bobo\$11b2o!',    '10bo\$9bobo\$9bo2bo\$10b2o\$bo\$bo\$bo13b2o\$15b2o4\$17bo\$16bobo\$16b2o!',    '8bo\$7bobo\$7bo2bo\$8b2o2\$16b2o\$b2o13b2o\$b2o3\$18bo\$17bobo\$17b2o!',    '2b2o\$2b2o6\$2b2o\$bo2bo\$bobo\$2bo3\$3o!',    '2b2o\$2b2o6\$bo4b2o\$obo3b2o\$b2o!',    '11b2o\$11b2o\$b2o\$o2bo\$o2bo\$b2o21bo\$24bo\$24bo3\$6b2o\$6b2o!',    '11bo\$11bo\$b2o8bo\$o2bo\$b2o\$5b2o19b2o\$5b2o19b2o5\$15b2o\$15b2o!',    '2b2o\$bo2bo\$2b2o4\$35b2o\$35b2o6\$24b3o2\$18bo\$17bobo\$18b2o!',    '2o\$obo\$bo6\$8b2o\$8b2o!',    'b2o\$o2bo\$bobo\$2bo10\$13b2o\$13b2o!',    'o\$o\$o7\$15b2o\$15b2o!',    'b2o\$b2o4\$9b3o8\$13b2o\$13b2o!',    'b2o\$obo\$2o\$9b3o4\$8b2o\$8b2o4\$12b2o\$12b2o!',    '6b3o8\$7b2o\$7b2o3\$3b2o\$2bo2bo\$3b2o2\$o\$o\$o!'    ]TARGET_PATTERNS = [('blob%d' % i, patt) for i, patt in enumerate(TARGET_PATTERNS)]wanted = ["2b2o3b2o\$bobo2bo2bo\$bo5b2o\$2o!",          "2b2o\$2b2o3\$bo\$obo\$o2bo\$b2o!"]wanted_color = ["2b3o2\$o5bo\$o5bo\$o5bo2\$2b3o8\$2b3o!",                "\$3b3o13\$2b3o2\$o5bo\$o5bo\$o5bo2\$2b3o!"]wanted = [g.parse(x) for x in wanted]wanted_color = [g.parse(x) for x in wanted_color]# test if sub_cells appears in cells_set (optionally with same color)def find_wanted(cells_set, sub_cells, color=False):    x0, y0 = sub_cells[0], sub_cells[1]    for x, y in cells_set:        dx, dy = x - x0, y - y0        if color and ((dx ^ dy) & 1):            continue        if all((sub_cells[j] + dx, sub_cells[j+1] + dy) in cells_set for j in range(0, len(sub_cells), 2)):            return True    return False   TARGETS = []for name, pattern in TARGET_PATTERNS:  cells = g.parse(pattern)  p = len(cells) / 2  TARGETS.append((name, cells, p))def patterns_identical(cells1, cells2):  if len(cells1) != len(cells2):    return False  if sum(cells1) != sum(cells2):    return False  return sorted(zip(cells1[::2], cells1[1::2])) == sorted(zip(cells2[::2], cells2[1::2]))def is_p2(cells):  return patterns_identical(cells, g.evolve(cells, 2))def get_shooting_range(cells):  min_d1 = max_d1 = cells[0] + cells[1]  min_d2 = max_d2 = cells[0] - cells[1]  for i in range(2, len(cells), 2):    min_d1 = min(min_d1, cells[i] + cells[i+1])    max_d1 = max(max_d1, cells[i] + cells[i+1])    min_d2 = min(min_d2, cells[i] - cells[i+1])    max_d2 = max(max_d2, cells[i] - cells[i+1])   min_lane_ne = min_d1 - 6  max_lane_ne = max_d1 + 3  shift_ne = 3 - min_d2 // 2  min_lane_se = min_d2 - 4  max_lane_se = max_d2 + 5  shift_se = 4 - min_d1 // 2  shift_se += (shift_se - shift_ne) % 2  return min_lane_ne, max_lane_ne, shift_ne, min_lane_se, max_lane_se, shift_sedef get_pattern_to_try(cells, lane, offset=50):    y = lane // 2 + offset    return cells + g.transform(GLIDER_NE, lane - y, y)def add_glider_se(cells, lane, offset=50):    y = lane // 2 + offset    return cells + g.transform(GLIDER_SE, lane - y, -y)offset = 0def display_solution(start, lanes, debug, last_cells):  global offset  cells = [c for n, c, _ in TARGETS if n == start][0]  i = 100  for lane in lanes:    try:        lane_ne, lane_se, delay = lane        if lane_ne is not None:            cells = get_pattern_to_try(cells, lane_ne, i)        cells = add_glider_se(cells, lane_se, i + delay)    except:        cells = get_pattern_to_try(cells, lane, i)    i += 100  g.putcells(cells, 0, offset)  for i, p in enumerate(debug):    g.putcells(p, 100 + 100 * i, offset)  g.putcells(last_cells, 100 + 100 * len(debug), offset)  g.select(g.getrect())  g.copy()  g.select([])  g.update()  offset += 800  g.update()randoms = []for i in range(4096):  randoms.append(int(sha256(str(i)).hexdigest()[:16], 16))def to_hashable(cells):  if not cells:    return 0  minx = min(cells[::2])  miny = min(cells[1::2])  minx -= (minx & miny) & 1   hash = 0  for i in range(0, len(cells), 2):    hash ^= randoms[64 * ((cells[i]-minx) & 63) + ((cells[i+1]-miny) & 63)]  return hashdef try_it(start_cells, lanes, debug):    global seen    new_cells = g.evolve(start_cells, MAX_GENERATIONS)    if len(new_cells) == 2 * 33:        right = max(new_cells[::2])        top = min(new_cells[1::2])                l = t = 999        r = b = -999                for i in range(0, len(new_cells), 2):            x, y = new_cells[i], new_cells[i+1]            if x <= right - 3 or y >= top + 3:                l = min(x, l)                r = max(x, r)                t = min(y, t)                b = max(y, b)        if r-l == 30 and b-t == 28:            display_solution(start, lanes, debug, new_cells)       if not new_cells or len(new_cells) > 2 * MAX_POPULATION:        return None       if max(new_cells[1::2]) - min(new_cells[1::2]) >= MAX_HEIGHT:        return None       if not is_p2(new_cells):        return None       new_hashable = to_hashable(new_cells)              if new_hashable in seen:        return None       seen.add(new_hashable)       cells_set = set(zip(new_cells[::2], new_cells[1::2]))   #    if any(find_wanted(cells_set, w, False) for w in wanted):#        display_solution(start, lanes, debug, new_cells)       #    if any(find_wanted(cells_set, w, True) for w in wanted_color):#        display_solution(start, lanes, debug, new_cells)    return new_cellsg.new('')for i, (_,p) in enumerate(TARGET_PATTERNS):    g.putcells(g.parse(p), 100*i, -800)new_queue = []for name, cells, _ in TARGETS:  new_queue.append( (name, [], cells, [], MAX_GLIDERS_NE, MAX_GLIDERS_SE) )seen = set()loop = 0while new_queue:  queue = new_queue  new_queue = []   loop += 1  count = 0  for start, lanes, last, debug, num_ne, num_se in queue:     g.show(str((loop,count,len(queue))))    count += 1    tup = get_shooting_range(last)    min_lane_ne, max_lane_ne, shift_ne = tup[:3]    min_lane_se, max_lane_se, shift_se = tup[-3:]       if num_se > 0:                   se_end = min(min_lane_se + 27, max_lane_se)               for lane_se in range(se_end-27, se_end+1):            if lane_se % 2:                continue                       start_cells = add_glider_se(last, lane_se, shift_se)                           new_lanes = lanes + [(None, lane_se, 0)]            new_debug = debug + [start_cells]                       new_cells = try_it(start_cells, new_lanes, new_debug)                       if new_cells is not None and (num_se > 1 or num_ne > 0):                new_queue.append( (start, new_lanes, new_cells, new_debug, num_ne, num_se-1) )    if num_ne == 0:        continue    ne_end = min(min_lane_ne + 25, max_lane_ne)    for lane in range(ne_end-25, ne_end+1):        # monochromatic        if lane % 2:            continue               start_cells = get_pattern_to_try(last, lane, shift_ne)        new_lanes = lanes + [lane]        new_debug = debug + [start_cells]           new_cells = try_it(start_cells, new_lanes, new_debug)        if new_cells is not None and (num_ne > 1 or num_se > 0):          new_queue.append( (start, new_lanes, new_cells, new_debug, num_ne-1, num_se) )        if num_se > 0:                       se_end = min(min_lane_se + 27, max_lane_se)                       for lane_se in range(se_end-27, se_end+1):                if lane_se % 2:                    continue                for delay in range(-6, 7, 2):                    start_cells = get_pattern_to_try(last, lane, shift_ne + max(delay, 0))                    start_cells = add_glider_se(start_cells, lane_se, shift_se - min(delay, 0))                    new_lanes = lanes + [(lane, lane_se, shift_se - shift_ne - delay)]                    new_debug = debug + [start_cells]                    new_cells = try_it(start_cells, new_lanes, new_debug)                    if new_cells is not None and (num_se > 1 or num_ne > 1):                        new_queue.append( (start, new_lanes, new_cells, new_debug, num_ne-1, num_se-1) )`

Down the line I think we will need a way to transition from an x1-but-offset trail to a plain x1 trail. For this task 4SL is an upper bound:

`x = 149, y = 154, rule = LifeHistoryD16.2A\$.D14.A2.A\$2.D14.A.A\$3.D14.A\$4.D\$5.D\$6.D\$7.D7.A\$8.D6.A\$9.D5.A\$10.D\$11.D\$12.D\$13.D\$14.D\$15.D\$16.D\$17.D\$18.D\$19.D\$20.D\$21.D6.A\$22.D5.A\$23.D4.A\$24.D\$14.2A4.2A3.D\$13.A2.A3.2A4.D\$14.A.A10.D\$D14.A12.D\$.D27.D\$2.D27.D\$3.D27.D\$4.D7.A19.D\$5.D6.A\$6.D5.A\$7.D\$8.D\$9.D\$10.D\$11.D\$12.D\$13.D\$14.D\$15.D\$16.D\$17.D\$18.D6.A\$19.D5.A\$20.D4.A\$21.D\$22.D\$23.D\$24.D\$25.D\$15.2A4.2A3.D\$14.A2.A3.2A4.D\$D14.A.A10.D\$.D14.A12.D\$2.D27.D\$3.D27.D\$4.D27.D\$5.D7.A\$6.D6.A\$7.D5.A\$8.D\$9.D\$10.D\$11.D\$12.D\$13.D\$14.D\$15.D\$16.D\$17.D\$18.D\$19.D6.A\$20.D5.A\$21.D4.A\$22.D\$12.2A4.2A3.D\$11.A2.A3.2A4.D\$12.A.A10.D\$13.A12.D\$27.D\$D27.D\$.D27.D\$2.D7.A19.D\$3.D6.A20.D\$4.D5.A21.D\$5.D\$6.D\$7.D\$8.D\$9.D\$10.D\$11.D\$12.D\$13.D\$14.D\$15.D\$16.D6.A\$17.D5.A\$18.D4.A\$19.D\$20.D81.2A\$21.D80.A.A\$22.D79.A\$23.D\$19.2A3.D\$19.2A4.D\$26.D\$27.D\$28.D\$29.D53.2A\$30.D52.A.A\$31.D51.A\$32.D6\$64.2A\$64.A.A\$64.A81.2A\$146.A.A\$146.A5\$45.2A\$45.A.A\$45.A81.2A\$127.A.A\$127.A7\$108.2A\$108.A.A\$108.A7\$89.2A\$89.A.A\$89.A!`
chris_c

Posts: 892
Joined: June 28th, 2014, 7:15 am

### Re: (27,1)c/72 caterpillar challenge

After a while of trying to break up the search I was able to get this working. Here's a total of 29 rakes (counting the one that produces the x2 NE rake) leading to the LWSS inserter constellation with a couple blocks left to turn into the splitter.
`x = 2672, y = 2620, rule = B3/S2397b3o\$97bo\$98bo7\$78b3o\$78bo\$2o77bo\$b2o\$o5\$59b3o\$59bo\$60bo7\$40b3o\$40bo\$34b2o5bo\$35b2o\$34bo41\$153b3o\$153bo\$154bo7\$134b3o\$134bo\$135bo7\$115b3o\$115bo\$116bo7\$96b3o\$96bo\$97bo43\$213b3o\$213bo\$214bo7\$194b3o\$194bo\$195bo7\$175b3o\$175bo\$176bo7\$156b3o\$156bo\$157bo39\$293b3o\$293bo\$294bo7\$274b3o\$274bo\$275bo7\$255b3o\$255bo\$256bo7\$236b3o\$236bo\$237bo71\$393b3o\$393bo\$394bo7\$374b3o\$374bo\$375bo7\$355b3o\$355bo\$356bo7\$336b3o\$336bo\$337bo73\$491b3o\$491bo\$492bo7\$472b3o\$472bo\$473bo7\$453b3o\$453bo\$454bo7\$434b3o\$434bo\$435bo74\$588b3o\$588bo\$589bo7\$569b3o\$569bo\$570bo7\$550b3o\$550bo\$551bo7\$531b3o\$531bo\$532bo70\$689b3o\$689bo\$690bo7\$670b3o\$670bo\$671bo7\$651b3o\$651bo\$652bo7\$632b3o\$632bo\$633bo71\$789b3o\$789bo\$790bo7\$770b3o\$770bo\$771bo7\$751b3o\$751bo\$752bo7\$732b3o\$732bo\$733bo66\$894b3o\$894bo\$895bo7\$875b3o\$875bo\$876bo7\$856b3o\$856bo\$857bo7\$837b3o\$837bo\$838bo72\$993b3o\$993bo\$994bo7\$974b3o\$974bo\$975bo7\$955b3o\$955bo\$956bo7\$936b3o\$936bo\$937bo68\$1096b3o\$1096bo\$1097bo7\$1077b3o\$1077bo\$1078bo7\$1058b3o\$1058bo\$1059bo7\$1039b3o\$1039bo\$1040bo72\$1195b3o\$1195bo\$1196bo7\$1176b3o\$1176bo\$1177bo7\$1157b3o\$1157bo\$1158bo7\$1138b3o\$1138bo\$1139bo68\$1298b3o\$1298bo\$1299bo7\$1279b3o\$1279bo\$1280bo7\$1260b3o\$1260bo\$1261bo7\$1241b3o\$1241bo\$1242bo70\$1399b3o\$1399bo\$1400bo7\$1380b3o\$1380bo\$1381bo7\$1361b3o\$1361bo\$1362bo7\$1342b3o\$1342bo\$1343bo70\$1498b3o\$1498bo\$1499bo7\$1479b3o\$1479bo\$1480bo7\$1460b3o\$1460bo\$1461bo7\$1441b3o\$1441bo\$1442bo76\$1593b3o\$1593bo\$1594bo7\$1574b3o\$1574bo\$1575bo7\$1555b3o\$1555bo\$1556bo7\$1536b3o\$1536bo\$1537bo72\$1692b3o\$1692bo\$1693bo7\$1673b3o\$1673bo\$1674bo7\$1654b3o\$1654bo\$1655bo7\$1635b3o\$1635bo\$1636bo71\$1792b3o\$1792bo\$1793bo7\$1773b3o\$1773bo\$1774bo7\$1754b3o\$1754bo\$1755bo7\$1735b3o\$1735bo\$1736bo73\$1890b3o\$1890bo\$1891bo7\$1871b3o\$1871bo\$1872bo7\$1852b3o\$1852bo\$1853bo7\$1833b3o\$1833bo\$1834bo65\$1996b3o\$1996bo\$1997bo7\$1977b3o\$1977bo\$1978bo7\$1958b3o\$1958bo\$1959bo7\$1939b3o\$1939bo\$1940bo72\$2095b3o\$2095bo\$2096bo7\$2076b3o\$2076bo\$2077bo7\$2057b3o\$2057bo\$2058bo7\$2038b3o\$2038bo\$2039bo69\$2197b3o\$2197bo\$2198bo7\$2178b3o\$2178bo\$2179bo7\$2159b3o\$2159bo\$2160bo7\$2140b3o\$2140bo\$2141bo69\$2299b3o\$2299bo\$2300bo7\$2280b3o\$2280bo\$2281bo7\$2261b3o\$2261bo\$2262bo7\$2242b3o\$2242bo\$2243bo71\$2399b3o\$2399bo\$2400bo7\$2380b3o\$2380bo\$2381bo7\$2361b3o\$2361bo\$2362bo7\$2342b3o\$2342bo\$2343bo64\$2506b3o\$2506bo\$2507bo7\$2487b3o\$2487bo\$2488bo7\$2468b3o\$2468bo\$2469bo7\$2449b3o\$2449bo\$2450bo66\$2591b3o\$2591bo\$2592bo7\$2572b3o\$2572bo\$2573bo7\$2553b3o\$2553bo\$2554bo7\$2534b3o\$2534bo\$2535bo69\$2669b3o\$2669bo\$2670bo7\$2650b3o\$2650bo\$2651bo7\$2631b3o\$2631bo\$2632bo7\$2612b3o\$2612bo\$2613bo!`

Edit: I bet it's a half dozen or more from optimal, but I don't know particularly how to trim it down. Here was my approach:
Beginning from the hive and the block above it, I searched for salvos to depth 14 (but aborted at the end of depth 13 when RAM ran out) that produced the block pair above the pond in a location compatible with the hive. I actually was looking for any pair of target SLs, but the block pair was the one that showed up. I scanned through the final constellations for any which had all their debris on the correct side. The most promising one ended in a lower block pull, which still works if the pond is there, so to give more room I gave the second search the pre-block-pull constellation. At depth 11 some pond placers turned up, and this one was compatible with the block pull after deleting one leftover block.

Both scripts were shamelessly modified from chris_c's for this specific application. First script:
`import golly as gfrom hashlib import sha256from itertools import chain#arbitrary numbersMAX_GENERATIONS = 250MAX_POPULATION = 50MAX_HEIGHT = 27MAX_LANES = 26MAX_GLIDERS = 14#NE gliderGLIDER = g.parse('3o\$2bo\$bo!')# We'll begin with a hive and a block.  We need to reach a 3-SL constellation# from the block without ever killing the hive.  The 3-SL constellation must# be in one of a select few locations.  I will give one in "SAFE_*", and the# others can be reached by translating by any of the amounts given in "OFFSETS"START_HIVE = [(27,29),(28,28),(26,28),(28,27),(26,27),(27,26)]START_BLOCK = [(27,16),(28,16),(27,17),(28,17)]OFFSETS = [(0,0),(0,4),(0,6),(1,1),(2,0)]SAFE_BLOCKh = [(17,5),(18,5),(17,6),(18,6)]SAFE_BLOCKl = [(22,17),(22,16),(23,17),(23,16)]SAFE_POND = [(20,21),(20,22),(21,20),(21,23),(22,20),(22,23)]PAIRS = [SAFE_BLOCKh+SAFE_BLOCKl, SAFE_BLOCKh+SAFE_POND, SAFE_BLOCKl+SAFE_POND]PAIRS_OFFSET = [[(x0 + dx, y0 + dy) for x0, y0 in pair] for pair in PAIRS for dx, dy in OFFSETS]KEEPERS = []#put any ad-hoc patterns that you want to bombard with slow gliders here.#TARGET_PATTERNS = ['8\$9bo\$9bo7b2o\$9bo7b2o2\$20bo6b2o\$19bobo7bo\$18bo2bo4bo\$19b2o6b2o4\$16bo\$16bo\$16bo4\$7b3o\$27bo\$26bobo\$26bobo\$27bo!',#'11\$17b2o\$17b2o6\$23b2o3bo\$23b2o2bobo\$27bobo\$28bo2\$16bo5bo\$15bobo3bobo\$15bobo3bobo\$16bo5bo4bo\$26bobo\$18b3o5bobo\$27bo!',#'11\$17b2o\$17b2o10\$24bo\$23bobo\$23bobo\$24bo\$27bo\$26bobo\$26bobo\$27bo!','9\$17b2o\$17b2o11\$10b2o\$10b2o4\$27bo\$26bobo\$26bobo\$27bo!',#'11\$17b2o\$17b2o9\$21b3o5\$27bo\$26bobo\$20b2o4bobo\$20b2o5bo!']#TARGET_PATTERNS = [('blob%d' % i, patt) for i, patt in enumerate(TARGET_PATTERNS)]#wanted = ['2o\$2o10\$5b2o\$5b2o3\$4b2o\$3bo2bo\$3bo2bo\$4b2o3\$10bo\$9bobo\$9bobo\$10bo!',#'2o\$2o10\$5b2o\$5b2o3\$4b2o\$3bo2bo\$3bo2bo3bo\$4b2o3bobo\$9bobo\$10bo!'#'2o\$2o10\$5b2o\$5b2o3\$4b2o4bo\$3bo2bo2bobo\$3bo2bo2bobo\$4b2o4bo!']#wanted_color = ['']#wanted = [g.parse(x) for x in wanted]#wanted_color = [g.parse(x) for x in wanted_color]# test if SAFE_* appears in cells_setdef find_wanted(cells_set):  # Try to get 2 at once  return any(all(j in cells_set for j in pair) for pair in PAIRS_OFFSET)  def to_pairs(cell_list):  return zip(cell_list[::2], cell_list[1::2])def from_pairs(cell_set):  return list(sum(cell_set, ()))# Return an empty cell list if the argument isn't p2 / p2 plus deletable gliders# or if the height or population exceeds the specified values.  Nonempty cell# lists continue on to the search tree.KEEP_GLIDERS = Falsedef kosherify(cell_list):  if KEEP_GLIDERS:    cellset = set(to_pairs(cell_list))    cellset8 = set(to_pairs(g.evolve(cell_list, 8)))    # Not going to be correct in every case but pretty effective    maybe_gliders = [a for a in cellset8 if a not in cellset]    if len(maybe_gliders) % 5: # Not a multiple of 5      return []    # Do more processing to verify the excluded are gliders, if you want.    rest = [b for b in cellset8 if b not in maybe_gliders]  else:    rest = set(to_pairs(cell_list))  if not all(j in rest for j in START_HIVE):    return[]#  if not any(all(j in rest for j in KEEPERS + k) for k in OFFSETS):#    return []  if len(rest) < 6 or len(rest) > MAX_POPULATION:    return []  rest = from_pairs(rest)  if max(rest[1::2]) - min(rest[1::2]) >= MAX_HEIGHT or not is_p2(rest):    return []  return rest    TARGETS = [('hive+block', from_pairs(START_HIVE + START_BLOCK))]def patterns_identical(cells1, cells2):  if len(cells1) != len(cells2):    return False  if sum(cells1) != sum(cells2):    return False  return sorted(to_pairs(cells1)) == sorted(to_pairs(cells2))def is_p2(cells):  return patterns_identical(cells, g.evolve(cells, 2))def get_shooting_range(cells):  min_d1 = max_d1 = cells[0] + cells[1]  min_d2 = cells[0] - cells[1]  for i in range(2, len(cells), 2):    min_d1 = min(min_d1, cells[i] + cells[i+1])    max_d1 = max(max_d1, cells[i] + cells[i+1])    min_d2 = min(min_d2, cells[i] - cells[i+1])    min_lane = min_d1 - 6  max_lane = max_d1 + 3  shift = 6 - min_d2 // 2  return min_lane, max_lane, shiftdef get_pattern_to_try(cells, lane, offset=50):    y = lane // 2 + offset    return cells + g.transform(GLIDER, lane - y, y)offset = 0def display_solution(start, lanes, debug, last_cells):  global offset  cells = [c for n, c in TARGETS if n == start][0]  i = 100  for lane in lanes:    cells = get_pattern_to_try(cells, lane, i)    i += 100  g.putcells(cells, 0, offset)  for i, p in enumerate(debug):    g.putcells(p, 100 + 100 * i, offset)  g.putcells(last_cells, 100 + 100 * len(debug), offset)  g.select(g.getrect())  g.copy()  g.select([])#  g.fit()  g.update()  g.show(' '.join(chain([str(start), str(len(lanes))], [str(lane) for lane in lanes])))  offset += 400  g.update()randoms = []for i in range(4096):  randoms.append(int(sha256(str(i)).hexdigest()[:16], 16))def to_hashable(cells):  if not cells:    return 0  minx = min(cells[::2])  miny = min(cells[1::2])    hash = 0  for i in range(0, len(cells), 2):    hash ^= randoms[64 * (cells[i] & 63) + (cells[i+1] & 63)]  return hashg.new('')new_queue = []for name, cells in TARGETS:  new_queue.append( (name, [], cells, []) )seen = set()for n in range(MAX_GLIDERS):  queue = new_queue  new_queue = []    count = 0  for start, lanes, last, debug in queue:      g.show(str((n+1,count,len(queue))))    count += 1    min_lane, max_lane, shift = get_shooting_range(last)    for lane in range(min_lane, min(min_lane + MAX_LANES, max_lane + 1)):        # monochromatic        if not lane % 2:            continue                start_cells = get_pattern_to_try(last, lane, shift)        new_cells = kosherify(g.evolve(start_cells, MAX_GENERATIONS))        if not new_cells:          continue        new_hashable = to_hashable(new_cells)                if new_hashable in seen:          continue        seen.add(new_hashable)                new_lanes = lanes + [lane]        new_debug = debug + [start_cells]        cells_set = set(to_pairs(new_cells))        if find_wanted(cells_set):            display_solution(start, new_lanes, new_debug, new_cells)        if n + 1 < MAX_GLIDERS:          new_queue.append( (start, new_lanes, new_cells, new_debug) )`

Second:
`import golly as gfrom hashlib import sha256from itertools import chain#arbitrary numbersMAX_GENERATIONS = 250MAX_POPULATION = 50MAX_HEIGHT = 27MAX_LANES = 26MAX_GLIDERS = 11#NE gliderGLIDER = g.parse('3o\$2bo\$bo!')START_KEEPERS = [(27,29),(28,28),(26,28),(28,27),(26,27),(27,26),(24,21),(25,21),(24,22),(25,22),(17,11),(18,11),(17,12),(18,12)]START_TARGET = [(-2,24),(-1,23),(-1,25),(0,23),(0,25),(1,24),(3,26),(4,26),(3,27),(4,27),(4,21),(4,22),(5,21),(5,22)]GOAL_POND = [(20,27),(20,28),(21,26),(21,29),(22,26),(22,29)]#put any ad-hoc patterns that you want to bombard with slow gliders here.#TARGET_PATTERNS = ['8\$9bo\$9bo7b2o\$9bo7b2o2\$20bo6b2o\$19bobo7bo\$18bo2bo4bo\$19b2o6b2o4\$16bo\$16bo\$16bo4\$7b3o\$27bo\$26bobo\$26bobo\$27bo!',#'11\$17b2o\$17b2o6\$23b2o3bo\$23b2o2bobo\$27bobo\$28bo2\$16bo5bo\$15bobo3bobo\$15bobo3bobo\$16bo5bo4bo\$26bobo\$18b3o5bobo\$27bo!',#'11\$17b2o\$17b2o10\$24bo\$23bobo\$23bobo\$24bo\$27bo\$26bobo\$26bobo\$27bo!','9\$17b2o\$17b2o11\$10b2o\$10b2o4\$27bo\$26bobo\$26bobo\$27bo!',#'11\$17b2o\$17b2o9\$21b3o5\$27bo\$26bobo\$20b2o4bobo\$20b2o5bo!']#TARGET_PATTERNS = [('blob%d' % i, patt) for i, patt in enumerate(TARGET_PATTERNS)]#wanted = ['2o\$2o10\$5b2o\$5b2o3\$4b2o\$3bo2bo\$3bo2bo\$4b2o3\$10bo\$9bobo\$9bobo\$10bo!',#'2o\$2o10\$5b2o\$5b2o3\$4b2o\$3bo2bo\$3bo2bo3bo\$4b2o3bobo\$9bobo\$10bo!'#'2o\$2o10\$5b2o\$5b2o3\$4b2o4bo\$3bo2bo2bobo\$3bo2bo2bobo\$4b2o4bo!']#wanted_color = ['']#wanted = [g.parse(x) for x in wanted]#wanted_color = [g.parse(x) for x in wanted_color]def find_wanted(cells_set):  return all(j in cells_set for j in GOAL_POND)  def to_pairs(cell_list):  return zip(cell_list[::2], cell_list[1::2])def from_pairs(cell_set):  return list(sum(cell_set, ()))# Return an empty cell list if the argument isn't p2 / p2 plus deletable gliders# or if the height or population exceeds the specified values.  Nonempty cell# lists continue on to the search tree.KEEP_GLIDERS = Falsedef kosherify(cell_list):  if KEEP_GLIDERS:    cellset = set(to_pairs(cell_list))    cellset8 = set(to_pairs(g.evolve(cell_list, 8)))    # Not going to be correct in every case but pretty effective    maybe_gliders = [a for a in cellset8 if a not in cellset]    if len(maybe_gliders) % 5: # Not a multiple of 5      return []    # Do more processing to verify the excluded are gliders, if you want.    rest = [b for b in cellset8 if b not in maybe_gliders]  else:    rest = set(to_pairs(cell_list))  if not all(j in rest for j in START_KEEPERS):    return[]#  if not any(all(j in rest for j in KEEPERS + k) for k in OFFSETS):#    return []  if len(rest) < 6 or len(rest) > MAX_POPULATION:    return []  rest = from_pairs(rest)  if max(rest[1::2]) - min(rest[1::2]) >= MAX_HEIGHT or not is_p2(rest):    return []  return rest    TARGETS = [('thingy', from_pairs(START_KEEPERS + START_TARGET))]def patterns_identical(cells1, cells2):  if len(cells1) != len(cells2):    return False  if sum(cells1) != sum(cells2):    return False  return sorted(to_pairs(cells1)) == sorted(to_pairs(cells2))def is_p2(cells):  return patterns_identical(cells, g.evolve(cells, 2))def get_shooting_range(cells):  min_d1 = max_d1 = cells[0] + cells[1]  min_d2 = cells[0] - cells[1]  for i in range(2, len(cells), 2):    min_d1 = min(min_d1, cells[i] + cells[i+1])    max_d1 = max(max_d1, cells[i] + cells[i+1])    min_d2 = min(min_d2, cells[i] - cells[i+1])    min_lane = min_d1 - 6  max_lane = max_d1 + 3  shift = 6 - min_d2 // 2  return min_lane, max_lane, shiftdef get_pattern_to_try(cells, lane, offset=50):    y = lane // 2 + offset    return cells + g.transform(GLIDER, lane - y, y)offset = 0def display_solution(start, lanes, debug, last_cells):  global offset  cells = [c for n, c in TARGETS if n == start][0]  i = 100  for lane in lanes:    cells = get_pattern_to_try(cells, lane, i)    i += 100  g.putcells(cells, 0, offset)  for i, p in enumerate(debug):    g.putcells(p, 100 + 100 * i, offset)  g.putcells(last_cells, 100 + 100 * len(debug), offset)  g.select(g.getrect())  g.copy()  g.select([])#  g.fit()  g.update()  g.show(' '.join(chain([str(start), str(len(lanes))], [str(lane) for lane in lanes])))  offset += 400  g.update()randoms = []for i in range(4096):  randoms.append(int(sha256(str(i)).hexdigest()[:16], 16))def to_hashable(cells):  if not cells:    return 0  minx = min(cells[::2])  miny = min(cells[1::2])    hash = 0  for i in range(0, len(cells), 2):    hash ^= randoms[64 * (cells[i] & 63) + (cells[i+1] & 63)]  return hashg.new('')new_queue = []for name, cells in TARGETS:  new_queue.append( (name, [], cells, []) )seen = set()for n in range(MAX_GLIDERS):  queue = new_queue  new_queue = []    count = 0  for start, lanes, last, debug in queue:      g.show(str((n+1,count,len(queue))))    count += 1    min_lane, max_lane, shift = get_shooting_range(last)    for lane in range(min_lane, min(min_lane + MAX_LANES, max_lane + 1)):        # monochromatic        if not lane % 2:            continue                start_cells = get_pattern_to_try(last, lane, shift)        new_cells = kosherify(g.evolve(start_cells, MAX_GENERATIONS))        if not new_cells:          continue        new_hashable = to_hashable(new_cells)                if new_hashable in seen:          continue        seen.add(new_hashable)                new_lanes = lanes + [lane]        new_debug = debug + [start_cells]        cells_set = set(to_pairs(new_cells))        if find_wanted(cells_set):            display_solution(start, new_lanes, new_debug, new_cells)        if n + 1 < MAX_GLIDERS:          new_queue.append( (start, new_lanes, new_cells, new_debug) )`

Output of the first (at depth 13) is attached if anyone else wants to fiddle around.
Attachments
salvo to sl pair.rle
Physics: sophistication from simplicity.

biggiemac

Posts: 504
Joined: September 17th, 2014, 12:21 am
Location: California, USA

### Re: (27,1)c/72 caterpillar challenge

Can be done one rake better with a more straightforward approach. If only I could run a search with the depth to place both blocks simultaneously after the pond, I imagine that would save 4 or 5 rakes in the end.
`x = 2562, y = 2506, rule = B3/S2397b3o\$97bo\$98bo7\$78b3o\$78bo\$2o77bo\$b2o\$o5\$59b3o\$59bo\$60bo7\$40b3o\$40bo\$34b2o5bo\$35b2o\$34bo41\$153b3o\$153bo\$154bo7\$134b3o\$134bo\$135bo7\$115b3o\$115bo\$116bo7\$96b3o\$96bo\$97bo43\$213b3o\$213bo\$214bo7\$194b3o\$194bo\$195bo7\$175b3o\$175bo\$176bo7\$156b3o\$156bo\$157bo39\$293b3o\$293bo\$294bo7\$274b3o\$274bo\$275bo7\$255b3o\$255bo\$256bo7\$236b3o\$236bo\$237bo71\$393b3o\$393bo\$394bo7\$374b3o\$374bo\$375bo7\$355b3o\$355bo\$356bo7\$336b3o\$336bo\$337bo67\$497b3o\$497bo\$498bo7\$478b3o\$478bo\$479bo7\$459b3o\$459bo\$460bo7\$440b3o\$440bo\$441bo74\$594b3o\$594bo\$595bo7\$575b3o\$575bo\$576bo7\$556b3o\$556bo\$557bo7\$537b3o\$537bo\$538bo67\$698b3o\$698bo\$699bo7\$679b3o\$679bo\$680bo7\$660b3o\$660bo\$661bo7\$641b3o\$641bo\$642bo80\$789b3o\$789bo\$790bo7\$770b3o\$770bo\$771bo7\$751b3o\$751bo\$752bo7\$732b3o\$732bo\$733bo66\$894b3o\$894bo\$895bo7\$875b3o\$875bo\$876bo7\$856b3o\$856bo\$857bo7\$837b3o\$837bo\$838bo70\$995b3o\$995bo\$996bo7\$976b3o\$976bo\$977bo7\$957b3o\$957bo\$958bo7\$938b3o\$938bo\$939bo77\$1089b3o\$1089bo\$1090bo7\$1070b3o\$1070bo\$1071bo7\$1051b3o\$1051bo\$1052bo7\$1032b3o\$1032bo\$1033bo46\$1178b3o\$1178bo\$1179bo7\$1159b3o\$1159bo\$1160bo7\$1140b3o\$1140bo\$1141bo7\$1121b3o\$1121bo\$1122bo69\$1280b3o\$1280bo\$1281bo7\$1261b3o\$1261bo\$1262bo7\$1242b3o\$1242bo\$1243bo7\$1223b3o\$1223bo\$1224bo63\$1388b3o\$1388bo\$1389bo7\$1369b3o\$1369bo\$1370bo7\$1350b3o\$1350bo\$1351bo7\$1331b3o\$1331bo\$1332bo71\$1488b3o\$1488bo\$1489bo7\$1469b3o\$1469bo\$1470bo7\$1450b3o\$1450bo\$1451bo7\$1431b3o\$1431bo\$1432bo70\$1589b3o\$1589bo\$1590bo7\$1570b3o\$1570bo\$1571bo7\$1551b3o\$1551bo\$1552bo7\$1532b3o\$1532bo\$1533bo79\$1681b3o\$1681bo\$1682bo7\$1662b3o\$1662bo\$1663bo7\$1643b3o\$1643bo\$1644bo7\$1624b3o\$1624bo\$1625bo67\$1785b3o\$1785bo\$1786bo7\$1766b3o\$1766bo\$1767bo7\$1747b3o\$1747bo\$1748bo7\$1728b3o\$1728bo\$1729bo77\$1879b3o\$1879bo\$1880bo7\$1860b3o\$1860bo\$1861bo7\$1841b3o\$1841bo\$1842bo7\$1822b3o\$1822bo\$1823bo53\$1963b3o\$1963bo\$1964bo7\$1944b3o\$1944bo\$1945bo7\$1925b3o\$1925bo\$1926bo7\$1906b3o\$1906bo\$1907bo69\$2065b3o\$2065bo\$2066bo7\$2046b3o\$2046bo\$2047bo7\$2027b3o\$2027bo\$2028bo7\$2008b3o\$2008bo\$2009bo79\$2157b3o\$2157bo\$2158bo7\$2138b3o\$2138bo\$2139bo7\$2119b3o\$2119bo\$2120bo7\$2100b3o\$2100bo\$2101bo65\$2263b3o\$2263bo\$2264bo7\$2244b3o\$2244bo\$2245bo7\$2225b3o\$2225bo\$2226bo7\$2206b3o\$2206bo\$2207bo67\$2367b3o\$2367bo\$2368bo7\$2348b3o\$2348bo\$2349bo7\$2329b3o\$2329bo\$2330bo7\$2310b3o\$2310bo\$2311bo73\$2465b3o\$2465bo\$2466bo7\$2446b3o\$2446bo\$2447bo7\$2427b3o\$2427bo\$2428bo7\$2408b3o\$2408bo\$2409bo77\$2559b3o\$2559bo\$2560bo7\$2540b3o\$2540bo\$2541bo7\$2521b3o\$2521bo\$2522bo7\$2502b3o\$2502bo\$2503bo!`
Physics: sophistication from simplicity.

biggiemac

Posts: 504
Joined: September 17th, 2014, 12:21 am
Location: California, USA

### Re: (27,1)c/72 caterpillar challenge

I've made a more nontrivial modification to chris_c's script. It now uses numpy arrays and stores the salvo information in an ultracompact way, allowing it to reach a much higher depth before filling RAM. There is a speed tradeoff: it is a bit slower, though I've tried to mitigate that as much as I can. I'm perfectly content to just let this run in the background for a few days so long as I don't see 16GB RAM usage as was typical with the prior version.

`import golly as gimport numpy as npfrom hashlib import sha256from itertools import chain#arbitrary numbersMAX_GENERATIONS = 192MAX_POPULATION = 50MAX_HEIGHT = 27MAX_LANES = 28# MAX_GLIDERS has been set to hardcoded 17.  Execution can be interrupted at any time.#NE gliderGLIDER = g.parse('3o\$2bo\$bo!')# The piece that can't be harmed. START_KEEPERS = [(27,29),(28,28),(26,28),(28,27),(26,27),(27,26)]# The piece that is to be manipulated# Limitation: with this approach it is easiest to only allow a single initial targetSTART_TARGET = [(22,20),(21,21),(23,21),(21,22),(23,22),(22,23),                (22,11),(21,12),(23,12),(21,13),(23,13),(22,14),                (16,17),(17,18),(17,16),(18,18),(18,16),(19,17),                (25,17),(26,18),(26,16),(27,18),(27,16),(28,17)]# Any potential desired resultCONSTELLATION = [(20,21),(21,20),(20,22),(22,20),(21,23),(23,21),(22,23),(23,22),                 (22,17),(22,16),(23,17),(23,16),(17,5),(17,6),(18,5),(18,6)]OFFSETS = [(0,0),(1,1),(2,0),(0,4),(0,6)]GOALS = [[(x0 + dx, y0 + dy) for x0, y0 in CONSTELLATION] for dx, dy in OFFSETS]def to_pairs(cell_list):  return zip(cell_list[::2], cell_list[1::2])def from_pairs(cell_set):  return list(sum(cell_set, ()))TARGET = from_pairs(START_KEEPERS + START_TARGET)btlist = [TARGET,[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]]def find_wanted(cells_set):  return any(all(j in cells_set for j in k) for k in GOALS)# Return an empty cell list if the argument is invalid as a target, either not p2# or if the height or population exceeds the specified values.  Nonempty cell# lists continue on to the search tree.def kosherify(cell_list):  rest = set(to_pairs(cell_list))  if not all(j in rest for j in START_KEEPERS):    return[]  if len(rest) < 3 + len(START_KEEPERS) or len(rest) > MAX_POPULATION:    return []  rest = from_pairs(rest)  if max(rest[1::2]) - min(rest[1::2]) >= MAX_HEIGHT or not is_p2(rest):    return []  return restdef patterns_identical(cells1, cells2):  if len(cells1) != len(cells2):    return False  if sum(cells1) != sum(cells2):    return False  return sorted(to_pairs(cells1)) == sorted(to_pairs(cells2))def is_p2(cells):  return patterns_identical(cells, g.evolve(cells, 2))def get_shooting_range(cells):  min_d1 = max_d1 = cells[0] + cells[1]  min_d2 = cells[0] - cells[1]  for i in range(2, len(cells), 2):    min_d1 = min(min_d1, cells[i] + cells[i+1])    max_d1 = max(max_d1, cells[i] + cells[i+1])    min_d2 = min(min_d2, cells[i] - cells[i+1])    min_lane = (min_d1 - 6) | 1 # monochromatic  max_lane = max_d1 + 3  shift = 6 - min_d2 // 2  return min_lane, max_lane, shiftdef get_pattern_to_try(cells, lane, offset=50):    y = lane // 2 + offset    return cells + g.transform(GLIDER, lane - y, y)# Return the index of the first nibble (4 bits) in which two numbers differ.def difnibble(currid,previd):  if (previd == 0):    return 0  a = np.int64(currid)  b = np.int64(previd)  xorab = np.bitwise_xor(a,b)  lsbmask = np.bitwise_and(xorab, -xorab)  ret = 0  while ((lsbmask & 15) == 0):    ret += 1    lsbmask >>= 4  return ret# Assumes all checks for well-behavedness already happened.  Blindly runs the salvo# up to the current point to get the start constellation for the next iteration.# The backtrace list btlist holds all intermediate constellations, and since there is# significant expected overlap between consecutive ids in the array, it saves a bunch# of computation to just check where the branch point is between them and start theredef salvoID_to_cells(currid, previd):  global btlist  starter = difnibble(currid, previd)  startcells = btlist[starter]  currid >>= (4*starter)  while (currid > 0):    lane, _, shift = get_shooting_range(startcells)    lane += 2*((currid & 15) - 1)    startcells = g.evolve(get_pattern_to_try(startcells, lane, shift), MAX_GENERATIONS)    currid >>= 4    starter += 1    btlist[starter] = startcells # Update btlist for the next in line  return startcells# For viewing in gollyoffset = 0def display_solution(salvoID, laneID, n):  # When this method is called, btlist holds all the intermediate constellations.  global btlist  global offset  lanes = [get_shooting_range(btlist[i])[0] + 2*((salvoID >> 4*i) & 15 - 1) for i in range(n)]  lanes.append(get_shooting_range(btlist[n])[0] + 2*(laneID - 1))  cells = TARGET  i = 100  for lane in lanes:    cells = get_pattern_to_try(cells, lane, i)    i += 100  g.putcells(cells, 0, offset)  for i in range(n + 1):    cells = get_pattern_to_try(btlist[i], lanes[i])    g.putcells(cells, 100 + 100 * i, offset)  g.putcells(g.evolve(cells, MAX_GENERATIONS), 200 + 100*n, offset)  g.select(g.getrect())  g.copy()  g.select([])#  g.fit()  g.update()  offset += 400randoms = []for i in range(4096):  randoms.append(int(sha256(str(i)).hexdigest()[:16], 16))def to_hashable(cells):  if not cells:    return 0  minx = min(cells[::2])  miny = min(cells[1::2])    hash = 0  for i in range(0, len(cells), 2):    hash ^= randoms[64 * (cells[i] & 63) + (cells[i+1] & 63)]  return hashg.new('')seen = set()newids = np.zeros(1, dtype=np.int64)count = 1for n in range(17):  ids = np.resize(newids, count)  newids = np.zeros(4*count, dtype=np.int64)    count = 0  previd = 0  for idx, currid in enumerate(ids):    g.show(str(idx)+" of "+str(len(ids))+" at depth "+str(n))    last = salvoID_to_cells(currid, previd)    min_lane, max_lane, shift = get_shooting_range(last)    laneid = 0    for lane in range(min_lane, min(min_lane + MAX_LANES, max_lane + 1), 2):        laneid += 1        start_cells = get_pattern_to_try(last, lane, shift)        new_cells = kosherify(g.evolve(start_cells, MAX_GENERATIONS))        if not new_cells:          continue        new_hashable = to_hashable(new_cells)                if new_hashable in seen:          continue        # If we're here, the resulting pattern is both valid and new.  It        # goes into the next iteration.        seen.add(new_hashable)        cells_set = set(to_pairs(new_cells))        if find_wanted(cells_set):          display_solution(currid, laneid, n)        if n < 16:          newids[count] = np.bitwise_or(currid, np.int64(laneid) << (4 * n))          count += 1          if (count >= len(newids)):            newids.resize(2*count) # Expensive, won't happen often if at all    # Once all lanes have been checked:    previd = currid`

It is searching for something that simultaneously places all 3 still lives in one of the 5 acceptable locations without destroying the hive, and running to a depth of 17 gliders past the block pull and HF. While it will only save a few rakes from the patterns posted above, the bigger reason I did this is to get more intuition regarding just how expensive things are in this project.
Physics: sophistication from simplicity.

biggiemac

Posts: 504
Joined: September 17th, 2014, 12:21 am
Location: California, USA

### Re: (27,1)c/72 caterpillar challenge

biggiemac wrote:I've made a more nontrivial modification to chris_c's script. It now uses numpy arrays and stores the salvo information in an ultracompact way, allowing it to reach a much higher depth before filling RAM.

Cool. You have made nice progress so far. Good luck with the deeper searches.

At some point I will write a script that takes a list of lane numbers and produces a pattern with all the rakes set up correctly. It would be a real pain to do that with manual editing!

EDIT: Here is a simple script for the above. Not much testing but it seems to work ok. Edit the lanes list to change the output. Only the lane number modulo 28 counts. Adding any odd numbered lanes will result in an infinite loop

`import golly as glanes = [0, 2, 4, 6, 8]glider = g.parse('obo\$2o\$bo!')herschel = g.parse('3o\$bo\$b3o!')for i in range(g.numlayers()):    if g.getname(i) == '271rakes':        g.setlayer(i)        breakif g.getname() != '271rakes':    g.addlayer()    g.new('271rakes')g.putcells(glider, 11, -25)gx, gy = 30, -70hx, hy = 0, 0i = 0 t1 = 0t2 = 9999while i < len(lanes):    if t1 == 0:        g.putcells(glider, gx, gy)        gx += 1        gy -= 27        t1 += 72    if (hy - hx - lanes[i]) % 28 == 0 and t2 >= 104:        g.putcells(herschel, hx, hy)        hx -= 4        hy += 20        t2 = 0        i += 1    hx -= 1    hy += 1    t1 -= 4    t2 += 4    g.run(4)g.fit()`
chris_c

Posts: 892
Joined: June 28th, 2014, 7:15 am

### Re: (27,1)c/72 caterpillar challenge

I'm going to post what I have at the moment but then explain why it still is a fair distance from working.
271rakes.rle

The attached does create the constellation for the LWSS insertion, and a splitter which triggers the reaction and sends another glider NE. It takes 35 rakes in total to achieve this. Unfortunately, there is one leftover block as debris, and there is no way to clean it, so it won't do. I need a truly clean splitter recipe (searching deeper right now). That's not the biggest concern though.

The nearness of the bottom to the track isn't a problem, as everything can be shifted left as needed. However, the top is incomplete for a reason. When getting the insertion and the heisenburn to work, I was unable to get the top to work as well. I need to still do some arithmetic to determine if there is a solution by just spacing things out more, or if the two rakes are in different cosets. The insertion can still work with the helix shifted 38N cells vertically. The heisenburn can still work with the helix shifted 20N cells vertically. The x2 NE gliders can be produced only if the helix is shifted by.. something. I'm afraid we might be overconstrained horizontally and need some more gliders to be fired to get the trigger glider the proper horizontal offset relative to the topmost rake. That's math for another day..
Physics: sophistication from simplicity.

biggiemac

Posts: 504
Joined: September 17th, 2014, 12:21 am
Location: California, USA

### Re: (27,1)c/72 caterpillar challenge

Worked it out, but it isn't pretty. Major edit 10/26 for improved explanation. Hopefully none of it is flat out wrong this time.

Problem Statement
There are lots of equivalent ways to pose the problem; the most practical one at this stage is as follows:
Given a helix that is aligned with the insertion stage, what needs to be changed for it to be viable at the top? Being viable at the top requires meeting 3 constraints: the heisenburn succeeding, the LoM collision succeeding, and the horizontal offset between the topmost and second rakes being correct.

Degrees of Freedom
What can we change? We can move the trigger glider back in increments of (19, 19). We can add a recipe glider assuming there is some deletion step of the recipe that can be made longer, which moves the trigger glider a minimum distance of (53, 53). We can also move the topmost gliders in increments of (1,-1), which causes them to meet the helix later but with the same impact parameter. This moves the NE rebound gliders by (-1,-1), as shown below.
`x = 33, y = 53, rule = LifeHistory11.2D\$11.D.D\$11.D2\$7.2A\$7.A.A\$7.A6\$5.A\$4.3A\$4.A.2A\$5.3A\$5.2A5\$2.3A\$.A2.A\$4.A22.D\$A3.A22.2D\$4.A21.D.D\$.A.A\$31.A\$31.2A\$30.A.A\$7.A\$6.3A\$6.A.2A\$7.3A\$7.2A5\$4.3A\$3.A2.A\$6.A\$2.A3.A\$6.A\$3.A.A4\$9.A\$8.3A\$8.A.2A\$9.3A\$9.2A!`

Part 1: Heisenburn
The heisenburn is a matter of satisfying an impact parameter with a NW glider. This means if we satisfy the heisenburn, the helix itself may then move any multiple of (1, -1), as well as its own translational symmetry of (2,18), with the heisenburn unaffected. The only thing we can actually do though is stall the helix creation, which is a vertical shift of some multiple of (0,2). A shift of (0, -20) is equivalent to (2, -2) via the symmetry of the helix, so there are 10 cosets and we can reach them all as 19 and 53 are both coprime to 10. Once aligned with the heisenburn, our realizable freedom is to shift the helix in increments of (2, -2).

Part 2: NE rake matchup
In this analysis we have been in the reference frame of the construction effort, so the LoM initial target is fixed, as are the rakes that produce it. Matching the NE gliders is a 2D constraint (mod (34,18), which is the translation between gliders in a x2 NE rake). As we showed above we can move these gliders in increments of (1, 1) without moving the helix. To get the other dimension of freedom, we need to move the helix some number of cells according to the freedom identified above, which moves everything in increments of (2, -2).

It is possible to be unable to meet this constraint, as these shifts all satisfy dx - dy = 4N, and half the time the circumstances might require dx - dy = 4N + 2. Assume though that we can shift everything to satisfy the NE gliders. What freedoms remain to use in matching the 3rd criteria for viability?

Part 3: Top rake horizontal offset
We matched the NE gliders modulo the (34, 18) symmetry of the NE stream. If we perform the following convoluted combination:
Translate the helix by (16, -16) via stalling the insertion glider by (80, 80)
Translate the top of the helix by (2, 18) by adding one unit cell
Move the NE gliders by (16, 16), and the topmost gliders the corresponding (-16, 16)

Then the net displacement of the NE gliders is (34, 18), exactly their symmetry. The net displacement of the NW gliders is (2, 18). The horizontal offset between the topmost and second rakes requires they be skewed by 4 mod 19; their vertical separation is irrelevant. Thus, the freedom identified above is a shift of 2 horizontal cells, sufficient to meet the 3rd and final criterion.

Assessment
We have everything now in terms of how much to shift the trigger glider modulo various parameters. Perform unit shifts to satisfy the heisenburn, then shifts mod (10, 10) to match the NE rake, then shifts mod (80, 80) to achieve the correct horizontal offset, modulo a total overall shift of (1520, 1520) which impacts nothing of interest.

Since 1520 is divisible by 19, the (53, 53) shift incurred by adding a recipe glider is generally necessary for the last part. However, we might have plenty of different recipes to choose from, all of which proceed via a splitter/rephaser. Depending on the properties of the rephaser portion of this, the number of required extra recipe gliders can change. I think I found a way to express that rather simply.

To thaw the LWSS, a glider needs to be provided which is advanced by one phase relative to the rakes and is of the same color. When a splitter provides that glider, it adjusts the incoming glider by moving it 2Y cells vertically and advancing it 1 + 4K generations. Y and K can be positive or negative, and only K is important to the result. Splitters may have different values of K.

Assuming the construction proceeds via the 2fd offset honeyfarm, we will call the rake that hits that honeyfarm the "first" rake. The eventual trigger glider is the Nth rake. In the earlier attachment, N = 33.

To have the correct horizontal match between the trigger rake and the LWSS, there is a restriction on N and K. I believe after redundant checks that the restriction is N = (8 - 5K) mod 19. That the modulus is 19 makes sense, since adding 19 to either N or K leaves the problem unchanged, and that the coefficients are 1 and 5 makes sense as adding 4 to K is equivalent to adding 1 to N.

In the earlier attachment K = -2, meaning we need N = 37, so we need to burn 4 more gliders. Perhaps there is a way to set up the same splitter to delete the problematic block when the recipe is 4 G longer, but I haven't found it.

Certain values of K are more reasonable than others. If K = 0 for example, we need a recipe of length 27 or 46, and 27 is too tight to expect the 3SL constellation and a clean splitter. I have found a number of recipes in the 32-36 glider range that nearly achieve the goal, so 46 would be needlessly wasteful (remembering that every rake fired also means a lot of downstream cleanup..)

That one other problem we swept under the rug
Earlier I said there was a 50% chance we can't match the NE gliders, because of requiring dx - dy = 4N + 2. Consider two splitters, A and B, where the K value of A is one greater than that of B, and which activate the same LWSS seed. If A is used, then the helix is 2 cells lower than if B is used, so dx - dy is changed by 2.

Consider instead two identical LWSS seeds built (1, -1) relative to one another. My adaptation to chris_c's program sought out a way to construct the seeds in one of the 5 hive-compatible positions, some of which had relative dx - dy of 4N + 2. For two of these seeds, their resulting helices also have dx - dy changed by 2.

Thus, depending on where the seed is ultimately placed, there is an additional constraint on the parity of K. The route I have been investigating requires K be even, but if the other background search I have been running shows some promise for a different positioning of the seed then an odd K might be necessary. It's just important to know this constraint also exists and how to meet it.
Physics: sophistication from simplicity.

biggiemac

Posts: 504
Joined: September 17th, 2014, 12:21 am
Location: California, USA

### Re: (27,1)c/72 caterpillar challenge

`x = 107, y = 155, rule = B3/S2324b2o\$24b2o11\$15b2o\$15b2o3\$25b2o\$25bobo\$26bo3\$29b2o\$28bobo\$29bo2\$21b2o\$21b2o11\$12b2o\$12b2o7\$26b2o\$26bobo\$27bo3\$30b2o\$29bobo\$30bo2\$22b2o\$22b2o11\$13b2o\$13b2o3\$23b2o\$23bobo\$24bo3\$27b2o\$26bobo\$27bo2\$19b2o\$19b2o11\$10b2o\$10b2o7\$24b2o\$24bobo77b2o\$25bo78bobo\$104bo2\$28b2o\$27bobo\$28bo2\$20b2o\$20b2o63b2o\$85bobo\$85bo7\$66b2o\$66bobo\$11b2o53bo\$11b2o3\$21b2o\$21bobo\$22bo\$47b2o\$47bobo\$25b2o20bo\$24bobo\$25bo2\$17b2o\$17b2o2\$28b2o\$28bobo\$28bo11\$2bo\$b3o\$2obo\$3o\$3o\$b2o!`

A potential MWSS reaction using the same staggered-offset trick as in the LWSS. The staggered TL with a pair of blocks should suffice to set up some LWSS seed to kill off the final glider at the top.

I couldn't find a way to use the clean MWSS seed from chris_c's search to produce nearly-clean x2 output without adding at least one x2 object, which probably costs a bit more than just the 4 cheap SL here.

As for fixing up the LWSS trigger issue, it has proven very frustrating. There should be a 37G recipe that uses the same splitter as the 33G one but is clean, I just don't know how far back I need to modify the search to find it. There are ways to make different splitters in 34G which are clean/cleanable, but the horizontal restriction means that a dozen or so additional gliders need to be wasted to use them.

Edit: The above MWSS inserter can avoid a rephaser by using a different wing seed with the right parity and phase mod 4. Here is one in 10 gliders from a block.
`x = 1035, y = 1061, rule = B3/S2314b2o\$14b2o11\$5b2o\$5b2o3\$15b2o\$15bobo\$16bo5\$32b2o\$32b2o\$11b2o\$11b2o11\$2b2o\$2b2o7\$16b2o\$16bobo\$17bo5\$33b2o\$33b2o\$12b2o\$12b2o11\$3b2o\$3b2o3\$13b2o\$13bobo\$14bo5\$30b2o\$30b2o\$9b2o\$9b2o11\$2o\$2o7\$14b2o\$14bobo\$15bo5\$31b2o\$31b2o\$10b2o\$10b2o11\$b2o\$b2o3\$11b2o\$11bobo115b3o\$12bo116bo\$130bo4\$28b2o\$28b2o\$7b2o\$7b2o101b3o\$110bo\$111bo7\$91b3o\$91bo\$92bo7\$72b3o\$72bo\$73bo7\$53b3o\$53bo\$54bo57\$234b3o\$234bo\$235bo7\$215b3o\$215bo\$216bo7\$196b3o\$196bo\$197bo7\$177b3o\$177bo\$178bo7\$158b3o\$158bo\$159bo65\$331b3o\$331bo\$332bo7\$312b3o\$312bo\$313bo7\$293b3o\$293bo\$294bo7\$274b3o\$274bo\$275bo7\$255b3o\$255bo\$256bo66\$427b3o\$427bo\$428bo7\$408b3o\$408bo\$409bo7\$389b3o\$389bo\$390bo7\$370b3o\$370bo\$371bo7\$351b3o\$351bo\$352bo59\$530b3o\$530bo\$531bo7\$511b3o\$511bo\$512bo7\$492b3o\$492bo\$493bo7\$473b3o\$473bo\$474bo7\$454b3o\$454bo\$455bo60\$632b3o\$632bo\$633bo7\$613b3o\$613bo\$614bo7\$594b3o\$594bo\$595bo7\$575b3o\$575bo\$576bo7\$556b3o\$556bo\$557bo61\$733b3o\$733bo\$734bo7\$714b3o\$714bo\$715bo7\$695b3o\$695bo\$696bo7\$676b3o\$676bo\$677bo7\$657b3o\$657bo\$658bo67\$828b3o\$828bo\$829bo7\$809b3o\$809bo\$810bo7\$790b3o\$790bo\$791bo7\$771b3o\$771bo\$772bo7\$752b3o\$752bo\$753bo61\$929b3o\$929bo\$930bo7\$910b3o\$910bo\$911bo7\$891b3o\$891bo\$892bo7\$872b3o\$872bo\$873bo7\$853b3o\$853bo\$854bo59\$1032b3o\$1032bo\$1033bo7\$1013b3o\$1013bo\$1014bo7\$994b3o\$994bo\$995bo7\$975b3o\$975bo\$976bo7\$956b3o\$956bo\$957bo!`
Physics: sophistication from simplicity.

biggiemac

Posts: 504
Joined: September 17th, 2014, 12:21 am
Location: California, USA

### Re: (27,1)c/72 caterpillar challenge

So how would those boats, etc. be generated again?
Bored of using the Moore neighbourhood for everything? Introducing the Range-2 von Neumann isotropic non-totalistic rulespace!
muzik

Posts: 3301
Joined: January 28th, 2016, 2:47 pm
Location: Scotland

### Re: (27,1)c/72 caterpillar challenge

Life update: I have completed classes. I might be able to put some spark back in this project. It just seemed a bit too thinkythonky to do in parallel with the whole not-failing-grad-level-physics-courses thing.

A couple remarks (mainly here to get present-me on the same page as past-me):

There is a climber and a helix. The helix is x3. The climber doesn't do much to rephase the track. A loaf+block constellation can serve as a frozen track, hopefully fixing the rephasing issue.

The fanouts for this helix have the potential to be extremely bulky. In order to minimize that, we came up with a way to produce a full constructor from just a single track, in theory. This means fanouts produce just 3 copies of the helix glider, rather than as many as 15.

The single track would fire a bunch of backrakes (byproducts of the natural reaction) at a target stream of x2 *WSS, and use the debris to recreate the *WSS and the additional tracks required to make the full constructor. This x2 closed loop has a bunch of wonky timing restrictions but the math I did last October details the constraints that places on our recipes. It is not ruled impossible.

The reason I had been so obsessive over optimizing the number of rakes to be as few as possible: during this single-track-becomes-constructor stage, every rake is dirty, and the constructor will spend a lot of time in its early life just destroying the debris that was left behind creating it. A similar process happened after each reset in the Waterbear, but this one will be at least an order of magnitude messier. I expect saving one backrake saves on the order of a dozen rakes later in the ship.

For convenience, once a single-track-to-clean-construction-unit module is complete, we can have a frozen-track-to-construction-unit just by starting from the loaf+block. This might actually be the easiest route to providing activation gliders in the right phase for the helix and fanout ships, since the climber itself is not an adept rephaser. So this mass of x2 *WSS syntheses and cleanup might have to happen at multiple points in the ship.

The 271rakes rle posted earlier gives a reasonable (from a distance) look at what the x2 syntheses are made of. It is missing the top, thanks to lacking in the nitty gritty of timing. After the *WSS syntheses, we probably need a constellation that can be activated to produce 4 synchronized-mod-(19,45) gliders to round out a full constructor.

There are options as to which 5-track constructor to go with. I might have to choose arbitrarily in order to make any progress. There are also undoubtedly constructors with more tracks, and possibly workable ones with fewer tracks that I haven't seen.

For now, just getting a single track to produce its own x2 *WSS feedback loop will be a good step forward. Hopefully I can post a demonstration of just that in the near future.
Physics: sophistication from simplicity.

biggiemac

Posts: 504
Joined: September 17th, 2014, 12:21 am
Location: California, USA

### Re: (27,1)c/72 caterpillar challenge

Am I the only one still working on this anymore?
Look at me! I make patterns in golly and go on the forums! I wanna be Famous!

Posts: 219
Joined: January 24th, 2018, 4:36 pm

### Re: (27,1)c/72 caterpillar challenge

I really want to help this, but I have no Idea how...
woomy on a vroomy
googoIpIex

Posts: 253
Joined: February 28th, 2019, 4:49 pm
Location: Sqrt(-1)

### Re: (27,1)c/72 caterpillar challenge

googoIpIex wrote:I really want to help this, but I have no Idea how...

In June 2017, biggiemac wrote:After the *WSS syntheses, we probably need a constellation that can be activated to produce 4 synchronized-mod-(19,45) gliders to round out a full constructor.

I'm not paying enough attention to this project to know for sure. But it seems like this seed constellation that biggiemac mentioned might be one of the simpler things that could be usefully contributed.

Now, biggiemac hasn't logged in to the forums for quite a while -- maybe quantum physics is keeping him busier than he thought! Someone else might have to pick up this project if it's going to get done.

Specific to the suggestion about a 4G seed constellation, there definitely seems to be a shortage of people who are good at building seed constellations out of one-time turners and splitters. Otherwise I think by this time we'd have a lot more constellations that magically turn into various spaceships and oscillators and still lifes. And a script that builds constellations that can be triggered by one glider to make any arbitrary synchronized glider salvo, not just slow salvos... and who knows, maybe even a freeze-dried waterbear.

Seeds like this are currently a little tricky to get synchronized, because simsim314's collection of splitters isn't quite big enough yet, or quite organized enough. At least I _think_ it isn't organized enough... there's a series of posted stamp collections that seem to be divided into eight categories each, but it seems to me there are really 16 categories in some of those cases, so two different categories end up being mixed together.

Similarly, all the stamp collections labeled with numbers would be much more useful if the range of numbers could be made contiguous. The search could be extended to 3sL and/or 16x16 as necessary.

Let's say we need two gliders traveling away from each other on nearby lanes -- offset of N, relative phase P.
Eventually we should have a lookup table with a splitter for every possible N and P in a big range. When we need one, we just look it up and drop it into our seed pattern.

... Does that suggestion seem to point in an interesting direction, or no? The other holes suggested by biggiemac's last post seem more difficult to chop up into bite-sized pieces.

dvgrn
Moderator

Posts: 5634
Joined: May 17th, 2009, 11:00 pm

### Re: (27,1)c/72 caterpillar challenge

I don't really know what 4 synchronized-mod-(19,45) gliders means.
woomy on a vroomy
googoIpIex

Posts: 253
Joined: February 28th, 2019, 4:49 pm
Location: Sqrt(-1)

PreviousNext