I think I'm not the only one who admired the half-bakery reaction with a glider and wondered if it can be useful for something, maybe even a knightship.

Today I thought if it could be possible to build something like a movable slow salvo target that would emit gliders and these gliders would be used to trigger a chain of half-bakery reactions, emitting gliders in the opposite direction, hit the slow salvo target and thus the reaction loop would be closed. Quite an ambitious design.

But that's only a theory.

In the meantime, I ran a gencols search and here is an interesting reaction I found.

I set this sample up to delete the wrong block in the middle block trail; otherwise it would be possible to run another Herschel pair just like the first one, and get another extra glider out of the same half-bakery pair.

But that's the least of the problems. To make a knightship, it seems as if the block trails would have to drift sideways along with the half-bakeries... they could do this if each block absorbed three (2,1) block-pull gliders from the southwest, but where are those going to come from? And probably there wouldn't really be any use for output gliders with the particular direction and spacing produced by half-bakery chains like these.

Making these useful in a 31c/240 design would still require reaching around front and building trails of half-bakeries in the right places, and they probably need to be cleaned up afterwards, so I'm still not seeing any options that look really likely.

codeholic wrote:... it could be possible to build something like a movable slow salvo target that would emit gliders and these gliders would be used to trigger a chain of half-bakery reactions, emitting gliders in the opposite direction, hit the slow salvo target and thus the reaction loop would be closed.

After a few exchanges with Calcyman in the last week or two, I'm fairly confident that the above design for a Half-Baked Knightship is actually buildable.

Here are some workable pairs of glider pairs, compatible with the extra glider outputs from half-bakery reactions. These can be used for a Serizawa-style "armless" slow-salvo constructor:

I've done what I think is an exhaustive enumeration of the collisions of three gliders from two opposite directions, and none of them seems to produce a clean NE or SW glider. If someone could independently check that, I'd be most grateful. The above is pretty certainly not an exhaustive list, especially for the P2 intermediate targets, but it's good enough for a start.

This is a little messy, but it basically shows that you can cycle through a wide "shooting range" of northeastward glider lanes, and either fire or not fire a glider on each lane as it goes by. That will eventually add up to a workable slow salvo that can hit targets in the NE and construct one-time glider turners and glider splitters. When triggered, these will have to produce ten gliders in the same relative spacetime locations as the originals, but offset by (-3,-6) [and a lot of ticks].

Remaining problems are:

1) have to figure out how to absorb the gliders in the southwest somehow, when their work is finally done. This may require a southwestward slow salvo, which might require twenty gliders instead of ten, and twice as many half-bakery chains. It would be nice to find a way to avoid that.

One possible option would be to build and then trigger a freeze-dried SW slow salvo somewhere in the northeast. The SW salvo will be much shorter than the NE-ward one -- there's much less stuff that needs to be constructed and moved around in the SW -- so the freeze-dried salvo could be constructed in parallel at not much extra cost.

2) currently it's only possible to fire gliders on one lane color -- every other glider lane is unreachable. I think that monochromatic slow salvo toolkits can be put together with no problem, but nobody has actually done anything like that yet...! If it works, then we can use regular P2 slow salvos for everything past the first monochromatic single-parity slow elbow.*

It might be possible to work out a way to change the parity or the glider color in mid-stream, by using singleton half-bakeries to re-synchronize one or more of the gliders in a four-glider recipe, to turn it into a different recipe... but I'm not holding my breath on that one.

-- Or elbows: it will almost certainly make sense to start with a line of at least three target objects in the northeast, maybe as many as ten or twelve. Each time the current glider lane scans across a target, we'll have the opportunity to hit it with at least one more glider, and often two or more.

3) Now we really need a nice extensive collection of "dirty OTTs" -- the cheapest possible objects that, when hit by a slow salvo, produce a single glider going 0, 90, 180 or 270 degrees from the original salvo... and in this case we also want a piece of junk left over. Ideally the junk would be identical to the original object, but displaced by (-3,-6).

* Does this "slow elbow" terminology make sense to everyone? I'd be happy to explain in more detail if there are any questions.

dvgrn wrote:I've done what I think is an exhaustive enumeration of the collisions of three gliders from two opposite directions, and none of them seems to produce a clean NE or SW glider. If someone could independently check that, I'd be most grateful.

If you mean "three gliders from two opposite directions, emitted directly by independent half-bakery reactions", then it seems you're right. That's a pity.

dvgrn wrote:1) have to figure out how to absorb the gliders in the southwest somehow, when their work is finally done.

This one is a no-brainer, hopefully. There are plenty of ways to absorb a pair of gliders...

