Tutorials/Glider syntheses

Glider synthesis is the process of colliding gliders – the smallest spaceship in Conway's Game of Life – in a specific way to construct a specific object. It is one of the few areas in the Game of Life that many discoveries can still be made without using scripts.

This is an example of a glider synthesis:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=73, y = 28, rule = B3/S23 52bo$50bobo$51b2o4$51bobo$52b2o2bobo4bo$52bo3b2o5bobo$2bo54bo5b2o$ obo$b2o$49b2o$13bo35bo$3b2o6b2o37b3o12bo$4b2o6b2o38bo10b2o$3bo51b 2o7b2o$55b2o$8b2o$9b2o54b2o$8bo48b2o5b2o4b3o$58bo7bo3bo$12bo45bobo 10bo$12b2o45b2o$11bobo$16b3o$16bo$17bo! [[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

It is a 13-glider synthesis of Achim Flammenkamp's pseudo-barberpole, which, at the time of writing, is the cheapest synthesis known of that object. Note that this particular synthesis can be divided into two stages which can take place arbitrarily far apart; multi-stage synthesis are typically shown this way to make it easier to see what is happening in each step. The three still life syntheses are independent and could also be moved into separate stages, so this is really a four-stage synthesis. Simple well-separated still lifes tend to be trivial to construct, and often the order of construction doesn't matter, so several stages are sometimes left combined in cases like this.

Locating known glider syntheses

To locate a known glider synthesis, there are three main places you should look:

As of May 2019, many of the syntheses in Niemiec's database are out of date, but the site does have some that aren't on Catagolue yet.

Also, there's a very important difference between the two databases. Shinjuku/Catagolue focuses on documenting the single synthesis of each object that takes the smallest number of gliders. By contrast, Niemiec's database collects many types of syntheses for a large number of objects, including more expensive ones. For example, there may be syntheses of two combined objects where each type of object is added to an already existing instance of the other type. Or there might be syntheses where all gliders come from one side of the object (useful in building the object near other existing objects), and so on.


Sometimes you will not find a synthesis for a particular object in any of these places. That could be because:

  • There does exist a known synthesis, but it is hidden somewhere obscure. Your best bet is to ask on the ConwayLife.com forums.
  • No syntheses are known because no-one has decided to synthesise that specific object before. These are usually pretty easy to make a synthesis for yourself.
  • No syntheses are known because the object is very difficult to synthesise. An example of this would be Sir Robin.
  • The object has been proven impossible to synthesise. Examples of this include all Gardens of Eden as well as solutions to the grandfather problem.

In the next section we will look at how to make your own syntheses.

Making your own glider syntheses

Using Catagolue to find glider syntheses

Before you start, you will need to download the second Python script posted by Brett Berger here. If you select an object (which can either be a true object or a constellation) in Golly and run this script, it will open the object's Catagolue page. You might instead want to use synthtools.py in Shinjuku to do the following process more quickly. More details about this will be given in "Using search programs to assist in creating syntheses".

Let's say you want to find a synthesis for block on down candlefrobra, which, according to Mark Niemiec's website, takes 12 gliders:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=10, y = 5, rule = B3/S23 4bo$2obob2obo$2obo3bobo$3bo4bo$3b2o! [[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Select the pattern in Golly and run the script mentioned above. It should bring you to this page on Catagolue. Scroll down to the part of the page with lots of differently coloured dots. These are all sample soups for the object. The black ones are asymmetric soups, which are the easiest to make syntheses from. (However, it should not be forgotten that you can still get good syntheses from symmetric soups -- especially if the object has the same type of symmetry as the soup.)

So click on the first asymmetric soup (the first black dot), and copy the RLE it provides into Golly. You should get this:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=16, y = 16, rule = B3/S23 ob2o3bo2bo2bobo$ob5ob3o2bobo$obobo4b2obo2bo$3b2o5b3obo$2bobo8b3o$bo2bo 4b5obo$4b6obo2b2o$obo2b2o2b4o$o2bob4obo3b2o$5b3o2bo3bo$6bob2ob2o2bo$2b 2ob5obob2o$4o3b2obobo2bo$ob3ob2obo3b2o$3b3ob5o2b2o$bo3b2obob2obo! [[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Now run the soup until the candlefrobra appears (this should happen at generation 919). Use the goto.py script (which comes with Golly) to go 20 generations back. Watch each generation up to the candlefrobra's formation step-by-step to see which objects react to make the candlefrobra. Next, go back 20 generations, select the objects that reacted to make a candlefrobra, and paste them into a new layer.

Test to see if that pasted pattern works. If it doesn't work, go back to the layer with the soup, and select and paste a larger area. Once you've deleted any objects that don't participate in the reaction, you should get something like this:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=11, y = 16, rule = B3/S23 9bo$8bobo$9b2o2$6bo$2o3bobo$2o2b2ob2o6$5bobo$4b3o$3b3o$3b2o! [[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

The reaction is pi + block + boat + traffic light --> candlefrobra + some junk. We know how to make all those reactants with gliders, so we can now make a synthesis! In fact, all of the reactants can be made in two gliders (those collisions can be found in two-glider-collisions.rle in Golly's pattern collection).

However, before you start, you may notice that not all of the blinkers in the traffic light react before making the candlefrobra. So maybe we don't need all of the blinkers. In fact, the only blinker we need is the top one. Try deleting the rest of the blinkers just before the traffic light first reacts. This isn't necessary, but to help your understanding, I've replaced the traffic light predecessor with one that only makes a blinker to get this:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=11, y = 19, rule = B3/S23 9bo$8bobo$9b2o2$6bo$2o3bobo$2o2b2ob2o8$5b2o$2b3obo$2b2o$2b2obo$3bobo! [[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Now there is also no junk left over after the synthesis, only the candlefrobra.

Now you can start the synthesis. To do this, you should synthesise each of the reactants separately in such a way that they work when put together. You can find all the syntheses you need for this in two-glider-collisions.rle. Try to do this yourself. If you can't manage to make it work using only 2-glider collisions, look in Mark Niemiec's website to find more useful syntheses.

If you need a hint, these are the syntheses I would use (zoomed out in case you don't want the hint):

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=35, y = 29, rule = B3/S23 bo26bo$2bo14bo11b2ob2o$3o13bobo9b2o2bobo$4bo12b2o13bo$3bo$3b3o8bo$8b2o 3bobo$8b2o2b2ob2o2$25b2o$24bobo$26bo2$27b2o$27bobo$13b2o12bo$10b3obo$ 10b2o$10b2obo$11bobo6$bobo$2b2o2b2o$2bo2b2o$7bo! [[ ZOOM -16 THEME 6 THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

If you used the hint, note that you may need to rewind some of the syntheses to make it work.

How did you go? If you created a synthesis with less than 12 gliders then congratulations, you would have created a record-breaking synthesis! For reference, this is the synthesis I created which used 8 gliders:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=17, y = 21, rule = B3/S23 9bobo$bo8b2o$2bo7bo3b3o$3o11bo$4bo10bo$3bo$3b3o2$7b2o$6bobo$8bo$2bo$ob o6b2o$b2o6bobo$9bo4$10b3o$10bo$11bo! [[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

In this example with the block on trans-candlefrobra, we were lucky to get a good reaction from the very first soup. Sometimes you will have to look through 20 or more soups before finding a suitable reaction.

If you want more practice for creating synthesis from a reaction, here is the reaction the current record holding synthesis of why not (7 gliders) was made with:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=22, y = 14, rule = B3/S23 17bo$16b3o$15b2ob2o$19b2o$19b3o$19b2o$10b3o2b2ob2o$2o8bobo3b3o$b2o7b3o 4bo$o3$12b2o$12b2o! [[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Good luck!

Using converters to make syntheses

Let’s say we want to make a synthesis for this 18-bit still-life:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=11, y = 6, rule = B3/S23 9bo$8bobo$2o2b2obobo$o2bobobo$2b2obobo$6bo! [[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

So we run the pattern-to-Catagolue script, and it brings us here But there (at the time of writing) are no Catagolue soups! So what can we do? It is time to be introduced to the world of converters…

A converter is a collision of gliders with a still-life/oscillator, which turns it into a new still-life/oscillator. Here is an example of a converter. It turns a hook into a barge:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=37, y = 11, rule = B3/S23 12bo$12bobo$5bo6b2o$3bobo$4b2o$bo26bo$b2o6b2o16bobo$obo7bo17bobo$9bo5b 2o12bo5b2o$10b3obobo13b3obobo$12b2o18b2o! [[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Converters are very useful for creating syntheses that are too large and/or rare to turn up on Catagolue. For example, the duodecapole currently has no appearances on Catagolue, but we can still create a synthesis from a barberpole-lengthening converter and an already known synthesis for the decapole like this:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=113, y = 33, rule = B3/S23 26bo$27b2o15bo$26b2o16bobo$44b2o38bo$82bobo6bo$2bo80b2o4b2o5bo$obo83bo 3b2o2b2o$b2o83b2o7b2o$85bobo$26bobo$26b2o63b2o$27bo63bo$59bo32bobo$23b obo32bo$24b2o5bobo24b3o33bobo$24bo7b2o$32bo9bo53bobo$41b2o7bo$14b3o24b obo5b2o47bobo$16bo32bobo$15bo84bobo$47bo55bo$47b2o53b2o$46bobo$107bobo $72b2o24b2o7b2o$72bobo24b2o2b2o3bo$72bo25bo5b2o4b2o$103bo6bobo$29b2o 79bo$28bobo16b2o$30bo15b2o$48bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Here are three places you will find converters:

  • Martin Grant’s collection (also includes some components taken from Shinjuku)
  • Bob Shemyakin’s collection (less comprehensive, but has the advantage that components are sorted by both glider cost and change in population)
  • Various places in the forums

So with this new knowledge, back to synthesising the 18-bit still life:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=11, y = 6, rule = B3/S23 9bo$8bobo$2o2b2obobo$o2bobobo$2b2obobo$6bo! [[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

So what could we convert that from? We could convert it from the equivalent with a snake instead of a carrier, but I would convert it from the equivalent with a hook instead of a tub, because it is more likely to have more soups on Catagolue, and the corresponding converter is cheaper:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=20, y = 12, rule = B3/S23 10bo$8bobo$9b2o$15bo$13b2o$14b2o$17b2o$9b2o6bobo$b2o2b2obobo6bo$bo2bob obo$3b2obobo$7bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Now, when we go to the Catagolue page of the still-life with the hook, we find it has lots of soups (at the time of writing it is 43!)

So let’s try the first soup:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=16, y = 16, rule = B3/S23 o4b2o5b2o$ob4o2bobo3bo$5bo6bob2o$bob3o6b2obo$obo2bobobo2bo$ob2o2bo3b4o bo$o2bobobobo3bobo$2b2ob4ob2o2b2o$bo3bobobobo$5o2b2obobo2bo$o6b3o2b2o$ 2o3bo3b2obo2bo$o3b3o4bo2bo$o3bobob3o2bo$b3ob3o2b2ob3o$ob4ob4obobo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

The soup reduces to this predecessor:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=19, y = 25, rule = B3/S23 9b2o$8bo2bo$9bobo$10bo2$17b2o$17b2o2$13bo$12bobo$12bobo$13bo2$11bo$10b 3o$9b2ob2o$10b3o$11bo$5b2o$4bo2bo$4bobo$5bo2$2o$2o![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

But before we start the synthesis, there are a few clever tricks we can do that will reduce the overall synthesis. The block only acts as cleanup, so perhaps it can be replaced with a glider:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=23, y = 34, rule = B3/S23 13b2o$12bo2bo$13bobo$14bo2$21b2o$21b2o2$17bo$16bobo$16bobo$17bo2$15bo$ 14b3o$13b2ob2o$14b3o$15bo$9b2o$8bo2bo$8bobo$9bo10$2o$b2o$o! [[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

1 glider less. The loaf only partly reacts before being separated from the rest of the reaction, so maybe it can be substituted with a glider. Also, the glider that we replaced a block with actually is only acting as cleanup for the loaf’s reaction, so if we replace the loaf with a glider in the right way, the other glider can be removed. Unfortunately, the loaf can’t be replaced by 1 glider, but replacing it with 2 gliders still reduces the cost:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=18, y = 34, rule = B3/S23 8b2o$7bo2bo$8bobo$9bo2$16b2o$16b2o2$12bo$11bobo$11bobo$12bo2$10bo$bo7b 3o$2bo5b2ob2o$3o6b3o$10bo14$16b2o$15b2o$17bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

2 gliders less. But we can do even more! Often it is possible to synthesise two nearby objects at once, instead of separately, to achieve a cheaper cost in gliders. In this example, the beehive and the traffic light can be made together in a 3-glider synthesis, instead of using 4 gliders to synthesise them separately. (More details on how these are found in a later tutorial.)

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=9, y = 8, rule = B3/S23 4bo$4bobo$4b2o$2bo$obo$b2o4b2o$6b2o$8bo! [[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

3 gliders less! See if you can complete the synthesis of the 17-bit still-life from there…


…How did you go? This is the 11 glider synthesis I got:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=64, y = 75, rule = B3/S23 39bobo$39b2o$40bo27$18bo$16bobo$17b2o$31bo$18b3o10bobo$18bo12b2o$19bo$ 23bobo$bo21b2o$2bo21bo$3o10bobo12b2o$14b2o12bobo$14bo13bo6$26b2o$26bob o$26bo16$61b2o$61bobo$61bo5$34b2o$33b2o$35bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Now all we need to do to complete the synthesis of the 18-bit still-life is to add the converter:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=139, y = 75, rule = B3/S23 39bobo$39b2o$40bo27$18bo$16bobo$17b2o$31bo$18b3o10bobo$18bo12b2o$19bo 87bo$23bobo79bobo$bo21b2o81b2o$2bo21bo87bo$3o10bobo12b2o80b2o$14b2o12b obo80b2o$14bo13bo85b2o21bo$75b2o29b2o6bobo19bobo$67b2o2b2obobo21b2o2b 2obobo6bo13b2o2b2obobo$67bo2bobobo23bo2bobobo22bo2bobobo$69b2obobo25b 2obobo24b2obobo$73bo30bo29bo$26b2o$26bobo$26bo16$61b2o$61bobo$61bo5$ 34b2o$33b2o$35bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

And we’re done! We successfully created a 14 glider synthesis of a still-life with no appearances on Catagolue, by constructing it from another still-life which did have appearances on Catagolue.

If you want more practice at using converters and Catagolue to find syntheses, try finding a synthesis for this still-life:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=9, y = 10, rule = B3/S23 2o$obo$3bo3bo$4bobobo$5b2obo$7bo$5b2o$5bo$6bo$5b2o! [[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Converters are used in many others ways than just assisting soup search result-based syntheses. They are used a lot in the syntheses of difficult objects like billiard tables and spaceships. For example, this is the current best weekender synthesis as of August 2019 (79 gliders):

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=659, y = 46, rule = B3/S23 635bo$633bobo$634b2o$271bo372bo$272b2o369bo$46bo70bobo151b2o370b3o 10bo$47b2o69b2o534b2o$46b2o70bo160bo375b2o$277b2o360bo5bo$53bo7bo 117bo92bo5b2o96bo260bobo6bo$51bobo6bo119bo92b2o99b2o252bo9b2o4b3o$ 52b2o6b3o4bobo108b3o91b2o101b2o252b2o$obo54bo9b2o160bo155bo242b2o$ b2o52b2o11bo68bo44bo47b2o153bobo$bo54b2o77b2o44bo47b2o154b2o$126bo bo7b2o43b3o140b2o49b2o$62b3o61b2o104bo41bo50bo50bo248bo$62bo56b2o 6bo99bo4bobo38bobo48bo50bo6bo240b2o$10bobo36bo13bo51b2obobo51b2ob 2o46b2obobo3b2o35b2obobo8bo36b2obo47b2obo7bobo39b2ob2o11bo38b2ob2o 38b2ob2o46b2ob2o46b2o12b2ob2o14b2o$11b2o35bobo50bo12bobobo52bobob 2o3b2o40bobob2o40bobob2o9bobo33bobob2o8bobo34bobob2o6b2o39bobobobo b2o6bo38bobobobob2o33bobobobob2o41bobobobob2o55bobobobob2o9b2o$11b o36bobo5b2o44b2o10bobobo52bobo5bo2bo39bobo43bobo12b2o34bobo11b2o 35bobo3bo9b2o35bobo3bobo7b3o36bobo3bob2o33bobo3bob2o41bobo3bob2o 55bobo3bob2o11bo$47b2ob2o3b2o44b2o10b2obob2o10bobo37b2obob2o3b2o4b 3o32b2obob2o39b2obob2o5b2o37b2obob2o4b2o3bo34b2obob2o10bobo33b2obo bobobobo43b2obo3bo35b2obo3bo43b2obo3bo46bo10b2obo3bo$4bo43bobo6bo 56bobo13b2o36bo2bobob2o9bo32bo2bobobobo3b2o31bo2bobobobo4bobo34bo 2bobobo5bobo35bo2bobobo11bo33bo2bobob2o3b2o41bo2bobobobo33bo2bobob obo41bo2bobobobo46b2o7bo2bobobobo$4b2o42bobo63bobo14bo36b2o2bo14bo 31b2o2bo3bo4bobo30b2o2bo3bobo3bo36b2o2bo3bo4bo37b2o2bo3bo44b2o2bo 13bo36b2o2b2ob2o34b2o2b2ob2o42b2o2b2ob2o14bo31bobo7b2o2b2ob2o$3bob o43bo51b2o12bo10b2o104bo41bo50bo9b2o39bo59b2o152b2o$9b3o88bobo23bo bo52b3o140b2o8b2o39b2o60b2o34bo61bo55b2o$11bo90bo4bo18bo54bo47b2o 105bo137bo43b2o13b2o34b2o11bo51b2o11bo$10bo96b2o73bo47b2o240b3o3bo 39bobo13b2o33bobo10b3o49bobo10b3o4b3o$106bobo120bo247b2o40bo50bo 14bo49bo14bo3bo$178b3o91b2o101b2o59b3o38bobo104b2o63bo5bo$15bo96b 2o66bo92b2o99b2o44b2o8b2o4bo99b2o111b2o$13b2o98b2o64bo92bo5b2o96bo 42bobo7b2o6bo98bobo99b2o$9bo4b2o96bo164b2o142bo9bo104bo100bobo$9b 2o268bo307b3o36b2o11bo$8bobo105b2o308b2o159bo39b2o$116bobo152b2o 152bobo160bo37bo$116bo155b2o153bo155b3o51bo5b3o$271bo313bo50b2o5bo 9bo$584bo51bobo5bo7b2o$652bobo$428b3o$428bo214bo$429bo213b2o$631b 2o9bobo$632b2o$631bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 WIDTH 1280 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Using search programs to assist in creating syntheses (incomplete)

3-glider collision database

For this part of the tutorial, you will need to use Python scripts with Golly.

synthesise-constellation.py

Below is a 25-glider synthesis of lightweight emulator:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=163, y = 51, rule = B3/S23 71bo$47bobo19bobo$48b2o20b2o$48bo30bo$79bobo$79b2o18bo$99bobo$63bo6bo 28b2o$49bo12bo5b2o$50b2o10b3o4b2o$49b2o2$92bobo$92b2o$3bobo87bo$3b2o 146b2o2b2o2b2o$4bo70b2o74bo2b4o2bo$bo73b2o75b8o$b2o146b3o8b3o$obo146bo 2bo6bo2bo$150b2o8b2o$93b2o$93bobo$93bo10bo$103b2o$46bobo54bobo$47b2o$ 47bo10bo$56bobo$57b2o$150b2o8b2o$3bobo143bo2bo6bo2bo$3b2o144b3o8b3o$4b o70b2o75b8o$bo73b2o69b2o3bo2b4o2bo$b2o142bobo3b2o2b2o2b2o$obo55bo88bo$ 58b2o$57bobo2$101b2o$81b2o4b3o10b2o$82b2o5bo12bo$51b2o28bo6bo$50bobo$ 52bo18b2o$70bobo$72bo30bo$80b2o20b2o$80bobo19bobo$80bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Notice that in the first step, two blocks are created using a total of four gliders. This may be the most obvious way to synthesise them, but is it the cheapest?

This is where 2718281828's 3G collision database comes in. It contains ~460,000 different three-glider collisions and the objects/constellations they produce, and includes a Python script created by Goldtiger997 to search through the database. Download the three files and place them somewhere convenient, preferably your Scripts\Python folder. In Golly, paste the desired constellation into a new layer and run synthesise-constellation.py. If there are any collisions in the database that produce the same objects in the same positions relative to each other, they will all be displayed.

Let's try this with our two-block constellation. After running the script, we get this:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=268, y = 36, rule = B3/S23 2bo61bo35bo67bo44bo36bo$obo61bobo34b2o63b2o46b2o35b2o$b2o61b2o34b2o65b 2o44b2o35b2o2$218bo36bo$216b2o35b2o$217b2o35b2o17$111bo39bo$112bo39bo$ 13bo37bo58b3o37b3o$14bo37bo$12b3o35b3o62bo39bo$113b2o38b2o$114b2o38b2o $13b2o36b2o$13bobo35bobo$13bo37bo$201bo64bo$201b2o62b2o$200bobo62bobo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

All six of these collisions work in essentially the same way, by colliding a glider with a pi-heptomino. Since the two blocks are the first step of our lightweight emulator synthesis, we don't have to worry about other nearby objects interfering, so any of these will be suitable. In other cases, you may have to try several of these collisions before finding one that works for the synthesis you're working on.

Now that we have a three-glider collision of the two blocks, our lightweight emulator synthesis has been reduced to 24 gliders, which is currently the cheapest known as of the time of writing:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=167, y = 47, rule = B3/S23 87bo$66bo21b2o$64bobo20b2o$65b2o26bo$91b2o$92b2o19bo$111b2o$82bo 29b2o$67bo7bobo3bo$68bo6b2o4b3o$66b3o7bo2$105bo58bo$105bobo43b2o2b 2o2b2o3bobo$90b2o13b2o44bo2b4o2bo3b2o$90b2o60b8o$149b3o8b3o$106b2o 41bo2bo6bo2bo$105b2o43b2o8b2o$107bo8b2o$116bobo$116bo$o$b2o3bo$2o 3b2o$5bobo57bo$63bobo$64b2o8bo$75b2o73b2o8b2o$74b2o73bo2bo6bo2bo$ 149b3o8b3o$90b2o60b8o$75b2o13b2o59bo2b4o2bo$74bobo74b2o2b2o2b2o$ 76bo$31b2o$30b2o73bo7b3o$32bo65b3o4b2o6bo$100bo3bobo7bo$68b2o29bo$ 69b2o$68bo19b2o$89b2o$88bo26b2o$93b2o20bobo$92b2o21bo$94bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Note: As of April 2020, a new version of this script is available which contains a subset of four-glider collisions in addition to the two- and three-glider collisions. The installation instructions are the same; just make sure to copy both the 3G and 4G files. If your three-glider search gives no results, try this search instead. The collisions are also laid out in a grid instead of a line in this version.

synthesise-patt.py - synthesising active objects

synthesise-patt.py uses the same database as synthesise-constellation, but is instead used to synthesise unstable objects and is therefore more useful when multiple things are happening during a given synthesis step. It can be found here. Like before, place the three files in your Scripts\Python folder.

Let's start with a 7-glider bridge snake component, taken from Mark Niemiec's database:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=22, y = 22, rule = B3/S23 5bob2o$5b2obo2$10bo$10bo8bobo$10bo8b2o$20bo2$17b2o$16b2o$18bo5$3o16b2o $2bo16bobo$bo17bo2$3b3o$5bo$4bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

In generation 25, we can see the following unstable object, created from a blinker and two gliders, for 4 gliders total:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=6, y = 2, rule = B3/S23 3o$3b3o![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Let's see if there's a way to make this object with only 3 gliders, and therefore the bridge snake component in 6 gliders. Place it into a new layer and run the script; if it's running correctly you should see something like "X collisions found, Y collisions tried" in the top left of Golly. After a few seconds, you should see a list of all syntheses whose population counts over time match that of the given object. For this object in particular, you should see these six syntheses:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=382, y = 14, rule = B3/S23 4bo70bo74bo81bo67bo77bo$5bo70b2o73b2o80bo67b2o73b2o$3b3o69b2o73b2o79b 3o66b2o75b2o$155bo$79bo75b2o147bobo74bo$2o77b2o73bobo76b3o68b2o73b2o$b 2o75bobo154bo69bo74b2o$o158b2o64bobo6bo74b2o65bo$158b2o66b2o80b2o67bo$ 160bo65bo83bo64b3o$7b2o$7bobo67b3o$7bo69bo$78bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Now comes the fun part: determining which, if any, of these is suitable for our bridge snake component. In most cases, collisions where gliders come from only two directions perpendicular to each other tend to be the most likely to work, but in this case I found that the third one from the left seemed promising:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=10, y = 11, rule = B3/S23 obo$b2o$bo2$4b2o$5b2o$4bo2$8bo$7b2o$7bobo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Mirroring this horizontally, we can see that it seems to fit in well with the snake, as all three gliders come from the other three directions:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=15, y = 11, rule = B3/S23 12bobo$ob2o8b2o$2obo9bo2$9b2o$8b2o$10bo2$6bo$6b2o$5bobo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 STOP 13 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Now we can paste in the other three gliders, and rewind them a few generations so they show up at the correct time, and our 6G component is complete:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=17, y = 20, rule = B3/S23 14bobo$2bob2o8b2o$2b2obo9bo2$11b2o$10b2o$12bo2$8bo$8b2o$7bobo3$3o10b2o $2bo10bobo$bo11bo2$3b3o$5bo$4bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

When choosing a generation on which to run the script, it's often a good idea to pause just before the object begins to interact with other stuff, so you get as many potentially useful collisions as possible. However, if you run the script and it gives you several hundred collisions producing irrelevant objects, you may want to consider rewinding a few generations so that the script searches for a more specific population sequence and is therefore more likely to give the pattern you want.

collisrc.py

For this part of the tutorial, you will need to first install lifelib. If you already have apgsearch, you can use the filepath to your apgmera\lifelib folder to run this script.

Aidan F. Pierce's collisrc.py (short for "collision search") script randomly collides gliders with a given still life and records any interesting still lifes it finds, and is primarily designed to find new or reduced components. The latest version can be found here, and a list of search parameters can be found here. You can also try out Alex Greason's version of the script which relies on Shinjuku and runs on large numbers of still lifes, trying a set number of collisions for each one.

(rest of tutorial coming soon)

assisted cleanup

Sometimes the reaction involved in a synthesis produces not only the target product but also some leftovers. For instance, a 20-bit still life appears in the following reaction:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>39bo$38bo$38b3o8$31b2o$30bo2bo45bo$22b2o7b2o46bo$21bo2bo54bo$22b2o10bo $33b2o39b2o$33bobo38b2o3$77b2o$76bo2bo$76bo2bo$17b2o47bo2bob2o4b2o$16b o2bo46b5obo$17b2o3b2o$21bo2bo43bob5o$22b2o38b2o4b2obo2bo$61bo2bo$61bo 2bo$62b2o3$5bobo57b2o$6b2o57b2o$6bo10b2o$16bo2bo41bo$8b2o7b2o42bo$7bo 2bo50bo$8b2o8$3o$2bo$bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

To make a synthesis from it, you need to get rid of the surrounding objects with extra gliders. But where should they go? Well, there are a couple of handy programs that can help you out.

glider-destruction.py

For this part of the tutorial, you will need to use Python scripts with Golly.

An easy way to locate the cleanup gliders is to apply gameoflifeboy's glider-destruction.py (see here). Given a pattern, the script attempts to find a clean 1-glider destruction for it; if there isn't one, it tells you the results with minimum bounding box and population. As usual, save the script in Scripts\Python folder.

Since the pattern is rotationally symmetric, considering one half is enough. Select the upper right constellation and copy it to a new pattern:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>5bo$5bo$5bo2$2o$2o3$3b2o$2bo2bo$2bo2bo$3b2o![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Run the script and — presto! It gives a solution:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>5bo$5bo$5bo2$2o$2o3$3b2o$2bo2bo$2bo2bo$3b2o$8b2o$8bobo$8bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Pasting it back, we find that it is compatible with the target still life. So the cleanup is done successfully:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>23bo$23bo$23bo2$18b2o$18b2o3$21b2o$20bo2bo$20bo2bo$10bo2bob2o4b2o$2bo 7b5obo9b2o$obo23bobo$b2o9bob5o7bo$6b2o4b2obo2bo$5bo2bo$5bo2bo$6b2o3$9b 2o$9b2o2$5bo$5bo$5bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

However, it should be noted that we are lucky in this case. The results from the script is not guaranteed to be actually usable, as either the glider or the cleaning reaction may crash into the target. Besides, the suggested method is not always the most efficient if there isn't a clean 1-glider destruction.

Seeds of Destruction Game
Also see: Tutorials/Seeds of Destruction Game

For this part of the tutorial, you will need to install Java.

Seeds of Destruction Game is an interactive application that allows one to modify a pattern by hovering the mouse around and see the effects immediately. Basically the idea is simple — put a glider somewhere manually, observe and repeat — but what is italicized makes the trial-and-error process easier.

A brief summary of the procedure, for those who don't bother to read another tutorial:

  1. Copy the pattern to be cleaned to clipboard.
  2. In Seeds of Destruction Game, click the third button from below when its label reads "Puzzle". (If instead it reads "Seed", use mouse wheel to change.) This loads the pattern to the application and creates a new "Puzzle (something)" entry on the right.
  3. Ensure that the first button from above is labelled as "Glider" (if not, use mouse wheel again to change). Adjust the orientation and parity of the glider shown in the second button by rolling mouse wheel.
  4. Click somewhere to lay down the glider and observe how the pattern evolves by rolling mouse wheel on the "Start" and "Gens" buttons. If the result is not satisfying, click the "Puzzle (something)" entry on the right to reset and start a new attempt.
  5. Upon obtaining a good result, click the fifth button from above. This loads the current pattern to clipboard in LifeHistory RLE format (if the label shows "Golly") or in plain two-state RLE format ("Life").

With Seeds of Destruction Game, it is even possible to suppress debris by throwing a glider into the active soup. In the following synthesis for a variant of gray counter, the uppermost glider was found in this way, which tamed quite a lot of mess:

<html><div class="rle"><div class="codebox"><div style="display:none;"><code></html>x=114, y = 79, rule = B3/S23 60bobo$61b2o$61bo48$96bo$94bobo$95b2o$101bo$101bobo$101b2o$88bobo$89b 2o$89bo2$91bo$91bobo6bobo$91b2o7b2o$101bo5$27bobo$6bobo18b2o$6b2o20bo$ bo5bo81b2o$2bo86bobo$3o25b2o60b2o$27b2o82b3o$29bo56b2o$3b2o80bo2bo$3bo bo80bobo$3bo83bo![[ THEME 6 GRID THUMBNAIL THUMBSIZE 2 ]]<html></code></div></div><canvas width="200" height="300" style="margin-left:1px;"><noscript></html>
Please enable Javascript to view this LifeViewer.
<html></noscript></canvas></div></html>

Submitting syntheses to Catagolue

Once you've completed a new record-breaking synthesis for a still life, oscillator, or spaceship, you can add it to the object's Catagolue page by pasting the RLE into the submission box at the bottom of the "Syntheses" page. There are some important things to note about how to format the pattern in order for it to be interpreted correctly:

  • The rule must be either B3/S23 or LifeHistory (in the latter case only states 0 and 1 are allowed).
  • The pattern must not exceed a bounding box of 9999×9999, a population of 100,000, or a file size of 400 kilobytes.
    • Note that this restriction is in place to prevent the queue of user-submitted synthesis components from exceeding the object size limit of one megabyte. If you wish to submit more than about a megabyte of syntheses at a time, you're probably better off submitting a merge request to Shinjuku containing a .sjk file of your syntheses so that it doesn't exceed the size limit.
  • xWSSes are allowed to substitute for gliders, and Shinjuku will automatically attempt to convert them into their respective three-glider collisions. However, because the conversions all happen at the same time, the resulting synthesis may not be valid due to gliders crossing paths, and the conversion must instead be done manually.[1]
  • Each individual step, including the gliders/xWSSes, must be separated by at least 20 empty rows/columns.
  • It is recommended that every glider/xWSS should begin interacting before generation 1000 if possible, and each step should overall stabilize by generation 4000. If Catagolue does not parse your synthesis properly, there's unfortunately not much that can be done about it other than posting it somewhere else (e.g. the forums or Discord).
  • The initial pattern in each step must match the resulting pattern of the previous step (though rotations/reflections are allowed).
  • Although the synthesis RLEs on Mark Niemiec's website have the final object displayed next to the synthesis for each individual step, these are technically redundant and should be removed from the pattern when submitting to Catagolue.

When you submit, your RLE is added to a queue to be processed by the automatic update process, which runs every 8 hours. If you're not sure whether your synthesis is on Catagolue yet, you can check the "Jobs" page on the Catagolue repository, particularly the jobs named shinjuku, to see the console output for the update process. Djikstra's algorithm is used to calculate the shortest path to the desired object using the known components, so you may find that earlier steps of your synthesis have been replaced by an already-known cheaper way of producing the same intermediate object.

Also, if you're submitting a new or newly-improved component to Catagolue, don't worry about manually applying it to every single possible object in the database, because Shinjuku's transfer.py does this automatically. The script has to be invoked manually, but as long as there's at least one synthesis featuring your component, the script will consider it when automatically creating new syntheses. Do note, however, that it will only attempt to synthesise objects that either already have a synthesis or are strict still lifes with 20 bits or less; in other cases you may want to consider submitting the synthesis yourself.[note 1]

Notes

  1. Other transfer.py runs have targeted objects constructible through intermediate components[2] and large objects which have appeared at least once in an apgsearch soup.[3]
gollark: Yes, 7 is *the* ISO standard random number.
gollark: We have exactly 7 datas.
gollark: > who even uses IQ anymore lolIt actually is correlated with various significant things.
gollark: It's vaguely "correct" given that it's derived from Latin "datum", but no.
gollark: Unfortunately, LyricLy, *most* people use "data" as a plural. It is somewhat bees, but alas.

References

  1. Ian07 (March 9, 2020). Re: Shinjuku: a database of glider syntheses (discussion thread) at the ConwayLife.com forums
  2. Adam P. Goucher (October 13, 2019). "level-2 and level-3 transfer searches". GitLab.
  3. Alex Greason (June 9, 2020). "Transfer run targeting all still lives with at least one soup in an official symmetry but no synthesis". GitLab.

Forum threads

Code repositories

This article is issued from Conwaylife. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.