It doesn't seem quite so easy to me (though I may be missing something obvious, as usual). To keep the knightship going, and to keep it from being a 10-glider knightrake (which would be easier to build) we have to be able to cleanly absorb all ten gliders coming out of the half-bakery chains to the southwest. Those gliders are not all in pairs, and the pairs are all offset by 8hd with a specific delay.

This is required for the SW/NE glider generating reactions, and can't be arbitrarily changed later. The only thing I can see to do would be to add half-bakeries to one or the other chain, like so:

But that doesn't produce a spacing on your list. Probably we could double the number of half-bakery chains so that every glider has a "guard" that can be re-timed with a half-bakery to get one of your absorber pairings. But that means doubling the number of synchronized gliders we have to produce in the NE, of course -- not something to do lightly. Even ten gliders will be one of the biggest seed synchronization projects that anyone has ever undertaken... it won't be _that_ hard, but it will definitely be annoying.

In the absence of a lucky constellation that reconstitutes itself at (-3,-6) when struck by one of the above glider pairs, it seems as if a good bet would be to absorb each glider with a (2,1) block pull --

dvgrn wrote:Those gliders are not all in pairs, and the pairs are all offset by 8hd with a specific delay.

This is required for the SW/NE glider generating reactions, and can't be arbitrarily changed later.

Having said "a pair of gliders", I didn't mean, that those should be glider pairs running on original tracks. Interleaving gliders between tracks and adjusting the distance between tracks maybe provides an additional degree of freedom.

dvgrn wrote:3) Now we really need a nice extensive collection of "dirty OTTs" -- the cheapest possible objects that, when hit by a slow salvo, produce a single glider going 0, 90, 180 or 270 degrees from the original salvo... and in this case we also want a piece of junk left over. Ideally the junk would be identical to the original object, but displaced by (-3,-6).

dvgrn wrote:3) Now we really need a nice extensive collection of "dirty OTTs" -- the cheapest possible objects that, when hit by a slow salvo, produce a single glider going 0, 90, 180 or 270 degrees from the original salvo... and in this case we also want a piece of junk left over. Ideally the junk would be identical to the original object, but displaced by (-3,-6).

For which part of the knightship do you think it might be useful?

My blueprint for the HBK looks like this, more or less:

Half-Baked Knightship blueprint

HBK-diagram.png (17.88 KiB) Viewed 41505 times

Green arrows: sets of four gliders that produce many NE-traveling gliders along the spine of the spaceshipRed arrows: initial slow salvo(s) heading NE, aimed at "slow elbow" targetsRed squares: monochromatic single-parity slow elbows -- there may be two or three or ten of these.

You can see samples of all of these in the sample pattern I posted recently.

Blue arrows: trigger gliders going through a chain of glider splitters and one-time turnersBlue blobs: splitters and OTT constellations that produce an exactly timed copy of the ten gliders that entered the half-bakery chains to make all this stuff happen.

Not shown: P2 super-slow salvos coming from the slow elbows, to build the glider splitters and one-time turners at (-3,-6) from their previous locations before triggering them, using as targets whatever junk is left over from the previous dirty turning reactions.

All of this is easy enough to do, though a bit tedious. I could probably string together a perfectly workable Blockic solution in a few hours -- but it would have ten times as many objects as we really need, which would make the knightship even more ridiculously long than it will be already. The really interesting part of this project would be to find ways to optimize the OTTs and splitters so that they cost as little as possible to rebuild.

dvgrn wrote:Blue blobs: splitters and OTT constellations that produce an exactly timed copy of the ten gliders that entered the half-bakery chains to make all this stuff happen.

I think it would be more effective to build salvos from bigger components than just OTT, something emitting at least 2 gliders with proper timing at once. They should be quite easy to find by gencols and a custom script filtering its results.

codeholic wrote:I think it would be more effective to build salvos from bigger components than just OTT, something emitting at least 2 gliders with proper timing at once. They should be quite easy to find by gencols and a custom script filtering its results.

Yes, the blue blobs in the blueprint certainly aren't set in stone. No doubt it will be much easier to build a constellation that generates the main NW-glider generating glider pair -- we can use that in four different places. If possible, we also want an optional add-on to that constellation that also generates the third glider for the half-bakery kickbacks on the northwest side.

Then we can just build the constellation-with-addon twice on the NW side, and the base constellation twice on the SE side... but using totally different slow-salvo recipes for the NW and SE, unfortunately, since the construction gliders will be coming from opposite directions!

What we're trying to minimize is the total number of slow-salvo gliders needed to convert the leftover ash from the constellation->gliders reaction into a new (-3,-6) offset copy of the constellation. Maybe I should build a quick Blockic version of this, just so that we have a definite upper bound for the cost, and by extension for the total length of the HBK.

dvgrn wrote:Those gliders are not all in pairs, and the pairs are all offset by 8hd with a specific delay.

This is required for the SW/NE glider generating reactions, and can't be arbitrarily changed later.

Having said "a pair of gliders", I didn't mean, that those should be glider pairs running on original tracks. Interleaving gliders between tracks and adjusting the distance between tracks maybe provides an additional degree of freedom.

That makes sense. It's a little annoying having to double the number of synchronized gliders going in at the NE end, just to solve the trivial little problem of getting rid of a few extra gliders at the SW end.

But it's probably more efficient, and gives a cleaner overall design, than inventing a whole new set of rake units firing SW gliders -- or building a freeze-dried constellation in the NE to produce a SW-ward salvo that can move a pile of "eater" constellations in the SW. The Half-Baked Knightship will be plenty enough of a Rube Goldberg contraption already, without having to invent new freeze-dried salvo technology too.

So let's take that as the new "standard model": twelve gliders going into the upper half-bakery chains, synchronized with eight gliders going into the lower chains. Probably the first thing to do is hunt for an OTT that produces a rake glider along with its associated guard glider, which will be one half-bakery offset away from an absorber reaction. I'll work up a revised trial pattern when I get a moment, maybe this evening.

I've had another look at monochromatic same-parity slow-salvo constructions, by the way, and it seems quite clear that they're easily universal. Just need to run a search to dig up let's say sixteen different dirty one-time turners, one for each color and phase of each of two 90-degree glider output directions for each of two parities of a target block...!

EDIT: Eight recipes for one block parity can be trivally derived from the eight recipes for the other parity, by adding a single (2,1) block pull. I think the two mirror-image 90-degree turns can be handled the same way. So we really only need four distinct slow-salvo recipes for 90-degree glider turns, using all gliders in the same phase and on the same color.

Let's define half-bakery transformation of a glider as the shifting it forward by 2 half-diagonals and delaying by 47 generations.

Let's define invariants for a glider pair. First apply as many half-bakery transformations to one glider in the pair as needed in order to place gliders onto one lane. Then the invariant is the number of generations that should pass in order to superimpose one glider on another. Since half-bakery transformations can be applied to both gliders, any glider pair with even half-diagonal distance has two invariants. Glider pairs with odd half-diagonal distance cannot be brought onto one lane, thus have zero invariants.

A glider pair, that fits into the half-bakery glider-producing reaction, should have an invariant 101 (introducing half-bakeries determines unambiguously, which glider should be moved in which direction, therefore there is no alternative invariant).

codeholic wrote:Having said "a pair of gliders", I didn't mean, that those should be glider pairs running on original tracks. Interleaving gliders between tracks and adjusting the distance between tracks maybe provides an additional degree of freedom.

That makes sense. It's a little annoying having to double the number of synchronized gliders going in at the NE end, just to solve the trivial little problem of getting rid of a few extra gliders at the SW end.

Interleaving gliders gives an additional degree of freedom though, only if the intermediate product of the NE glider salvo is periodic, but the track design by Calcyman involves B-heptominoes.

dvgrn wrote:Probably the first thing to do is hunt for an OTT that produces a rake glider along with its associated guard glider, which will be one half-bakery offset away from an absorber reaction. I'll work up a revised trial pattern when I get a moment, maybe this evening.

Having said the above, I would wait for a while with building the initial glider salvo seed. I think it would be more productive to find track arrangement, that can be corked up by some of the terminators I posted above, and only then start building a seed for a corresponding glider salvo.

codeholic wrote:Here is a good seed of a glider pair with the proper timing...

Another pair that might be good to have a seed for would be any glider pair where one glider can act as a "guard" for the other one -- i.e., at the end of the HB chains, one glider of a guarded pair can be rephased just before an absorber reaction.

Here's a trial pattern using the new seed to make the four main pairs of rake gliders. The two remaining gliders have guard gliders added -- the guard is the leading glider in each pair connected with a dotted line:

Twelve gliders go in to the chains (after the seeds are triggered) -- but only eight gliders come out. The only thing remaining to make this a viable Half-Baked Knightship body would be to add guards for the remaining eight gliders, somewhere that isn't in the way of the rake reactions.

-- Too many options are showing up already. It may end up being better to use a different four-glider recipe to build the NE gliders -- there are over a dozen workable options, and some may be a little more compatible with guard gliders. This Herschel-based NE glider recipe has one glider with ridiculous amounts of timing and spacing adjustability, but the other three gliders have to be precisely synchronized. The other recipes' gliders all just need to be synchronized in pairs, with variable timing between the pairs.

I'll be very short on free time until next weekend, so any help in guarding the remaining gliders or stringing together the synchronized-glider seeds would be much appreciated...!

I thought that it might be useful to have fractional invariants for odd half-diagonal distances, in order to provide support for other contraptions, such as terminators. E. g. the following seed produces a pair of gliders with invariants (285.5, 273.5)

dvgrn wrote:Another pair that might be good to have a seed for would be any glider pair where one glider can act as a "guard" for the other one -- i.e., at the end of the HB chains, one glider of a guarded pair can be rephased just before an absorber reaction.

Wrote a custom Python script. It would have been much more efficient to use gencols, but I would have had to think harder to translate the relative glider placements into numbers I could understand... The biggest headache was figuring out how to filter out duplicates -- the B-heptomino recipe needs two synchronized gliders from the NW, where the other recipes are all 180-degree "slow pairs". Have you run this in gencols? Did I miss any interesting options?

codeholic wrote:It still seems wasteful to me to double the number of trails.

Oh, I definitely agree! I'll keep working on the monochromatic slow-salvo toolkit that will let us get away with just ten trails, if some better way can be found to clean up the gliders at the SW end.

I like the "invariant" metric, and will start using it. Maybe there's some way to set up the timing for two slow 180-degree glider pairs, so that the trail gliders can be paired up and HB-transformed into one of the absorber reactions. Seems as if the geometry should work, if I pick the right non-B-heptomino reaction to start with... will rebuild and post a sample here.

dvgrn wrote:Have you run this in gencols? Did I miss any interesting options?

Yes, I used gencols. But I looked only for 3-glider syntheses. It's quite tricky to use gencols when there are some restrictions, like when you'd want to avoid colliding a pattern with a certain part of another pattern, in such cases gencols enumerates much more patterns than required.

(I've been dreaming for a while of a new program for enumerating collisions, with some advanced features... Maybe one day I'll describe what I'd like to have.)

Bad news is that I took a look at invariants of absorbers and invariants of gliders in two HB-transforming tracks with minimal spacing. I haven't strictly excluded the possibility, that they're not compatible, but I have a strong feeling, that they aren't.

Good news is that I hit upon a trivial way to get rid of all gliders but two. Here is an example how:

Okay, I'll post it shortly. Have to clean up the most embarrassing parts first -- it's not currently in a state where anyone but me could use it.

codeholic wrote:

dvgrn wrote:Have you run this in gencols? Did I miss any interesting options?

Yes, I used gencols. But I looked only for 3-glider syntheses. It's quite tricky to use gencols when there are some restrictions, like when you'd want to avoid colliding a pattern with a certain part of another pattern, in such cases gencols enumerates much more patterns than required.

Yeah, that's sort of why I decided on the custom-script approach -- figured I'd just run it until it found a half-dozen solutions or so, and not worry about an exhaustive solution list.

However, I just rediscovered a class of solutions that I turned up earlier but dismissed as unworkable, that may actually be usable. If you reverse the order of the two rake units on the southeast side, you can send the outermost glider through the gap in the inner rake unit, and end up with the second glider on that side between three and six lanes NE of the first one:

Ordinarily the range is 0-3 lanes SW of the first glider. I'll rework the script and leave it set up for a fresh look at this search space. EDIT: So far I just have these (and probably there's no use for the SW outputs now):

It looks like it could be good to dig up as many solutions as possible, because we might have to find a lucky combination that will allow all the gliders on both sides to be paired up and HB-transformed to produce an absorber reaction. I think some of the posted reactions won't actually work in practice, by the way, because one glider's final HB-transformation reaction interferes with the other glider. Probably makes sense to put together a tested list of working invariants to aim for.

codeholic wrote:(I've been dreaming for a while of a new program for enumerating collisions, with some advanced features... Maybe one day I'll describe what I'd like to have.)

Mark Niemiec recently mentioned the old problem of enumerating all three-glider collisions, while correctly recognizing all duplicates. Seems as if with the help of a big hashtable, that task at least ought to be within reach these days. But yes, it would be nice to have something a little faster than Python and a little less awkward than gencols.

codeholic wrote:Bad news is that I took a look at invariants of absorbers and invariants of gliders in two HB-transforming tracks with minimal spacing. I haven't strictly excluded the possibility, that they're not compatible, but I have a strong feeling, that they aren't.

Just at the minimal spacing, though? There's no particular reason to insist on any particular spacing. Can that distance be used as a degree of freedom to find a compatible absorber? Seems like the compatibility should depend on which NE-glider recipe is being run through the HB tracks, also...?

codeholic wrote:Good news is that I hit upon a trivial way to get rid of all gliders but two. Here is an example how... One could probably find a way to get rid of those two last gliders with a 'guard' or two.

This looks good, especially if the two gliders can be killed off by one guard somehow... but I'll spend a little more time hunting for ways to make all of the original ten tracks absorber-compatible, so that no guards are needed.