ConwayLife.com - A community for Conway's Game of Life and related cellular automata
Home  •  LifeWiki  •  Forums  •  Download Golly

15 in 15: Efficient 15-bit Synthesis Project (DONE!)

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

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby chris_c » November 22nd, 2016, 10:51 am

I am attaching a Golly script that can hopefully display an incremental synthesis of any 15 bit still life in less than 15 gliders. Save display_synth.txt and min_paths.txt in the same directory. I can't upload files with extension ".py" so rename display_synth.txt to display_synth.py. Select a still life or oscillator in Golly and run the script (making no selection is equivalent to selecting the entire universe). An incremental synthesis of the object will hopefully be displayed in a new layer.

It should always work for still lifes of 15 bits or less. In general, there is nothing stopping the script working for oscillators but min_paths.txt only knows about objects that are on an optimal route from an empty universe to some 15 bit still life. For example, I think it knows how to build blinkers, traffic lights, toads and beacons but not much else.

Also attached is a list of all 15-bit or fewer still lifes sorted by glider cost. The glider costs may differ from glider costs according to Bob or Mark for the following reasons:

1. I have added my 3 glider tail adder for all still lifes up to 15 bits.

2. My code has found a better route that was missed by humans.

3. The best synthesis of an object according to Bob's collection uses *WSS which my analyser does not understand.

4. A synthesis in Bob's database was not accepted by my code for some other reason.

5. Bugs in my code.

If anyone sees anything belonging to categories 3, 4 and 5 please post to explain.

Note that the steps in the displayed syntheses may have the inputs and outputs in different phases and orientations. There is enough information contained in min_paths.txt to address this but I was too lazy too work out the details.
Attachments
summary.txt
Table of still lifes sorted by glider cost
(91.26 KiB) Downloaded 49 times
min_paths.txt
Shortest-path tree for glider construction for 15-bit still lifes
(195.18 KiB) Downloaded 49 times
display_synth.txt
Rename to display_synth.py
(7.44 KiB) Downloaded 53 times
chris_c
 
Posts: 719
Joined: June 28th, 2014, 7:15 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby dvgrn » November 22nd, 2016, 1:32 pm

chris_c wrote:I am attaching a Golly script that can hopefully display an incremental synthesis of any 15 bit still life in less than 15 gliders...

Wow. Worked perfectly when I tried several random spot checks.

How exactly do you handle cases where what would otherwise be the cheapest possible synthesis of a component still life can't be used because another component has to be constructed first, and it's in the way? Looks like that's all buried in min_paths.txt, since there's not a whole lot of complicated logic in the script. I haven't investigated any farther than that yet.
dvgrn
Moderator
 
Posts: 3700
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby chris_c » November 22nd, 2016, 2:22 pm

dvgrn wrote:Wow. Worked perfectly when I tried several random spot checks.

How exactly do you handle cases where what would otherwise be the cheapest possible synthesis of a component still life can't be used because another component has to be constructed first, and it's in the way? Looks like that's all buried in min_paths.txt, since there's not a whole lot of complicated logic in the script. I haven't investigated any farther than that yet.


Yes, as you noted, the code to display the synthesis is not at all clever. The file min_paths.txt contains lines of the form <start apgcode>;<end apgcode>;<data for glider synthesis>. For every object that the script knows how to synthesise there should be precisely one line in min_paths.txt that has the matching <end apgcode>. The script just finds the correct line and then steps backwards until (hopefully) we are at an empty universe.

The analysis code (which I haven't yet posted) knows nothing about "components". You need to pass in separate instantiations of every single version of a particular component. e.g. rle for "add tail to tub", "add tail to up boat", "add tail to down boat", "add tail to up barge", etc, etc, etc... I wrote some horribly slow python code that does this reasonably automatically.

The analyser script will analyse each without realising that there is any relation between them. It just checks each for correctness and puts them into a big list of known reactions. Finally I have some code that takes the big list of known reactions and whittles it down to the minimum version I posted above.

It's all a bit ad-hoc but already an improvement over doing these things manually.
chris_c
 
Posts: 719
Joined: June 28th, 2014, 7:15 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby chris_c » November 27th, 2016, 3:12 pm

I put updated versions of display_synth.py and min_paths.txt up on github. The new display script is posted below. It is the same as the old version except that it downloads min_paths.txt from the web if it doesn't find it in the current directory.

import golly as g
import os
from urllib2 import urlopen

URL = "http://raw.githubusercontent.com/ceebo/glider_synth/master/min_paths.txt"

GLIDERS = [(g.parse("3o$2bo$bo!", -2, 0), 1, -1),   #NE
           (g.parse("bo$2bo$3o!", -2, -2), 1, 1),   #SE
           (g.parse("bo$o$3o!", 0, -2), -1, 1),     #SW
           (g.parse("3o$o$bo!", 0, 0), -1, -1)]     #NW

def place_gliders(glider_lists, t):

    for (glider, vx, vy), glider_list in zip(GLIDERS, glider_lists):
       
        for lane, timing in glider_list:

            phase = (t + timing) % 4
            d = (t + timing) // 4

            g.putcells(g.evolve(glider, phase), lane + d * vx, d * vy)

def display_edge(edge):

    input_code, output_code, phase, glider_lists, transform = edge

    g.putcells(decodeCanon(input_code))
   
    output_cells = decodeCanon(output_code)
    output_cells = g.evolve(output_cells, phase)
    output_cells = g.transform(output_cells, *transform)
   
    g.putcells(output_cells, 100, 0)

    place_gliders(glider_lists, 0)

def edge_cost(edge):
   
    _, _, _, glider_lists, _ = edge
    return sum(len(l) for l in glider_lists)

def edge_from_string(s):

    t = s.split(";")

    glider_lists = []
    for gliders_string in t[3:7]:
        glider_list = []
        if gliders_string:
            gs = gliders_string.split(",")
            for i in range(0, len(gs), 2):
                glider_list.append((int(gs[i]), int(gs[i+1])))
        glider_lists.append(glider_list)

    transform = tuple(map(int, t[7].split(",")))

    return (t[0], t[1], int(t[2]), glider_lists, transform)   

def display_synthesis(apgcode):

    found = True
    cost = 0

    while found and apgcode != "0":
        found = False
        with open("min_paths.txt") as f:
            for s in f:
                edge = edge_from_string(s)
                if edge[1] == apgcode:

                    # move everything down 100 cells
                    if g.getrect():
                        cells = g.getcells(g.getrect())
                        g.new('')
                        g.putcells(cells, 0, 100)
                   
                    display_edge(edge)
                   
                    # update cost and apgcode
                    apgcode = edge[0]
                    cost += edge_cost(edge)

                    found = True
                    break

    g.fit()

    if not found:
        return "Don't know how to synthesise %s" % apgcode

    if apgcode == "0":
        return "Cost %d gliders " % cost

# Obtains a canonical representation of any oscillator/spaceship that (in
# some phase) fits within a 40-by-40 bounding box. This representation is
# alphanumeric and lowercase, and so much more compact than RLE. Compare:
#
# Common name: pentadecathlon
# Canonical representation: 4r4z4r4
# Equivalent RLE: 2bo4bo$2ob4ob2o$2bo4bo!
#
# It is a generalisation of a notation created by Allan Weschler in 1992.
def canonise(duration):

    representation = "#"

    for _ in range(duration):
       
        g.run(1)
        rect = g.getrect()

        if len(rect) == 0:
            return "0"

        if ((rect[2] <= 40) & (rect[3] <= 40)):
            # Fits within a 40-by-40 bounding box, so eligible to be canonised.
            # Choose the orientation which results in the smallest description:
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0], rect[1], 1, 0, 0, 1))
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0]+rect[2]-1, rect[1], -1, 0, 0, 1))
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0], rect[1]+rect[3]-1, 1, 0, 0, -1))
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0]+rect[2]-1, rect[1]+rect[3]-1, -1, 0, 0, -1))
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0], rect[1], 0, 1, 1, 0))
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0]+rect[2]-1, rect[1], 0, -1, 1, 0))
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0], rect[1]+rect[3]-1, 0, 1, -1, 0))
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0]+rect[2]-1, rect[1]+rect[3]-1, 0, -1, -1, 0))
       
    if representation == '#':
        prefix = ""
    elif duration == 1:
        prefix = "xs%d_" % int(g.getpop())
    else:
        prefix = "xp%d_" % duration

    return prefix + representation

# A subroutine used by canonise:
def canonise_orientation(length, breadth, ox, oy, a, b, c, d):

    representation = ""

    chars = "0123456789abcdefghijklmnopqrstuvwxyz"

    for v in xrange(0, breadth, 5):
        zeroes = 0
        if (v != 0):
            representation += "z"
        for u in xrange(length):
            baudot = 0
            for w in xrange(v, v+5):
                x = ox + a*u + b*w
                y = oy + c*u + d*w
                baudot = (baudot >> 1) + 16*g.getcell(x, y)
            if (baudot == 0):
                zeroes += 1
            else:
                if (zeroes > 0):
                    if (zeroes == 1):
                        representation += "0"
                    elif (zeroes == 2):
                        representation += "w"
                    elif (zeroes == 3):
                        representation += "x"
                    else:
                        representation += "y"
                        representation += chars[zeroes - 4]
                zeroes = 0
                representation += chars[baudot]
    return representation

# Compares strings first by length, then by lexicographical ordering.
# A hash character is worse than anything else.
def compare_representations(a, b):

    if (a == "#"):
        return b
    elif (b == "#"):
        return a
    elif (len(a) < len(b)):
        return a
    elif (len(b) < len(a)):
        return b
    elif (a < b):
        return a
    else:
        return b

chars = "0123456789abcdefghijklmnopqrstuvwxyz"

# Based on code by Arie Paap Sept. 2014
def decodeCanon(canonPatt):

    if not canonPatt or canonPatt[0] != 'x' or '_' not in canonPatt:
        return []
   
    blank = False
    x = y = 0
    clist = []
   
    for c in canonPatt[canonPatt.find("_")+1:]:
   
        if blank:
            x += chars.index(c)
            blank = False
        else:
            if (c == 'y'):
                x += 4
                blank = True
            elif (c == 'x'):
                x += 3
            elif (c == 'w'):
                x += 2
            elif (c == 'z'):
                x = 0
                y += 5
            else:
                v = chars.index(c)
                for i in range(5):
                    if v & (1 << i):
                        clist += [x, y+i]
                x += 1

    return clist

def get_period(max_period):
   
    cells = g.getcells(g.getrect())
    cells = zip(cells[::2], cells[1::2])

    for t in range(max_period):
       
        g.run(1)

        if int(g.getpop()) != len(cells):
            continue

        if all(g.getcell(x, y) for x, y in cells):
            return t + 1

    g.show("Not still life or oscillator")
    g.exit()

if os.path.exists("min_paths.txt"):
    message1 = "Read data from \"%s\"." % os.path.abspath("min_paths.txt")
else:
    g.show("Downloading min_paths.txt...")
    with open("min_paths.txt", "w") as f:
        f.write(urlopen(URL).read())
    message1 = "Downloaded data from \"%s\"." % URL

if g.getselrect():
    cells = g.getcells(g.getselrect())
elif g.getrect():
    cells = g.getcells(g.getrect())
else:
    g.show("Empty")
    g.exit()

g.addlayer()
g.new('')
g.putcells(cells)

apgcode = canonise(get_period(46))

g.new(apgcode)

message2 = display_synthesis(apgcode)

g.show(message1 + " " + message2)


Compared to the previous version of min_paths.txt there are improvements to 174 still lifes and 277 gliders saved in total. The majority of this is because I added many of the cheap-looking converters from Extrementhusiast's component collection.

Once I had done that I couldn't resist finding some synthesis improvements via Catagolue to make some nice new records. Specifically I found new syntheses for 10.15, 10.22, 12.51, 12.98 and 13.233:

x = 917, y = 331, rule = Life
829bo$827b2o$822bobo3b2o$822b2o$823bo5$597bobo$584bo12b2o$585b2o11bo$
584b2o$700b2o213bo$521bo177bo2bo211bobo$514b3o3bobo2b2o74b3o95bobo213b
2o$521bo2bo2bo73bo98bo$512bo5bo3b2o2b2o74bo87b2o215bo$512bo5bo171b2o
214bobo$512bo5bo388bo$409bo$410b2o102b3o$409b2o393bo$805b2o$214bo207bo
bo379b2o$213bo209b2o13bo467b2o$213b3o207bo14bobo464bobo$12bobo423b2o
383b3o78bo$2bo9b2o809bo81b2o2b2o$2bobo8bo810bo82bo2bo$2b2o903b2o$16bob
o$16b2o87b2o710b3o$17bo84bobo2bo404b2o303bo$102b2o2bobo403b2o304bo$2o
105bo$obo$o405b2o411b3o$197bobo8bobo194bobo411bo$15b2o181b2o8b2o101bo
95bo412bo$15bobo180bo10bo100bobo$7b2o6bo294bo2bobo111b2o$7bobo299b2o3b
2o110b2o$7bo420bo$441b2o$440b2o$442bo3$214bo$214bobo$214b2o2$217b2o$
217bobo$210b3o4bo$210bo$211bo35$390bo409bo$391bo91b2o316bo$389b3o90b2o
315b3o$484bo2$815bo$814bobo87b2o$815b2o86bobo$902bo$807bo95b2o2b2o$
806bobo96bo2bo$584bo222bo97b2o$582bobo$583b2o$616bo$390bo225bobo$391bo
224b2o$389b3o414b2o$805bobo$804bo$422bo382b2o2b2o$415b3o3bobo2b2o379bo
2bo$422bo2bo2bo378b2o$413bo5bo3b2o2b2o$413bo5bo$413bo5bo274b2o$693bo2b
o$415b3o276b2o8$507bo$506bobo2b2o192b2o$507bo2bo2bo190bo2bo$508b2o2b2o
190bobo$413b2o290bo$413b2o280b2o$611b2o82b2o$610bo2bo$610bobo$611bo$
601b2o$601b2o63$616bobo$616b2o$617bo10$699b2o$699b2o3$702b2o$593bo108b
2o$591bobo$592b2o$692b2o$691bo2bo$691bob2o$692bo$597b2o94bobo$596bo2bo
94b2o$597b2o102bo$697b2obobo$697b2obo2bo$701b2o6$608b2o$607bo2bo$607bo
bo$608bo$598b2o$598b2o49$610bo$609bo$609b3o7$592b2o$592b2o3$595b2o$
595b2o3$585b2o$584bo2bo$584bob2o$585bo$586bobo$587b2o$594bo$590b2obobo
$590b2obo2bo$594b2o5$696b2o$695bo2bo$695bob2o$696bo$697bobo$698b2o2$
580b2o$579bobo$581bo!


Now according to summary.txt all 10-bit still lifes can be made in 6 gliders, all 12-bit in 9 gliders and all 13-bit in 11 gliders.

I also cross checked the glider costs given on Mark Niemiec's website. The following still lifes are listed with a smaller cost than predicted by me: 13.45, 13.49, 13.110, 13.231, 14.177, 14.358, 14.576, 15.28, 15.126, 15.594, 15.682, 15.884, 15.1062, 15.1200, 15.1244, 15.1253, 15.1336. But (if I didn't make any mistakes) the smaller cost is not justified by the syntheses in the corresponding files. Typically this is because of miscounting the number of gliders or misidentification of an SL.
chris_c
 
Posts: 719
Joined: June 28th, 2014, 7:15 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby dvgrn » November 28th, 2016, 11:09 am

chris_c wrote:The analysis code (which I haven't yet posted) knows nothing about "components". You need to pass in separate instantiations of every single version of a particular component. e.g. rle for "add tail to tub", "add tail to up boat", "add tail to down boat", "add tail to up barge", etc, etc, etc... I wrote some horribly slow python code that does this reasonably automatically.

By "this" you mean auto-creating recipe RLE for "add tail to X" for every object that might be able to have a tail added to it?

Mark Niemiec's expert system seems to be able to run reports saying that ninety-x percent of N-bit still lifes "can be synthesized using standard techniques from smaller still-lifes". Does your "horribly slow" code get in the way of doing the same kind of thing in practice for larger N, and/or are there other roadblocks as well?
dvgrn
Moderator
 
Posts: 3700
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby chris_c » November 29th, 2016, 12:35 pm

dvgrn wrote:By "this" you mean auto-creating recipe RLE for "add tail to X" for every object that might be able to have a tail added to it?

Mark Niemiec's expert system seems to be able to run reports saying that ninety-x percent of N-bit still lifes "can be synthesized using standard techniques from smaller still-lifes". Does your "horribly slow" code get in the way of doing the same kind of thing in practice for larger N, and/or are there other roadblocks as well?


Yeah that's what I meant. The code for that part is at the bottom. Draw a converter using state 1 for the gliders and states 3 or 5 for the initial still life e.g. the 3G tail adder:

x = 24, y = 48, rule = LifeHistory
21.A$21.A.A$21.2A10$3.A$2.A$2.3A17$.C$C.C$.C12$3.3A$3.A$4.A!


Then run the script. It works out which cells must always be off (state 2), which cells from the initial still life must stay on (state 3) and which cells in the initial still life can be switched off (state 5). Then it asks for a filename prefix and the maximum population of the output still life.

When I run it on this example for populations 15, 16, 17 and 18 I get:

Population    Time taken       Output files
15               10s               158
16               29s               349
17               78s               796
18               216s              1837


The fact that the number of Output files per unit time is going down probably indicates that algorithmic improvements are possible. Also keeping track of live and dead cells using bitwise operations in C should be at least 100 times faster than using python sets.

But practically there is no immediate problem with moving on to 16 bit still lifes except for general trepidation...



import golly as g

deltas = [(1,0), (1,1), (0,1), (-1,1), (-1,0), (-1,-1), (0,-1), (1,-1)]

def cnt(x, y, cells):
    return sum((x+dx, y+dy) in cells for dx, dy in deltas)

def is_still(on_cells):
    boundary = set()
    for x, y in on_cells:
        pop = cnt(x, y, on_cells)
        if pop != 2 and pop != 3:
            return False
        for dx, dy in deltas:
            P = x+dx, y+dy
            if P in boundary or P in on_cells:
                continue
            boundary.add(P)
            pop = cnt(P[0], P[1], on_cells)
            if pop == 3:
                return False

    return True

# Define a cell as "interesting" if it is on or if it has at least 3
# live neighbors. This function returns True if the set of interesting
# cells is connected. So bi-blocks are semi-strict but tubs with
# offset (4,0) and blocks with offset (3,3) are not.
def is_semi_strict(cells):
   
    if not cells:
        return True

    for P in cells:
        break

    new_spread = set([P])
    spread = set([P])

    old_size = 0
    new_size = 1

    while new_size > old_size:

        next_spread = set()
        for x, y in new_spread:
            for dx, dy in deltas:
                if (x+dx, y+dy) in cells:
                    next_spread.add((x+dx,y+dy))
                else:
                    if cnt(x+dx, y+dy, cells) >= 3:
                        for ddx, ddy in deltas:
                            if (x+dx+ddx, y+dy+ddy) in cells:
                                next_spread.add((x+dx+ddx,y+dy+ddy))

        new_spread = next_spread
        spread.update(new_spread)

        old_size = new_size
        new_size = len(spread)

    return len(cells) == len(spread)
               
FILE_NUMS = 100 * [0]

def print_it():

    global FILE_NUMS, prefix

    cells = on_cells.union(data_cells)

    minx = min(x for x,y in cells)
    maxx = max(x for x,y in cells)
    miny = min(y for x,y in cells)
    maxy = max(y for x,y in cells)

    pop = len(on_cells)

    with open("%s%02d_%04d.lif" % (prefix, pop, FILE_NUMS[pop]), "w") as f:
        print >>f, "#P 0 0"
        for y in range(miny, maxy+1):
            print >>f, "".join(".*"[(x, y) in cells] for x in range(minx, maxx+1))

    FILE_NUMS[pop] += 1

def select_point(priority):

    #cells next to the priority cell
    if priority is not None:
        x, y = priority
        for dx in [-1,0,1]:
            for dy in [-1,0,1]:
                P = (x+dx, y+dy)
                if P not in on_cells and P not in off_cells:
                    return P

    #cells near any live cell
    for x, y in on_cells:
        for dx in [-1,0,1]:
            for dy in [-1,0,1]:
                P = (x+dx, y+dy)
                if P not in on_cells and P not in off_cells:
                    return P

    #cells that are distance 2 or sqrt(5) from a live cell
    for x, y in on_cells:
        for dx in [-2,-1,0,1,2]:
            for dy in [-2,-1,0,1,2]:
                if 4 <= dx*dx + dy*dy <= 5:
                    P = (x+dx, y+dy)
                    if P not in on_cells and P not in off_cells:
                        return P

    return None

def recurse(priority = None):

    global on_cells, off_cells, max_pop

    if len(on_cells) > max_pop:
        return

    if priority is not None:
        if priority in on_cells:
            if cnt(priority[0], priority[1], on_cells) >= 2:
                priority = None
        elif priority in off_cells:
            if cnt(priority[0], priority[1], on_cells) != 3:
                priority = None           

    boundary = set()
    for x, y in on_cells:
        if cnt(x, y, off_cells) >= 7:
            return
        c = cnt(x, y, on_cells)
        if c > 3:
            return
        if c < 2:
            if len(on_cells) + 2 - c > max_pop:
                return
            else:
                if priority is None:
                    priority = (x,y)
        for dx, dy in deltas:
            P = x+dx, y+dy
            if P in boundary or P in on_cells:
                continue
            boundary.add(P)
            if cnt(P[0], P[1], on_cells) == 3:
                if cnt(P[0], P[1], off_cells) == 5:
                    return
                if priority is None:
                    priority = P

    P = select_point(priority)

    if P is None:
        if is_still(on_cells) and is_semi_strict(on_cells):
            print_it()
    else:
        on_cells.add(P)
        recurse(priority)
        on_cells.remove(P)

        off_cells.add(P)
        recurse(priority)
        off_cells.remove(P)


on_cells = set()
data_cells = []

pat = g.getcells(g.getrect())

for i in range(0, len(pat)-2, 3):
    if pat[i+2] == 1:
        data_cells.append((pat[i], pat[i+1]))
    elif pat[i+2] == 3:
        g.setcell(pat[i], pat[i+1], 5)
        on_cells.add((pat[i], pat[i+1]))
    elif pat[i+2] == 5:
        on_cells.add((pat[i], pat[i+1]))
    else:
        g.setcell(pat[i], pat[i+1], 0)
       
start_pop = len(on_cells)

if start_pop == 0:
    g.exit("Use state 3 or 5 for the initial still life")

if len(data_cells) == 0:
    g.exit("Use state 1 for the gliders")

g.run(1024)

touched_cells = set()

pat = g.getcells(g.getrect())
end_pop = sum(g.getcell(x, y) % 2 for x, y in zip(pat[::3], pat[1::3]))

for i in range(0, len(pat)-2, 3):
    if pat[i+2] != 5:
        touched_cells.add((pat[i], pat[i+1]))

near_cells = set()

for x, y in touched_cells:
    for dx in range(-2, 3):
        for dy in range(-2, 3):
            if abs(dx) + abs(dy) < 4:
                near_cells.add((x+dx, y+dy))
            else:
                # for (2,2) offsets use a more complicated (but
                # still conservative) rule that allows on cells
                # at a (2,2) offset from a glider trail
                count = 0
                for ddx in range(-1, 2):
                    for ddy in range(-1, 2):
                        if g.getcell(x+dx//2+ddx, y+dy//2+ddy):
                            count += 1
                if count > 1:
                    near_cells.add((x+dx, y+dy))
   
on_cells &= near_cells
off_cells = near_cells - on_cells

for x, y in off_cells:
    g.setcell(x, y, 2)

for x, y in on_cells:
    g.setcell(x, y, 3)

for x, y in data_cells:
    g.setcell(x, y, 1)

g.update()

prefix = g.getstring("Enter file prefix:", "output")
max_pop = int(g.getstring("Enter maximum final population:")) + start_pop - end_pop

recurse()
chris_c
 
Posts: 719
Joined: June 28th, 2014, 7:15 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby mniemiec » November 29th, 2016, 9:35 pm

dvgrn wrote:By "this" you mean auto-creating recipe RLE for "add tail to X" for every object that might be able to have a tail added to it?

Mark Niemiec's expert system seems to be able to run reports saying that ninety-x percent of N-bit still lifes "can be synthesized using standard techniques from smaller still-lifes". Does your "horribly slow" code get in the way of doing the same kind of thing in practice for larger N, and/or are there other roadblocks as well?

chris_c wrote:Yeah that's what I meant. The code for that part is at the bottom. Draw a converter using state 1 for the gliders and states 3 or 5 for the initial still life e.g. the 3G tail adder:
Then run the script. It works out which cells must always be off (state 2), which cells from the initial still life must stay on (state 3) and which cells in the initial still life can be switched off (state 5). Then it asks for a filename prefix and the maximum population of the output still life.

My method takes a specific list of patterns (e.g. 15-bit still-lifes) and list of converts (of which I have about a thousand currently). It then takes each pattern, and attempts to run each converter on it, until it finds one that works, at which point it outputs a possible solution in the form "target\tconverter\tsource\n". This is sufficient for existent proofs, but not to regenerate the synthesis - no orientation is provided for the converter, and some converters may be applied in more than one place. However, it would be easy to merely re-run the algorithm on that one pattern and one converter to rapidly recreate the solution. It also doesn't output the glider count, nor attempt to optimize the glider count (although this would easy to do by keeping the converters sorted in ascending order by number of gliders, and trying them in that order).

Each converter is in multi-colored CA with 5 different states. The default state is used for most of the universe, and represents cells that are the same in both source and destination, and may be either alive or dead, and may change during the course of the converter (e.g. in the tail-adder, all the cell at the corner of the tub, which could also be alive when adding a tail to a boat). One state is for cells that must be alive and must never change (e.g. the tub itself). One state is used for tool cells (e.g. incoming gliders or spaceships). One state is for births (e.g. the tail). One cell is for deaths (e.g. in snake-to-python, one of the original end cells). One state is for cells that must always be dead (e.g. the middle of the tub, and several cells around the tub). This state is particularly important, as it is also used for the 3 lanes adjacent to the incoming gliders, plus 1-3 cells around any births caused by the converter. This is especially important for finding non-viable recipes - if any birth ever happens in any such cell, the recipe cannot work, so it can be immediately abandoned without needing to run it any further. There is one state that represents living cells that must end up alive, but are permitted to die temporarily.

Finally, I have recently added one extra state for "example" cells. These cells are treated like the default for the purpose of the expert system, but are treated as "alive but may temporarily die" for running the recipe by humans. This allows a recipe to be verified and observed by supplying one real-life example conversion, without affecting how the converter is actually implemented. (e.g. in "snake to python", the rear end of the snake is like this, because such a converter can convert snakes of any length, and in some cases, can also lengthen barber poles as well).

Each converter is applied to a pattern, in all 8 possible rotations and reflections, and in each possible position. Because each converter is heavily constrained by "must be dead" cells, most converters will be immediately discarded without even running the pattern at all. If a converter does match a situation successfully, it is run to see if it does actually produce the desired result. In most cases, an incorrect converter will produce a forbidden birth or death, and then be immediately discarded. In some rare cases, a methuselah will result that does not violate the input constraints, but that also does not produce the desired result. Such cases are run for an arbitrary period (I currently use 300 generations), and if they do not produce a success or failure in that time, they are discarded. This limit can, of course, be increased, if any new converters are added that run for longer. It would also be easy to attach an annotation to each converter that specifies exactly how long it runs - by just running it against its example and counting the time until success.

The program does not actually generate reports. It just outputs successful conversions (as mentioned above), or if it can't find one, an unsuccessful conversion is indicated by merely outputting the original input pattern. A post-processing filter separates the output into two additional files - a list of successes, and a list of failures. The lengths of these three files are examined by hand to generate statistics.

The biggest problems I have is that, at present, the recipe repertoire necessarily only contains converters that increase the population, or in situations where the population doesn't change, produces more complex structures from simpler ones (where complexity is a subjective, but unambiguous criterion). This provides a partial order for all patterns, which is useful for inductive proofs of synthesizability. It lets one say, for example, that, given that all still-lifes up to 14 bits have known syntheses, that all successful matches from the 15-bit still-lifes will either produce successful syntheses, or in a few rare cases, partial syntheses based on other as-yet-unsynthesized 15-bit still-lifes.

There are a fair number of other useful converters that violate the above constraints. Unfortunately, this makes it difficult to prove syntheses by induction, unless some other kind of partial order can be established. For example, a converter that shortens a snake - being able to synthesize a "frob w/long snake" from a "frob w/even longer snake" is hardly useful, unless one can demonstrate a synthesis for the larger object.

A second, lesser problems occurs with syntheses of oscillators and pseudo-oscillators, especially those involving pulsators with larger periods. Recipes contain "must be dead" cells where the pattern cannot intrude without interfering with the conversion reaction, but those cells usually need to only remain dead during certain times (e.g. when an incoming glider passes by). With oscillators, it's possible for an oscillator to intrude on such cells at other times without harming the integrity of the conversion. One could remove the "must be dead" cells from such recipes, but that would make them less difficult to filter out, slowing down the search process for all patterns.
mniemiec
 
Posts: 753
Joined: June 1st, 2013, 12:00 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby BlinkerSpawn » November 29th, 2016, 11:09 pm

Minor reduction; 15.225 13G->12G:
x = 106, y = 20, rule = B3/S23
86bo$84b2o$43bobo39b2o$43b2o36bo$34bo9bo37b2o$35b2o44b2o$34b2o51bo$85b
2o$86b2o$104b2o$20b2o18b2o18b2o18b2o18b2o3bo$21bo19bo8bo6bobobo15bobob
o7bo7bobobo2bo$2o19bobo17bobo5bo7b2o2bob2o12b2o2bob2o2b2o8b2o2bobo$b2o
19b2o18b2o5b3o9b2obo16b2obo3b2o11b2o$o3b2o27b2o$4bobo27b2o10b3o$4bo28b
o12bo$47bo42b3o$90bo$91bo!

Also reduces 15.190 by a glider:
x = 106, y = 23, rule = B3/S23
35bobo$35b2o$36bo$32bo58bo$30bobo8bo48bo$31b2o6b2o6bo42b3o$4bo35b2o4bo
$4bobo39b3o$o3b2o28bo$b2o19b2o8bobo7b2o5b3o6b2ob2obo13b2ob2obo3b2o8b2o
b2o$2o19bobo9b2o6bobo5bo9bobob2o14bobob2o2b2o10bobobo$21bo19bo8bo8bobo
17bobo7bo9bobo2bo$20b2o18b2o18b2o18b2o18b2o3bo$104b2o$86b2o$85b2o$87bo
$81b2o$82b2o$81bo$85b2o$84b2o$86bo!

EDIT: 15.365 reduced by 1:
x = 29, y = 31, rule = B3/S23
8bobo$8b2o$9bo7$10bobo$10b2o$2bo8bo$obo$b2o9$6b2o15b2o2b2o$7b2o14bobo
2bo$6bo17bob2o$9b3o14bo$9bo14bobo$10bo13b2o$6bo$6b2o$5bobo!
LifeWiki: Like Wikipedia but with more spaceships. [citation needed]
User avatar
BlinkerSpawn
 
Posts: 1323
Joined: November 8th, 2014, 8:48 pm

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby chris_c » November 30th, 2016, 12:57 pm

mniemiec wrote:My method takes a specific list of patterns (e.g. 15-bit still-lifes) and list of converts (of which I have about a thousand currently).


Woah. I think I have around 60 so far. I'm definitely worried about the number of holes that will be present if/when I extend to 16-bit still lifes.

mniemiec wrote:The biggest problems I have is that, at present, the recipe repertoire necessarily only contains converters that increase the population, or in situations where the population doesn't change, produces more complex structures from simpler ones (where complexity is a subjective, but unambiguous criterion). This provides a partial order for all patterns, which is useful for inductive proofs of synthesizability.


I don't see why you need a partial ordering like that. The following Python-flavoured pseudo-code takes a set of known objects and expands it to all objects that can be reached via objects of "complexity" less than or equal to LIMIT. When you encounter a new target I suppose you should make a note of the ancestor in order to make the list into an easily inspectable proof.

def expand_synths(known_objects):

    new_objects = list(known_objects)

    while new_objects:

        next_objects = []

        for source in new_objects:
            for target in conversions_from(source):

                if complexity(target) > LIMIT:
                    continue

                if target not in known_objects:
                    known_objects.add(target)
                    next_objects.append(target)

        new_objects = next_objects


BlinkerSpawn wrote:Minor reduction; 15.225 13G->12G...
Also reduces 15.190 by a glider...


It also reduces 14.231 according to my lists at least:

x = 117, y = 117, rule = B3/S23
20bo$5bo14bobo$5bobo12b2o$5b2o2$18b2o$6b2o10bobo$6bobo9bo$6bo106b2obo$
22b3o88bob2o$22bo87b2obo$23bo86bob2o12$29b2o$29bobo$29bo58$19bo$19bobo
$19b2o$2bo$obo$b2o$20bo$20bobo$20b2o3$22bo$22bobo$22b2o3$111b2o$5bob2o
96bob2o3bo$5b2obo96b2obo2bo$8bob2o96bobo$8b2obo96b2o11$25b2o$24b2o$26b
o!


I have pushed a new version of min_paths and summary to github. It adds the above component and also some others that I haven't seen before. The first was noticed by A for Awesome the other two are by me.

x = 20, y = 32, rule = LifeHistory
9.A$10.A$8.3A9$8.A.A$9.2A$5.A3.A8.A$6.A10.A$4.3A10.3A5$3A$2.A$.A7$18.
C$17.C.C$18.C!

x = 24, y = 21, rule = LifeHistory
2.A$A.A13.A$.2A12.A$15.3A5.A$21.2A$6.A15.2A$7.A$5.3A$20.A$18.2A$19.2A
8$17.E$16.E.E$17.E!

x = 12, y = 14, rule = LifeHistory
.E5.A$E.E4.A.A$.E5.2A9$10.A$9.2A$9.A.A!
chris_c
 
Posts: 719
Joined: June 28th, 2014, 7:15 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby mniemiec » November 30th, 2016, 2:59 pm

chris_c wrote:I don't see why you need a partial ordering like that. The following Python-flavoured pseudo-code takes a set of known objects and expands it to all objects that can be reached via objects of "complexity" less than or equal to LIMIT. When you encounter a new target I suppose you should make a note of the ancestor in order to make the list into an easily inspectable proof.

If you have a list of known objects (i.e. ones for whom syntheses are known), you have a partial ordering - i.e. "patterns known on day 0, patterns known on day 1 (i.e. day 0 + one known converter), patterns known on day 2 (i.e. day 1 + one converter)", etc. By always starting with something simpler, it is possible to use an induction proof of completeness. If you use the method, "Let's take all known patterns and see what we can make from them to expand the set", this will always work. If you use the method, "Let's take all the patterns we need and see what we can make them from" as I do, that's not the case.
mniemiec
 
Posts: 753
Joined: June 1st, 2013, 12:00 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby BobShemyakin » December 3rd, 2016, 8:46 am

viewtopic.php?f=2&t=1452&start=1350#p36765

I made my analyzer synthesis using ROLLBACK glider at 40 steps back.
When analysing its database found and fixed a bug in the synthesis of 15.373. The second from left glider interacts with the second from the right. If two left gliders roll back on 4 step each, these gliders fly by without interaction:
x = 40, y = 35, rule = B3/S23
17bo$16bo$16b3o12$7bo$8b2o$7b2o4$11bobo$12b2o$12bo$14bo$14b2o$13bobo
19b2ob2o$36bobo$35bo3bo$b2o3b2o26bob3o$obo3bobo25bobo$2bo3bo28bo2$10b
2o$9b2o$11bo!




Bob Shemyakin
BobShemyakin
 
Posts: 192
Joined: June 15th, 2014, 6:24 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby Goldtiger997 » December 9th, 2016, 10:30 pm

chris_c wrote:I am attaching a Golly script that can hopefully display an incremental synthesis of any 15 bit still life in less than 15 gliders.


Thanks, this very cool!

This gave me an idea for a new (probably easier) challenge:

number of bits   maximum number of gliders
4              3
5              2
6              4
7              4
8              4
9              5
10             6
11             8
12             9
13             11
14             13
15             14


(EDIT2: @BobShemyakin, sorry, somehow I mis-copied the table I made on a text document. Fixed it now)

The challenge is to reduce one of the numbers on the right hand side of the table.

Perhaps the easiest option is to do all 14-bit still-lifes in 12 gliders.

Here are the all the 14-bit still-lifes requiring 13 gliders:

14.96       xs14_i5q8a6z11           
14.105     xs14_358e12ko           
14.106     xs14_i5m853z11         
14.183     xs14_j5c2koz11           
14.321     xs14_mp3zw3146         
14.333     xs14_i5d2koz11           
14.346     xs14_08u15a4z32         
14.354     xs14_j9c826z23           
14.358     xs14_0j9c826z121       
14.527     xs14_25icz69k8           


Here is one of them (14.358) in 12 gliders:

x = 92, y = 85, rule = B3/S23
86bo$85bo$85b3o28$38bo$38bobo$38b2o3$31bo4bo$32b2obo$31b2o2b3o5$52bobo
$52b2o$53bo3bo$45bobo8b2o$45b2o9bobo$46bo2$44b3o$46bo$45bo8$23bo$23b2o
$22bobo7$55b2o$54b2o$56bo6$3o$2bo$bo4$89b3o$89bo$90bo!


P.S. The homepage still shows that one week ago all 14-bit still-lifes could be synthesised in less than 1 glider per bit, but we have done the much more significant achievement of 15-bit still-lifes, so I feel that someone should update that.

EDIT:

Here's 14.354 in 12 gliders:

x = 46, y = 52, rule = B3/S23
45bo$43b2o$44b2o11$13bobo$14b2o$14bo3$21bobo$21b2o$22bo3bo$25b2o$15bo
9bobo$15bobo$15b2o2$13b3o$15bo$14bo$bo22b2o$b2o21bobo$obo15b3o3bo$20bo
$19bo2$22b2o$21b2o$23bo4$9bo$9b2o$8bobo6$39bo$38b2o$38bobo!
Last edited by Goldtiger997 on December 18th, 2016, 8:11 pm, edited 2 times in total.
User avatar
Goldtiger997
 
Posts: 273
Joined: June 21st, 2016, 8:00 am
Location: 11.329903°N 142.199305°E

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby Goldtiger997 » December 18th, 2016, 5:49 am

I wrote:This gave me an idea for a new (probably easier) challenge:...


Well... it seems like no-one is doing this so I'll try it myself:

14.96 in 12 gliders:
x = 59, y = 63, rule = B3/S23
58bo$56b2o$57b2o7$o$b2o40bobo$2o41b2o$22bo21bo$20bobo$21b2o16bo$37b2o$
38b2o10$38b2o$38bobo$38bo$26b2o$25bobo$27bo$29b3o$29bo$30bo2$18b2o$17b
obo14b3o$19bo14bo$35bo15$54bo$53b2o$53bobo4$51b3o$51bo$52bo!


14.105 in 10 gliders:
x = 63, y = 61, rule = B3/S23
26bo$27b2o$26b2o11$bo$2bo$3o19$48bo$47bo$47b3o$45bo$46bo$44b3o5$55b2o$
55bobo$55bo$51b3o$53bo7bo$52bo7b2o$60bobo$38b2o$39b2o$38bo11b2o$49b2o$
51bo3$55bo$54b2o$54bobo!


14.106 in 11 gliders (this synthesis was very tight!):
x = 43, y = 44, rule = B3/S23
27bo$28bo$26b3o3$16bobo$17b2o$17bo3$26bo$27b2o$26b2o3bo$b2o26b2o$obo
27b2o$2bo3$8bo4b2o$9bo2bobo$7b3o4bo2$7bo9b3o$7b2o10bo$6bobo9bo$25b3o$
25bo$2b3o21bo$4bo$3bo12$40b3o$40bo$41bo!


14.183 in 11 gliders:
x = 56, y = 95, rule = B3/S23
o$b2o$2o40$44bo$44bobo$44b2o2$34b2o5b3o$33bobo7bo$35bo6bo8$47bo5b2o$
48bo4bobo$46b3o4bo$50b2o$49bobo$51bo4$54b2o$53b2o$55bo2$51b2o$52b2o$
51bo16$16b3o$18bo$17bo3$29b3o$31bo$30bo!


14.321 in 10 gliders:
x = 32, y = 33, rule = B3/S23
22bo$21bo$21b3o$15bo$16bo$2bo11b3o$obo$b2o4$5bobo14bo$6b2o13bo$6bo14b
3o$3b2o12b3o$2bobo12bo$4bo13bo2$30b2o$17b2o10b2o$16bobo12bo$18bo9$19b
3o$19bo$20bo!


14.333 in 12 gliders:
x = 75, y = 106, rule = B3/S23
55bobo$55b2o$56bo3$70bo$68b2o$69b2o29$47bo$46bo$46b3o2$29bo$30bo$28b3o
$33bo$34bo$32b3o$26bo$24bobo$25b2o3$24b3o9bo4bo$26bo10b2obo$25bo10b2o
2b3o4$24b3o$26bo$25bo37$3o$2bo$bo5$72b3o$72bo$73bo!


14.346 in 11 gliders:
x = 74, y = 57, rule = B3/S23
67bo5bo$66bo4b2o$66b3o3b2o12$o$b2o$2o9$30bo$30bobo3bo$30b2o4bobo$36b2o
$29bo$30bo$28b3o3$42bo$41bo$41b3o2$44b3o$44bo$45bo10$21b2o$20bobo$22bo
3b2o$25bobo$27bo20b3o$48bo$49bo!


Unfortunately, I could not find any use for any of the limited number of soups for 14.527.
(
14.527:
x = 10, y = 4, rule = B3/S23
2b2o4bo$bo2bo2bobo$obo2bo2bo$bo4b2o!

https://catagolue.appspot.com/object/xs14_25icz69k8/b3s23
)

Can anyone else find a synthesis for 14.527 in 12 gliders or less?
User avatar
Goldtiger997
 
Posts: 273
Joined: June 21st, 2016, 8:00 am
Location: 11.329903°N 142.199305°E

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby BlinkerSpawn » December 18th, 2016, 10:10 am

14.96's cleanup can be reduced by 1:
x = 55, y = 58, rule = B3/S23
54bo$52b2o$53b2o8$39bobo$39b2o$18bo21bo$16bobo$17b2o16bo$33b2o$34b2o
10$34b2o$34bobo$34bo$22b2o$21bobo$23bo$25b3o$25bo$26bo2$14b2o$13bobo
14b3o$15bo14bo$31bo15$50bo$2o47b2o$b2o46bobo$o!
LifeWiki: Like Wikipedia but with more spaceships. [citation needed]
User avatar
BlinkerSpawn
 
Posts: 1323
Joined: November 8th, 2014, 8:48 pm

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby BobShemyakin » December 18th, 2016, 11:44 am

Goldtiger997 wrote:...
This gave me an idea for a new (probably easier) challenge:

number of bits   maximum number of gliders
4              2                                          (??? 3)
5              2
6              3                                          (??? 4)
7              4
8              4
9              5
10             6
11             8
12             9
13             11
14             13
15             14


The challenge is to reduce one of the numbers on the right hand side of the table.

Perhaps the easiest option is to do all 14-bit still-lifes in 12 gliders.

...

Thi table is incorrect for SL4 and SL6. I have never seen the tube (4.2) from 2G, as well as the snake (6.1) and carrier (6.4) of 3G. In the rest of the table is correct.
The best idea is to show that SL16 can be synthesized less than 16G. Of course, the task is heavy, but I hope it will be automated. In the first step it is necessary to reduce the cost of expensive SL16 M. Niemiec’s database.


Bob Shemyakin
BobShemyakin
 
Posts: 192
Joined: June 15th, 2014, 6:24 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby BobShemyakin » December 18th, 2016, 12:15 pm

Goldtiger997 wrote:...
EDIT:

Here's 15.354 in 12 gliders:

x = 46, y = 52, rule = B3/S23
45bo$43b2o$44b2o11$13bobo$14b2o$14bo3$21bobo$21b2o$22bo3bo$25b2o$15bo
9bobo$15bobo$15b2o2$13b3o$15bo$14bo$bo22b2o$b2o21bobo$obo15b3o3bo$20bo
$19bo2$22b2o$21b2o$23bo4$9bo$9b2o$8bobo6$39bo$38b2o$38bobo!

You mean 14.354

Bob Shemyakin
BobShemyakin
 
Posts: 192
Joined: June 15th, 2014, 6:24 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby chris_c » December 18th, 2016, 6:08 pm

Goldtiger997 wrote:
I wrote:This gave me an idea for a new (probably easier) challenge:...


Well... it seems like no-one is doing this so I'll try it myself


Good work!

Goldtiger997 wrote:Can anyone else find a synthesis for 14.527 in 12 gliders or less?


I made a 6 glider snake to tub-with-long-tail converter. That gives 12 gliders overall:

x = 138, y = 153, rule = B3/S23
33bobo$33b2o$34bo6$29bo$30b2o103bo$29b2o103bobo$135bobo$137bo$136bo$
26b2o107bo$25bobo106bo$27bo106b2o8$24b3o12b3o$26bo12bo$25bo14bo$36b2o$
35b2o$37bo59$bo$2bo70bo$3o70bobo$73b2o$67bo$65b2o$66b2o10$58bo$57bo$
57b3o3$35bo99bo$34bobo97bobo$35bobo97bobo$37bo99bo$36bo99bo$35bo99bo$
34bo99bo$34b2o98bobo$135bobo$136bo29$59b3o$59bo$60bo$2b2o$bobo$3bo!


BobShemyakin wrote:The best idea is to show that SL16 can be synthesized less than 16G. Of course, the task is heavy, but I hope it will be automated.


I did quite a bit of work on making syntheses for all 16-bit still lifes. Adding many of the converters from Extrementhusiast's list and then making more expensive versions that have smaller reaction envelopes to get a few of the harder cases. There are still around 200 still lifes without a synthesis so probably I am still missing some useful converters. Good news is that at least 2800 out of 3286 still lifes are buildable in less than 16 gliders. I will post more details within a few days.
chris_c
 
Posts: 719
Joined: June 28th, 2014, 7:15 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby mniemiec » December 18th, 2016, 9:37 pm

Goldtiger997 wrote:14.183 in 11 gliders: ... 14.346 in 11 gliders: ...

Cleanup for both reduced by 1:
x = 179, y = 80, rule = B3/S23
39bo39bo47boo28boo18boo$39bo39bo45bobbo26bobbo16bobbo$bo7bobo27bo39bo
44boboo26boboo16boboo$o8boo19bo39bo52bobbo26bobbo16bobbo$3o7bo3bo14bob
o3b3o3b3o25bobo3b3o3b3o39boo3bo24boo3bo14boo3bo$13boo14bobo37bobo55boo
28boo18boo$3b3o7bobo14bo8bo30bo8bo$3bo35bo39bo$4bo34bo39bo$boo29boo38b
oo$obo29boo38boo$bbo54bo$58bo$56b3o$60boo51boo28boo$60bobo44bo5boo22bo
5boo$60bo46bo29bo$107bo29bo$117boo28boo$111boo4boo22boo4boo$111bobo27b
obo$112boo28boo$60b3o$60bo88b3o$61bo87bo$115b3o27b3obbo5$99b3o$99bo$
100bo11$102bo$44bo56bo$42bobo56b3o$43boo$$57bo$58bo$56b3o20bo$79bobo$
79boo3bo$84bobo$84boo11$4bo$5bo19bo39bo$3b3o18bobo37bobo$24bobo37bobo$
3o22bo39bo48boo$bbo111bo$bo114bo$115boobbo$76b3o37bobobo$76bo39bobbo$
77bo39boo$69boo$68bobo4boo$70bo3bobo$76bo!

chris_c wrote:I made a 6 glider snake to tub-with-long-tail converter.

Great! This will likely improve a fair number of other syntheses as well.
mniemiec
 
Posts: 753
Joined: June 1st, 2013, 12:00 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby BobShemyakin » December 19th, 2016, 2:27 pm

chris_c wrote:...
I did quite a bit of work on making syntheses for all 16-bit still lifes. Adding many of the converters from Extrementhusiast's list and then making more expensive versions that have smaller reaction envelopes to get a few of the harder cases. There are still around 200 still lifes without a synthesis so probably I am still missing some useful converters. Good news is that at least 2800 out of 3286 still lifes are buildable in less than 16 gliders. I will post more details within a few days.

Offer my collection of converters. Partially assembled on the Forum but there are converters found me.
2G:
x = 629, y = 238, rule = B3/S23
198bo3bo43bo$12bo3bo39bo3bo3bo80bo3bo47bobobobo41bobo$11bobobobo37bobo
bobobobo36bo3bo37bobobobo47bo3bo43bo$12bo3bo39bo3bo3bo36bobobobo37bo3b
o45bo9bo$19bo82bo3bo35bo9bo41bobo7bobo39bo103bo$9bo8bobo33bo86bobo7bob
o41bo9bo39bobo51bo3bo45bobo44bo3bo142bo3bo3bo$8bobo8bo33bobo43bo6bo35b
o9bo93bo51bobobobo45bo44bobobobo52bo3bo83bobobobobobo54bo3bo$9bo44bo
43bobo4bobo97bo93bo3bo92bo3bo52bobobobo83bo3bo3bo54bobobobo$99bo6bo45b
o51bobo39bo103bo42bo9bo50bo3bo148bo3bo3bo$8bo3bo42bo3bo91bobo51bo39bob
o48bo9bo42bobo40bobo7bobo46bo9bo79bo72bobo$7bobobobo40bobobobo35bo9bo
45bo49bo43bo48bobo7bobo42bo42bo9bo46bobo7bobo77bobo62bo9bo$8bo3bo3bo
38bo3bo3bo31bobo7bobo41bo51bobo92bo9bo144bo9bo79bo62bobo$15bobo44bobo
31bo9bo41bobo51bo43bo89bo3bo9bo52bo201bo$16bo46bo85bo49bo45bobo47bo10b
o28bobobobo7bobo50bobo56bo80bo3bo$8bo10bo46bo27bo3bo3bo3bo45bo45bobo
45bo47bobo8bobo28bo3bo9bo33bo3bo14bo56bobo78bobobobo57bo4bo$7bobo8bobo
44bobo25bobobobobobobobo43bobo45bo95bo10bo76bobobobo10bo60bo70bo3bo5bo
3bo3bo53bobo2bobo$8bo10bo46bo27bo3bo3bo3bo45bo43bo49bo103bo33bo3bo10bo
bo41bo3bo10bo72bobobobo11bobo44bo3bo4bo4bo3bo$195bobo47bobo101bobo48bo
41bobobobo8bobo72bo3bo13bo44bobobobo11bobo$8bo9bo36bo9bo40bo35bo9bo43b
o49bo48bo10bo43bo46bo45bo3bo10bo94bo42bo3bo13bo$7bobo7bobo34bobo7bobo
38bobo33bobo7bobo140bobo8bobo88bobo62bo90bobo50bo11bo$8bo9bo36bo9bo40b
o35bo9bo41bo3bo3bo3bo39bo48bo10bo43bo46bo62bobo90bo50bobo9bobo$11bo3bo
42bo3bo82bo3bo43bobobobobobobobo37bobo101bobo42bo66bo143bo11bo$10bobob
obo40bobobobo42bo37bobobobo43bo3bo3bo3bo39bo48bo9bo44bo42bobo146bo9bo$
11bo3bo42bo3bo42bobo37bo3bo144bobo7bobo87bo56bo9bo79bobo7bobo52bo9bo$
106bo188bo9bo44bo99bobo7bobo79bo9bo52bobo7bobo$298bo3bo46bobo40bo3bo3b
o3bo46bo9bo83bo3bo56bo9bo$297bobobobo46bo40bobobobobobobobo48bo3bo85bo
bobobo58bo3bo$298bo3bo89bo3bo3bo3bo48bobobobo85bo3bo58bobobobo$454bo3b
o150bo3bo6$292bo$290b2o$2bo41bo90bo51bo103b2o$3bo19b2o20bo46bo43bo50bo
bo56bo39bobo$b3o19bobo17b3o2bo44bo40b3o2bo44b2ob2o55bobo40b2o104bo$24b
obo21bobo40b3o45bobo41bobo59b2o40bo105bobo$6b2o17bobo20b2o19b2o17b2o
49b2o44bo23bo133b2o18bo29b2o144bo$b2o3bobo17bobo39bo2bo15bobo20b2o48b
2o27b2o17bobo32b2o46b2o19b2o23b2o3bobo4bo7b2o3bobo24bobo147bobo$2o6bo
19bo22b2o16bo2bo16bo19bo2bo47bobo26bobo16b2obo27bo3bobo45bo2bo16bo2bo
23bo3b2o5bobo6bo3b2o26b2o46b2o3b2o13b2o3b2o74b2o66bo$2bo5b2o18b2o21bob
o16b2obo21b2o12bobobo27b2o19bo28bo19bo26bobo2bo14bo2bo30b3o17b3o23bob
2o7b2o7bob2o28bo48bo2bobo14bo2bobo67bo2b2o19bo2bo39bo6bo$53bo19bo21bob
o12bo2bo27bo19bo29bobo17bobo24b2o18b4o77bobo17bobo77bobobo15bobo70b4ob
o3b3o12b4o40b2o4b3o$53b2o18b2o22bo15b2o27b3o17b3o27b2o18b2o78b3o17b3o
31b3o36b2o4b2o12b2o2bo30bobo17bo69b2o5bo3bo12b2o43b2o$97b2o45bo19bo73b
2o18b2o32bo2bo16bo2bo30bo38bo2bobobo12bo2bobo30bo2b2o83bo3bo3b2o3bo10b
o3bo45bo$237bobo17bobo33b2o18b2o32bo39b2obo16b2obo33bobo83b3obo19b3obo
43bobo$236bobo17bobo131b2o18b2o28b2o2bo87bobo21bobo44b2o$237bo19bo132b
o2bo16bo2bo25bobo91bo23bo47b2o19bo$392b2o18b2o27bo163bobo17bobo$606bob
o17bobo$607bo19bo4$139b2o20b2o28bobo$92bo42b2obo2bo15b2obo2bo24bo2b2o$
44bo45b2o42bobob2obo14bobob2obo22bobo3bo146bobo$45b2o2bo37bo3b2o42bo5b
ob2o11bobo4bob2o20b2o40bobo107b2o$44b2o3bobo17bo15bobo53b2obo12b2o4b2o
bo63b2o2bo56bobo46bo$49b2o17bobo15b2o22b2o99b2o17bo3bobo54b2o$67bobo
40bobo18bo59b2o17bo2bo20b2o51bo4bo43b2o51bo$47bo19bo24bo19bo18b2o56bo
2bo16bo2bo25bo17b2o30b2o45bobo24bo26bobo$45b3o17b3o24b3o17b3o15bobo56b
3o17b3o25bobo16bobo28b2o7b2o18b2o19bo2b2obo17bobo25b2o$44bo19bo30bo19b
o122bobo16bobo32b2obobo14b2obobo22bob2o18b2o$44b2o18b2o28b2o18b2o17b3o
53b3o17b3o27b2o17b2o31bobobo17bobo28b2o18b2o27bo19bo$133bo54bo2bo16bo
2bo79bobob2o14bobob2o27bo19bo27bobo17bobo$134bo54b2o18b2o81bo18b2o29bo
bo17bobo22b2o2bobo19bo$342b2o18b2o24b2o2bo$387bo9$87bobo97bo$88b2o3bo
94bo49bo$88bo2b2o93b3o48bo$92b2o43b2o18b2o32bo39bo5b3o$109bo27bo19bo
32bo41bo57bobo$108bobo28bo2bo16bo2bo27b3o37b3o58b2o3bo$92bo16b2o27b5o
15b5o74bo19bo33bo2b2o$91bobo17b2o123bobo17bobo36b2o$92bobo16bobo17bo8b
o17b3o28b2o17b2ob2o24bobo16bo2bo78bo2bo16bo2bo$93b2o17b2o18bo6bobo16bo
2bo26bo2bo16bo3bo25b2o17bobo78b4o16b4o$130b3o7bo18b2o28b3o17b3o46bo30b
2o18bo32b2o18b2o$284b2o3bo14b2o2bobo27b3obo15b3obo$134bo54b3o17b3o72bo
2bobo14bo2bobo27bo2bobobo12bo2bobobo$134b2o53bo2bo16bo2bo73b2obobo14b
2obobo20b3o2bobo3b2o12b2o4b2o$133bobo55b2o18b2o77b2o18b2o22bo3bo$333bo
$338b2o$338bobo$338bo9$132bo$133bo153bo$131b3o153bobo$156b2o76bo47bobo
2b2o$155bo2bo27b2o18b2o24b2o49b2o$130b2o4b2o3b2o13bobo2b2o24bo19bo25b
2o48bo54bo$129bobo4bo2bo2bo14bo4bo23bo6bo12bo22bo106b2o$131bo6b4o16b4o
24b2o4bo13b2o22b2o105b2o$187bo4b3o12bo2bo18b2o57b2o42bobo$140b2o18b2o
25bobo17bobobo22bo53bo19b2o23b2o$140b2o18b2o26bobo4b2o11bobo22bobo18b
2o34bo17bobo22bo$189bo5bobo11bo24bobo16bo2bo32b2o3b2o13b2o3b2o$195bo
39b2o16bo2bo34b2o2bo15b2o2bo21b2o3b2o14b2o2b2o$254b2o35bob2o16bob2o22b
o2bo2bo14bo4bo$339b4o16b4o2$341b2o18b2o$341b2o18b2o10$229bobo101bo$
230b2o2bobo97b2o$230bo3b2o52bobo42b2o$191bo43bo49bo2b2o$191bobo89bobo
3bo$191b2o2b2o87b2o46b3o$194b2o138bo$196bo15bo22b2o18bo53bo23bo$191bo
19bobo21bo18bobo31b2o3b2o13bobo2b2o$190bobo17bo2bo23bo17bobo30bo2bo2bo
14bo4bo24b2o14b2o2b2o$190bobo17bobo23b2o3b2o13b2o3b2o27b4o16b4o20b2obo
2bo14bo4bo$189b2obobo14b2obobo23b2o2bo15b2o2bo71bob4o16b4o$193bobo17bo
bo22bob2o16bob2o30b2o18b2o$194bo19bo77b2o18b2o24b2o18b2o$338b2o18b2o
13$192bo$191bo140bobo$188bo2b3o44bo94b2o$186bobo48bo95bo$187b2o23b2o
23b3o$194b2o16bobo$194bo20bo18b2o$196bo19bo18b2o22b2o79bo$195b2o3b2o
13b2o3b2o12bo4b2o3b2o13bobo2b2o73bobob2o15b2ob2o$197b2o2bo15b2o2bo17bo
2bo2bo14bo4bo67b2o4bobobobo15bobobo$197bob2o16bob2o20b4o16b4o69b2o4b2o
3bo14bo4bo$333bo8b3o15bob3o$243b2o18b2o77bo18b2o$243b2o18b2o7$241bobo$
238bo2b2o$236bobo3bo$194bobo40b2o$190bo3b2o4b2o18b2o116b2o15b2o$191b2o
2bo4bo19bo40b2o75bo16bo$190b2o10bo12b2o5bo18b2o17bo2bo70bo5bobo14bobo$
197b2o2b2o12bobo3b2o16bo2bo16bo2bo72bo3b3obo12b3obo$197bo2bo17bobo18b
3o17b3o71b3o2bo4bo11bo4bo$199b2o18b2o116bobo3b2o10b2o3b2o$239b3o17b3o
71b3o2bo$238bo2bo16bo2bo73bo$239b2o18b2o73bo12$195bo$194bo$194b3o2$
191b2o$192b2o22b2o$191bo4b2o18bobo$196bo2bo17bobo$198b2o18b2o$200b2o
18b2o$200bobo17bobo$201bo19bo16$195bo$194bo$194b3o4b2o18b2o$201bo16bo
2bo$192bo5b2obo15bobobo$193b2o3b2ob2o14bobob2o$192b2o24bo!

3G:
x = 943, y = 314, rule = B3/S23
761bo112bo3bo$760bobo44bo3bo61bobobobo$761bo44bobobobo61bo3bo$554bo
252bo3bo119bo3bo$553bobo103bo3bo97bo42bo9bo56bo6bo51bobobobo$554bo103b
obobobo95bobo40bobo7bobo54bobo4bobo51bo3bo$447bo3bo207bo3bo97bo42bo9bo
56bo6bo59bo$446bobobobo101bo373bo8bobo$447bo3bo101bobo100bo9bo80bo3bo
9bo52bo53bo9bo48bobo8bo$444bo9bo99bo100bobo7bobo78bobobobo7bobo50bobo
51bobo7bobo48bo$443bobo7bobo200bo9bo80bo3bo9bo33bo3bo14bo53bo9bo$346bo
3bo93bo9bo99bo239bobobobo10bo115bo3bo$239bo3bo3bo55bo3bo37bobobobo201b
obo99bo10bo94bo33bo3bo10bobo41bo3bo7bo3bo3bo3bo47bobobobo$238bobobobob
obo53bobobobo37bo3bo103bo99bo99bobo8bobo92bobo48bo41bobobobo5bobobobob
obobobo34bo3bo8bo3bo3bo$22bo3bo41bo3bo98bo3bo63bo3bo3bo55bo3bo35bo9bo
99bobo199bo10bo94bo46bo45bo3bo7bo3bo3bo3bo34bobobobo14bobo$21bobobobo
39bobobobo45bo3bo3bo3bo38bobobobo165bobo7bobo99bo99bo252bobo104bo3bo
16bo$22bo3bo41bo3bo45bobobobobobobobo38bo3bo61bo62bo6bo35bo9bo97bo101b
obo205bo46bo69bo48bo10bo$19bo9bo35bo9bo43bo3bo3bo3bo46bo57bobo60bobo4b
obo141bobo101bo100bo10bo93bobo42bo71bobo46bobo8bobo$18bobo7bobo33bobo
7bobo91bo8bobo57bo62bo6bo45bo97bo202bobo8bobo93bo42bobo71bo48bo10bo$
19bo9bo35bo9bo54bo36bobo8bo173bobo93bo105bo100bo10bo138bo$129bobo36bo
69bo3bo54bo9bo45bo93bobo103bobo205bo116bo48bo9bo$18bo10bo35bo9bo54bo
106bobobobo52bobo7bobo41bo97bo105bo100bo9bo94bobo40bo3bo3bo3bo61bobo
46bobo7bobo$17bobo8bobo33bobo7bobo90bo3bo66bo3bo3bo50bo9bo41bobo93bo
208bobo7bobo94bo40bobobobobobobobo61bo48bo9bo$18bo10bo35bo9bo52bo37bob
obobo72bobo102bo93bobo107bo100bo9bo137bo3bo3bo3bo114bo3bo$21bo46bo3bo
54bobo37bo3bo3bo70bo48bo3bo3bo3bo45bo91bo107bobo102bo3bo266bobobobo$
20bobo44bobobobo54bo45bobo72bo44bobobobobobobobo43bobo199bo102bobobobo
266bo3bo$21bo3bo3bo38bo3bo102bo72bobo44bo3bo3bo3bo45bo89bo3bo3bo3bo
202bo3bo$24bobobobo34bo9bo50bo40bo10bo70bo192bobobobobobobobo$25bo3bo
34bobo7bobo48bobo38bobo8bobo127bo35bo9bo89bo3bo3bo3bo$65bo9bo50bo40bo
10bo59bo9bo57bobo33bobo7bobo$28bo208bobo7bobo57bo35bo9bo$18bo8bobo35bo
9bo48bo42bo9bo60bo9bo97bo3bo$17bobo8bo35bobo7bobo46bobo40bobo7bobo62bo
3bo61bo37bobobobo$18bo46bo9bo48bo42bo9bo62bobobobo59bobo37bo3bo$21bo3b
o42bo3bo97bo3bo66bo3bo61bo$20bobobobo40bobobobo48bo46bobobobo$21bo3bo
42bo3bo48bobo46bo3bo$122bo677bobo$801b2o3bo49b2o18b2o34bobo$488bo256bo
55bo2b2o51bo19bo35b2o$486b2o62bo195bo58b2o49bo3bo15bo3bo32bo5bo$487b2o
3bo57bobo93b2o18b2o23bo52b3o50b2o57b5o15b5o36b2o$442b2o18b2o28bobo55b
2o40bo54bo2bo8bo7bo2bo21bo7bo53b2o18b2o21bo20b2o98b2o$437b2obo2bo13b2o
bo2bo28b2o54bo44bo3bobo47bobobo5b2o8bobobo18b3o6bo54bo19bo23b3o17bobo
33b3ob3o14bob4o$437bob3o15bob3o25b3o20b2o34bobo42b3o3b2o49bo2bo2b2o2b
2o8bo2bo27b3o47b2o5bo19bo23bo2b2o15bo2b2o28bo2bobo2bo13b2obo2bo$489bo
20bo36b2o49bo50b2o3bobo14b2o70bo5bobo3b2o13b2o3b2o16b3o4bobobo15bobobo
28b2o2bo2b2o18b2o$438b2o18b2o28bo3b2o17bo142bo86bobo8bobo15bobobo20bo
5bo19bo27b2o66b2obo$7bo328bo101b2o17bobo32bo19bo57b2o18b2o99b2o2b2o45b
2o9b2o18b2o19bo53bobo63bo2bob2o$8b2o285bobo17bo21bo43bo75b2o34bo19bo
36b2o19bo19b2o2b2o17bo31b3o41bobo3bo18b2o28b2o103bo3b3o55bobo6b2o18b2o
$7b2o52bo227b2o4b2o12b2o3bobo18b3o3bo40b2o108b2o18b2o36bo19bo19bo4bo
18b3o31bo43bo2bo5b2o13bo4b2o23b2o108bob3o52b2o6bo19bo$11bobo48bo19bo
207bo5bo13bo4bo23b2o40b2o53b2o2b3o48bo2b2o15bo2b2o27b2o6b3o17b3o23bo
19bo29bo48b3obobo13bobobobo22bo109bo2bo60bobo17bobo$2bo8b2o47b3o18bobo
29bo176bob2o16bob3o17b3o5b2o20b2o73b2obo51b2o2bo15b2o2bo27b2o8bo19bo
21b2o3b2o13b2o3b2o75b2o15b2ob2o139bo59b2o18b2o$obo9bo69b2o27b2o49bobo
5b2o18b2o99bobo2b2o13b2o21bo28bo23bo48bo4bo53b2o18b2o26bo9bo19bo24b2o
2bo15b2o2bo$b2o52bo56b2o6b2o18b2o17bo2b2o5bobo17bobo42b2o18b2o36bo2b2o
36bo9bo18bo22b2o166b2o18b2o23bob2o16bob2o$27bo25bobo6b2o16b4o25bo9bobo
17bobo15bobo3bo5bo12b2ob2o2bo44bo19bo42bo44bobo17bobo21b2o49b2o$26bobo
25b2o2bo4bo16bo2bo26bo8bo15b2o2bo18b2o6b2ob2o11b2obobob2o46bo19bo33b2o
50bobo17bobo16bo54bobo$11b2obo12bobob2obo23b2o2bo5b2o12bo5b2o18b3o5b2o
b2o12b3obob2o24bobo17bobo48b2o18b2o32bobo51bobo17bobo15b2o22b2o29bo$
11bob2o14bobob2o22bobo3b3obobo13b3obobo25bobo14bo4bo20b2o5bobo17bobo
104bo52bo19bo15bobo2b2o17bo2bo$15b2o11bobo4b2o28b2o18b2o28bobo15b3obo
19bobo6bo19bo54bo14b2o129bo17bobo383bobo$15bo13bo5bo73bo6bo18b2o22bo
79b2o15bobo127bo5b2o12bo5b2o377b2o$13bobo17bobo73b2o129b2o15bo129b3obo
bo13b3obobo378bo$13b2o18b2o73bobo124b2o152b2o18b2o441b2ob2o15b2ob2o$
233bobobo615bobo17bobo$231bobobo360bobo144bo48b3o57bo3bo15bo3bo$232b2o
362b2o58bobo40bo44bo3bobo43bo3b2o53b4o16b4o$597bo58b2o32bobo5bo43b3o3b
2o43bo3bobo3bo11b2o$592bo60bo3bo33b2o5b3o48bo46bo4b2o13bo34b4o8bo11b2o
$593bo60bo36bo103bo6b2o11bo35bo3bo5b2o12b2o$591b3o58b3o90b2o48b2o18b2o
37bo3b2o2b2o$596b2o103bo42bobo24bo24bo19bo37b2o2bobo$335bo207b2o18b2o
31bo17b2o51b2o31b2o44bo2b2obo17bobo22bo19bo35b2o5bo$5bo330b2o45bobo
158bo19bo25b2o6bo15bobobo49bo26b2o3bobo14b2o30bob2o18b2o21bo19bo35bobo
$6bo51bo4bo222bobo2bobo41b2o46b2o159bobo6bo10bobo24b2o4b2o3b2o13b2o3b
2o28b2ob2obo9bob2obo20bo2bo17bo2bo34b2o18b2o19bobo17bobo35bo$4b3o49bob
o2bobo169bo53b2o2b2o85bo5bo58bo3bo97b2o6bobo9bobo22bo8b2o2bo15b2o2bo
23b3obobobob2o10b2ob2o21b3o17b3o35bo19bo21bobo17bobo$57b2o3b2o2bobo
162bobo53bo4bo48bo37b2o60bobo3bobo103b2o11bo32bob2o16bob2o26bo2bo98bob
o17bobo22bo19bo$66b2o95bo3bo64b2o77b2o26b2o37b2o62b2o3b2o42bobo2bo53b
2o96bo46b3o17b3o33b2o18b2o$67bo96b2obobo65bo75bobo22bo3b2o40b3o21b2o
84b2o2bobo50b2o143bo3bo15bo3bo$28bo52b2o80b2o2b2o29b2ob2o32bobo16b2o
34b2o22bo22b2o45bo2b2o16bo2bo34b3o46bo3b2o53bo142b2ob2o15b2ob2o$obo24b
obo50bo2bo73b2o40bobo26b2o5b2o11b2o3bobo33bobo23bo20b2o45bo4bo17bobo
34bo101b2o$b2o25bo2bo49bobo72bo2bo37bo3bo27bo19bo3b2o36bo24bo70bo5b2o
12bo5b2o23bo5bo13bo28bo56bobo$bo27b2obo28b2o17b2ob2o72b2o38b4o28bob2o
16bob2o41b2obo19bo70b3obobo13b3obobo22bobo17bobo27b2o25b2o30bo$31bo28b
o2bo16bo3bo145bobo17bobo41bob2o18b2o38b2o32b2o18b2o25bobo17bobo26bobo
25bobo$3b2o4b2o18b2o30b3o17b3o73b2o38b2o32bo3b3o60b2o18b2o17bo17bo2bo
77b2ob2o15b2obobo32b2obo17bobo$4b2o3bo19bo126bo2bo36bo2bo35bo62bo19bo
15bobobo15bobobo101b2o32bob2o18b2o$3bo7bo19bo29b3o17b3o73b2o38b2o37bo
59bobo17bobo13b3ob2o14b3ob2o140b2o18b2o221bobo$10b2o3b2o13b2o3b2o23bo
3bo15bo3bo211b2o18b2o13bo19bo146bo19bo223b2o$12b2o2bo15b2o2bo23b2ob2o
15b2ob2o246b2o18b2o143bobo17bobo223bo$12bob2o16bob2o460b2o18b2o230bo$
747bo$659bo30bobo54b3o$658bo32b2o$183b3o472b3o30bo107bobo$183bo364bo
19bo19bo2bobo100bobo52b2o46bobobobo$184bo194bobo166bobo17bobo15bobo2b
2o63bo37b2o53bo20bo27b2ob2o$292bobo85b2o5bobo96bo59bo4bo14bo4bo15b2o3b
o62bobo37bo48b2o5bo17bobo$292b2o86bo6b2o95bobo59b6o14b6o83bo2bo10b2ob
2o25bo14bo30b2o3b2o3b2o13b2o3b2o24bo$285bobo5bo94bo47b2o18b2o27b2o3bob
o163b2obo9bob2obo15b2o6b2o13bobo28bo7b2o2bo15b2o2bo23bobo18bo$51b2o28b
2o148bobo52b2o119b2o26bo2bo16bo2bo31b2o56b2o18b2o18b3o2b2o18b2o37b2o5b
o14bo15bo2bo4bobo10bo2bo37bob2o16bob2o19b2o3bobo12b2o3bobo$51bobo7bobo
17bobo147b2o53bo94b3o23bo27bo2bo16bo2bo32bo56b2o18bobo19bo3bo17bobo33b
o2b2o6bob2o11bob2o13b3o17b3o82bo4bo2b3o9bo4bo$52b2o7b2o19b2o148bo102bo
11bobo5bo27bo4b2o19bo23bobo2bobo6bo5bobo2bobo26b2o53bo26bo19bo3bo5b2o
12bo5b2o28bo3bo6bobo12bobo118bob3o3bo11bob3o$54b2o6bo21b2o3b2o134bo62b
3o19bo23bobo10b2o5bobo25bo6bo18b2o23b2o4b2o6bobo3b2o4bobo24bobo54b2o
49b3obobo13b3obobo26b3o41b3o17b3o83b2o6bo11b2o$54bobo27bobobobo135b2o
21b2o39bo19b3o21bobo11bo5bobo31bo5b2o12bo5b2o27b2o2b2o11b2o26bo3b2o17b
2o29b2o2b2o3b2o43b2o18b2o72bo3bo15bo3bo$55b2o29bobo136b2o22bobo37bo3bo
19bo19b2obobo14b2obob2o29b3obobo13b3obobo27bobo46bo18bobo31bobo2b2o
138b2ob2o15b2ob2o$85b2ob2o132bo9bo17bobo39bobo17bobo22b2o5bobo10bo2bo
30b2o18b2o30bo50bo17bobo32bo4bo$59b2o161b2o7bobo17bobo39b2o3b2o13b2o3b
2o24b2o12b2o79b2o52b2o3b2o13b2o3b2o$58b2o161bobo8b2o3b2o13b2o3b2o36b2o
2bo15b2o2bo25bo94b2o53b2o2bo15b2o2bo$60bo173b2o2bo15b2o2bo36bob2o16bob
2o120bo55bob2o16bob2o$234bob2o16bob2o85b2o$56b3o283b2o$58bo285bo$57bo
742bo$739bobo2bobo52bo$740b2o2b2o53b3o$740bo4bo$389bo408bo$285bo101b2o
410bo$284bo103b2o45bo253b2o8bo9b2o86b3o$284b3o97b2o48bo152bo102bo4bo2b
o11bo31bo$383bobo48b3o148bobo5bo51b2o18b2o23bobobobob3o9bob2o28b2o4b2o
$385bo159b2o18b2o19b2o5bobo49bobob2o14bobob2o20b2ob2o15b2obo26bobo5bo
18b2o26bo6bo$288bobo47bobo65bo29bo106bo2bo16bo2bo26b2o52bobo17bobo44bo
33bo5b2o12bo5b2o20b2o5b3o18b2o$284b2o2b2o48b2o40bo25b3o26b2o106b2obobo
14b2obob2o19b2o55b2obo16b2obo44b2o33b3obobo13b3obobo19bobo8bo16bo2bo$
283bobo3bo41bobo5bo40b2o5b2o20bo25bobo107bob2o16bobobo18bobo54bo2bo16b
o2bo82b2o18b2o27b2o3b2o15bo2b2o$285bo23bo22b2o45bobo6bo19bo73bobo60bo
6bo12bo24bo3b2o17b2o31b2o17b2o26b3o105bo19bo$291b2o15bobo21bo54bo5b2o
12bo5b2o41b2o25b2o59b2o6bobo9b2o29bo17bobo77bo106bo19bo$291bo16bo2bo
76b3obobo13b3obobo18b2o20bobo25bo3bo61b2ob2o40bo5b2o12bo5b2o68bo3bo
104bo19bo$292bo16b2obo21b3o19bo33b2o18b2o21b2o19bo32bobo58bobo44b3obob
o13b3obobo68b2o107bobo17bobo$52b2o7bo20b2o2b2o203b2o17bobo23bo19b3o94b
o33b2o61bo46b2o18b2o29b2o39bobo108b2o18b2o$52bo2bo6bo19bo2bobo202bo2b
2o15bo2b2o20bo3bo19bo73b2o18b2o90b2o102b2o$54b2o4b3o21b2obobo201b2o2bo
15b2o2bo22bobo17bobo73bo19bo55b2o32bobo101bo3b2o$88bobo203b2o18b2o23b
2o3b2o13b2o3b2o68bobo17bobo33b2o19bo34bo104b2o$61bo27bo251b2o2bo15b2o
2bo69b2o18b2o33bo19bo133b2o7bo$61b2o3bo274bob2o16bob2o79b2o38b3o5bo17b
obo132b2o$60bobob2o377b2o41bo4b2o3b2o13b2o3b2o126bo$65b2o378bo39bo7b2o
2bo15b2o2bo$288bo204bob2o16bob2o$287bo464bo$287b3o461bo$751b3o2$749bo$
748bobo$643bo105bobo16b2obo25bobo$286b2o298bo57bo4bo100b2o16bob2o25b2o
$285bobo2b2o258bob2o11bob2o18bo3bo50b3o3bo97b2o4b2o18b2o24bo$287bo2bob
o91bo165b2obo11b2obo16b3o4b2o54b3o91bo2b2o5bobo17bobo17bo$290bo40bo6bo
46b2o102bo58b2o13b2o26b2o150bo3bo5bo19bo19b2o$329bobo7bo44b2o102bo51b
3o3bo2bo14bo80b2o23bo70b3o48b2o4b2o$330b2o5b3o141bo6b3o51bo3b2o16bobo
27b2o18b2o28bobo22bobo126bo19b2o$357bo47b2o75b2o57bo12b2o9b2o22b2o3bo
5b2o12bobo3b2o24bo2b2obo16bobo128bo17bobo$333b2o21bobo23b3o19bo2bo19b
2o28b2o22b2o70b2o35b2o3bo5bo14bo4bo27bob2o17bob2o118b3o4b2o19bo$310b2o
20bobo22bobo24bo4b2o3b2o8bobo2b2o16bobo27bobo89b3o3bo33bo6bob3o15bob3o
32b2o17bo121bo3bo2b2o16bob2o$309bo2bo21bo2b2obo17bobo22bo5bo2bo2bo9bo
4bo18bo29bo91bo45b2o18b2o34bo16bobo120bo5b2o2bo16bo2bo$285b2o3b2o13b2o
2bob2o24bob2o18b2o30b4o11b4o18bob2o9bobo14bob2o21b3o21b2o41bo100bobo
16b2o130b2o18b2o$285bobobobo13bobobo31b2o18b2o65bobo4bobo3b2o15bobobo
22bo3b2o16bobo141b2o$287bobo17bobo31bo19bo31b2o13b2o17b2obo4b2o5bo14b
2obobo21bo4bo20bo$286b2ob2o15b2ob2o28bobo17bobo19b3o9b2o13b2o17bo2b2o
4bo20bo2b2o29bo19bo$286bo2bo16bo2bo29b2o18b2o22bo44b2o8bo19b2o30b2o3b
2o13b2o3b2o$288bo2bo16bo2bo70bo46bo7b2o20bo32b2o2bo15b2o2bo$289b2obo
16b2obo113b3o8bobo16b3o33bob2o16bob2o$292bo19bo113bo29bo$292b2o18b2o2$
590bo$590bobo$590b2o3$541b2o18b2o$541bo19bo28b2o55bo5bo148b2ob2o14b2ob
2o$538bo3bo15bo3bo28bo56bo3bo141bo6bobobo16bobo$287bo193bo56b4o16b4obo
22b2obo16b2obo36b3o3b3o138bo7bobo2bo14bo3bo$287bobo192b2o3bo57bobo14bo
23bob3o3bo11bob4o181b3o6bob2obo13bob2obo$287b2o145b2o18b2o25b2o2b2o53b
2o3b2o13bo33bobo15bo190bo2bo15bo2bo$282bobo150bo19bo30b2o52b2o4bo13b2o
25b2o5b2o11b2o2b2o36b2o153b2o17b2o$283b2o43bo5bo94bo3bo19bo133bo19bo
40bobo23b2o$283bo42bobo4bo93bobo3b5o15b5o49b2o38b3o38bo4bo14bo41bo2b2o
bo17bobo117b3o$327b2o4b3o92b2o7bo19bo25bo4b2o17bobo37bo39b2o3b2o13b2o
44bob2o18b2o119bo$435bo17b2o28b2o4bo19bo32b2o4bo43bobo62b2o18b2o116bo$
288b2o141b2o2b2o15bobo27bobo3bo5b2o12bo5b2o27b2o112bo19bo119b2o$283b3o
3bo19b2o119bobo20bo35b3obobo13b3obobo26bo112bobo17bobo119bobo$285bo2bo
5b2o13bo4b2o38b2o76bo5b2o51b2o18b2o142b2o18b2o120bo$284bo4b3obobo10b2o
bobobobo15b2o2b2o17bobo80b2o$291b2o13bo2bob2o17bobo3bo19bo82bo$307b2o
23bo2bo5b2o13b2o3b2o$336b3obobo14bo2bobo$338b2o17bobo$358bo230bo$590bo
$588b3o$592bo$591bo$591b3o3$589bobo57bobo$590b2o57b2o$590bo59bo146b2o
18b2o$428bo368bo19bo$429b2o3bo46bo172bo144bo2bo16bo2bo$428b2o2b2o48b2o
129b2o36bo2bobo138bo2b5o15b5o$433b2o46b2o56bobo6bo43bob2o16bo2bo33bobo
2b2o137bobo$453b2o31bobo51b2o5bo44b2obo16b2obo34b2o142b2o2b3o16bob2o$
431bo21bobo30b2o52bo6b3o45bob2o16bob2o178bo2bo16b2obo$431b2o2b2obo17bo
bo28bo104b2obo2bo13b2obo2bo177bobo$281bobo3bo142bobo2bob2o18b2o50bo83b
obo17bobo177b2o2bo$282b2o4bo150b2o18b2o23b2o3b2o17bobo30b3o49bo2bo16bo
2bo175bobo$282bo3b3o43bo106bo19bo23bobo4bo17bobo32bo23b2o25b2o18b2o
178bo$330bobo104bobo17bobo25bo3bo5b2o12bo5b2o25bo3b2obo16bo2bo80b2o19b
2o124b2o$309bo21b2o3bo100b2o18b2o31b3obobo13b3obobo29bob2o17bobo78bo2b
o19bo2bo121b2o$285b2o21bobo24bo156b2o18b2o36b2o16bob2o76b3o21b3o123bo$
286b2o2b2o16bo2bo23b3o212bo19bo$285bo5bo17bobo236bobo17bobo77b3o21b3o$
290bo5b2o12bo5b2o40b2o188b2o18b2o77bo3bo19bo3bo$291b3obobo13b3obobo16b
2o4bo17bobo286bobobo19bobobo$293b2o18b2o20b2o2bobo17bobo284b2ob2o19b2o
b2o$334bo5b2o3b2o13b2o3b2o$342b2o2bo15b2o2bo$342bob2o16bob2o$809bo$
428bobo378bobo$429b2o378b2o$429bo3bo$433bobo46bobo$433b2o48b2o$483bo5b
o$453b2o32b2o$427b2o24bo30bo3b2o$426bobo5b2o18bo29b2o20b2o42bo91bo150b
o2bobo$428bo5bo20bo27bobo20bo38bo2b2o93b2o146bobo2b2o$280b2o18b2o134bo
19bo31b2o17bo35bobo3b2o91b2o148b2o3bo$281bo19bo28bo104b2o3b2o13b2o3b2o
26bo5b2o12bo5b2o28b2o105bo$280bo3bo15bo3bo24bo107b2o2bo15b2o2bo27bo5bo
13bo5bo133b2o$280b5o15b5o24b3o105bob2o16bob2o29bob3o15bob3o54bo24b2o6b
o11b2o34b2o$491b2o18b2o55bobo22bo2bob2obo11bo2bob2o26b2o$278b7o13b3ob
3o243b2obo17bobo21bo2bobo2b3o9bo2bobo28b2o$278bo2bo2bo12bo2bobo2bo27bo
bo204b2o6bob2o18b2o19bobo2bobo12bobo2bo2bo26bo4b2o18bo122b2o5b2o18b2o$
297b2o5b2o23b2o2b2o206b2o9b2o18b2o17b2o4bo13b2o4b2o33bo17bobo121bo3bob
obo12bo2bobobo$328bobo3bo205bo11bo19bo30bo47bo5b2o12bo5b2o116b4ob2o13b
4ob2o$330bo23bo195bobo17bobo28b2o49b3obobo13b3obobo$336b2o15bobo194b2o
18b2o26b2o2b2o50b2o18b2o121bob5o13bob5o$336bo16bo2bo241bobo196b2obo2bo
13b2obo2bo$337bo16b2obo72bo167bo$280b2o54b2o17bobo73bo$279bobo2b2o49bo
2b2o15bo2b2o69b3o5bo$281bo2bobo49b2o2bo15b2o2bo74bobo2bobo$284bo54b2o
18b2o75b2o2b2o44bo$441bo45b2o$486b2o$490bobo$454b2o34b2o$283b3o148b2o
17bo2bo34bo$283bo149bo2bo17bo2bo$284bo149b3o18b3o$510bo145bo$434b3o18b
3o23b3o6b2o17bobo144bobo$433bo3bo16bo3bo24bo6bo5b2o12bobo3b2o131bo6b2o
138bo$433b2ob2o16b2ob2o23bo8bo5bo14bo4bo129bobo144bobo$492bob3o15bob3o
131b2o145b2o$493b2o18b2o130bo26bo$645b2o6b2o16bobo125b2o$644bobo7bo17b
obo117b2o4bobo11b2o4b2o$653bo5b2o12bo5b2o111bo2bo2bo13bo2bo3bo$280b2o
18b2o352b3obobo13b3obobo113b5o5bo9b5o$280bo19bo355b2o18b2o124b2o$283bo
19bo492bo6b2o11bo$282b2o18b2o491bobo17bobo$275bo520bo5bo13bo$273bobo
24b4o116bo13bobo364b2o$274b2o7b2o15bo3bo116bo12b2o365bobo$277b2o4b2o
18b2o114b3o13bo$278b2o$277bo2$282bo200bobo$281b2o201b2o7bo$281bobo166b
2o32bo7bo$450bobo39b3o$430b2o3b2o15bo2b2o29b3o$426b2o2bo2bo2bo14bo4bo
31bo$425bobo4b4o16b4o31bo23bo$427bo82bobo$434b2o18b2o34b2o3b2o13bobo2b
2o$434b2o18b2o34bo2bo2bo14bo4bo$492b4o16b4o2$494b2o18b2o$494b2o18b2o6$
292bo$292bobo$292b2o4$426b2o18b2o$427bo19bo$426bo11bo7bo$426b2o10bobo
5b2o$427bo10b2o7bo2bo$427bobo17bobobo$274bo153bobo4b3o10bobo$273bo155b
o5bo13bo$273b3o160bo$303b2o$287b2o15bo2b2o$274b3o9bobo15bobobo$274bo
10bobo17bobo121b3o$275bo10bo19bo124bo$430bo!

4G:
x = 1051, y = 317, rule = B3/S23
329bo3bo$222bo3bo3bo45bo3bo47bobobobo89bo3bo$221bobobobobobo43bobobobo
47bo3bo89bobobobo$5bo3bo41bo3bo98bo3bo63bo3bo3bo45bo3bo45bo9bo87bo3bo$
4bobobobo39bobobobo45bo3bo3bo3bo38bobobobo165bobo7bobo83bo9bo101bo$5bo
3bo41bo3bo45bobobobobobobobo38bo3bo61bo52bo6bo45bo9bo83bobo7bobo99bobo
103bo3bo$2bo9bo35bo9bo43bo3bo3bo3bo46bo57bobo50bobo4bobo139bo9bo101bo
103bobobobo93bo$bobo7bobo33bobo7bobo91bo8bobo57bo52bo6bo55bo301bo3bo
93bobo109bo3bo$2bo9bo35bo9bo54bo36bobo8bo173bobo93bo101bo203bo52bo3bo
52bobobobo63bo3bo$112bobo36bo69bo3bo44bo9bo55bo93bobo99bobo100bo9bo
143bobobobo52bo3bo63bobobobo$bo10bo35bo9bo54bo106bobobobo42bobo7bobo
51bo97bo101bo100bobo7bobo90bo52bo3bo50bo9bo61bo3bo$obo8bobo33bobo7bobo
90bo3bo66bo3bo3bo40bo9bo51bobo93bo206bo9bo90bobo48bo9bo46bobo7bobo113b
o3bo3bo51bo3bo3bo3bo$bo10bo35bo9bo52bo37bobobobo72bobo102bo93bobo103bo
203bo48bobo7bobo46bo9bo58bo6bo47bobobobobobo49bobobobobobobobo$4bo46bo
3bo54bobo37bo3bo3bo70bo38bo3bo3bo3bo55bo91bo103bobo99bo10bo141bo9bo
115bobo4bobo47bo3bo3bo51bo3bo3bo3bo$3bobo44bobobobo54bo45bobo72bo34bob
obobobobobobo53bobo87bo107bo99bobo8bobo76bo3bo9bo117bo58bo6bo$4bo3bo3b
o38bo3bo102bo72bobo34bo3bo3bo3bo55bo87bobo207bo10bo76bobobobo7bobo58bo
56bobo113bo70bo$7bobobobo34bo9bo50bo40bo10bo70bo192bo107bo189bo3bo9bo
58bobo56bo55bo9bo47bobo68bobo$8bo3bo34bobo7bobo48bobo38bobo8bobo117bo
45bo9bo85bo109bobo243bo3bo14bo54bo57bobo7bobo47bo70bo$48bo9bo50bo40bo
10bo59bo9bo47bobo43bobo7bobo83bobo109bo100bo10bo91bo39bobobobo10bo56bo
bo57bo9bo$11bo208bobo7bobo47bo45bo9bo85bo210bobo8bobo89bobo39bo3bo10bo
bo56bo117bo3bo64bo$bo8bobo35bo9bo48bo42bo9bo60bo9bo97bo3bo199bo100bo
10bo91bo56bo41bo3bo14bo41bo3bo7bo3bo3bo3bo47bobobobo62bobo$obo8bo35bob
o7bobo46bobo40bobo7bobo62bo3bo51bo47bobobobo85bo3bo3bo3bo99bobo256bo
43bobobobo12bobo39bobobobo5bobobobobobobobo34bo3bo8bo3bo3bo60bo$bo46bo
9bo48bo42bo9bo62bobobobo49bobo47bo3bo85bobobobobobobobo99bo100bo9bo92b
o52bobo43bo3bo14bo41bo3bo7bo3bo3bo3bo34bobobobo14bobo$4bo3bo42bo3bo97b
o3bo66bo3bo51bo139bo3bo3bo3bo200bobo7bobo90bobo52bo165bo3bo16bo42bo3bo
11bo$3bobobobo40bobobobo48bo46bobobobo374bo100bo9bo92bo50bo56bo9bo65bo
59bo38bobobobo9bobo$4bo3bo42bo3bo48bobo46bo3bo374bobo102bo3bo145bobo
54bobo7bobo63bobo57bobo38bo3bo11bo$105bo427bo102bobobobo94bo50bo56bo9b
o65bo59bo$637bo3bo94bobo109bo3bo182bo$737bo48bo3bo3bo3bo48bobobobo67bo
48bo9bo53bobo$785bobobobobobobobo48bo3bo67bobo46bobo7bobo53bo$786bo3bo
3bo3bo122bo48bo9bo$973bo3bo55bo$972bobobobo53bobo$973bo3bo55bo3$213bo
204b2o18b2o$151bo62bo105bo97bobo17bobo184bobo$144b2o5bobo58b3o106b2o3b
o93bo19bo93bo91b2o5bobo$145b2o4b2o111bo55b2o2b2o94b2o18bobo89b2o92bo6b
2o$95bo48bo71bo46bo61b2o88bo9bo15b2o90b2o99bo$46bo46bobo3bo52bo61b2o
47b3o150b2o5b2o204b2o103bo$42bo3bobo45b2ob2o5b2o18b2o25b2o62b2o128b2o
68b2o7b2o97bo106bo17bo85bobo$43b2ob2o50b2o4bobo17bobo24bobo80b2o24bobo
59bobo2bob2o15bo2b2o173b2o6bo17b2o72b2ob3o14b2obobo84b2o42bo60bo10b2o
19b2o$42b2o24b2o36bo14b2obobo107bobo24b2o5bo54b2o2b2obo15bobobo66bo
105b2o2b2o2bobo16bo2bo70bob2o16bob2o2bo71b2obo16b2obo33bo59b2o3bob2obo
2bo14b2obo2bo147bo8bo$49b2o3b2o11bo2bo3b2o30b2o13bo2bob2o84bobo2bob2o
15bo2b2o20bo6bobo52bo23bo69b2o107bobo3b2o18b2o95b2o71bob2o16bob2o31b3o
58bobo3b2obob2obo15bob2obo148bo8bo$49bobobobo11b3obobobo24b3o19b2o89b
2o2b2obo15bobobo27b2o146bobo5b3o101bo5b2o18b2o74b2o94b2o18b2o34bo64bo
2bob2o14bo2bob2o145b3o6b3o$51bobo17bobo28bo110bo23bo86b3o99bo107bobo
17bobo74b2o2bo90bobo17bo35bobo62b2o20b2o86b2obo16b2obo$49bobobobo11b3o
bobobo25bo160bobo22b2o35bo100bo103bo5bo19bo74bo3b2o91bobo17bo34b2o173b
ob4o14bob4o49bo$49b2o3b2o11bo2bo3b2o28b3o107b3o46b2o6b2o15bo2b2o32bo
202b2o104bobo91bo17b2o215bo19bo47bo$42b2o24b2o34bo109bo48bo6bobo15bobo
bo235bobo249bo177b2o2bo15b2o2bo42b2o4b3o$43b2ob2o57bo109bo53bobo17bobo
489b2o3b2o18b2o37b2o111bo3b2o14bo2bo43bo$42bo3bobo221bo19bo489b2o5bo
17bobo37bobo111bo19b2o45bo$46bo135b2o603bob2o14bobob2o30b2o2bo114bo9bo
56bo6bo$183bo543b2o56b2obo2bo14bobo2bo28bobo115bobo9bobo52bobo5b2o10bo
$181bo536b2o6b2o56bobo3b2o15bo2b2o30bo6b2o107b2o6b2o2b2o53b2o6bobo9b3o
$181b2o536b2o7bo55bobo62bobo114bobo60b2o17bo$153bo29bo534bo3b3o55b3o2b
o63bo111b2o3bo58b2o2bo15b2o2bo$151b3o27b3o538bo59bo179b2o61bo4bo14bo4b
o$150bo29bo542bo57bo171b3o5bo64bo2b2o15bo2b2o$150b2o28b2o773bo69b2o18b
2o$954bo$423bo19bo$167b3o253bobo17bobo$167bo160bo92bo4bo14bo4bo76b2o
28b2o$168bo102bo54b2o93b6o14b6o76bobo27bobo$272bo54b2o197bo29bo74bo$
270b3o142bo7b2o18b2o82bo29bo71bobo$39b2o22b2o34bo24b2o199bo90bo6b2o18b
o84bo29bo71b2o$39bobo21bobo27bo6bo22bobo138b3o53bo3b2o16b2o70b3o27bo
84bo29bo$41bo23bo25b3o4b3o20b3obobo138bo5bobo44bobo2bobo12bo3bo82bo16b
2o83b2o3bobo24bo66b2o3bo$41b2o22b2o23bo29bo5b2o137bo6b2o45b2o18b4o83bo
bo104b2o24b2o65bo2bo2bobo$44b2o9bo12b2o3b2o15b2o7bo20b2o151bo152b2o
106bo6bo84bo2bo2b2o18bo$41b2obobo6b2o10b2obobobobo24b2o3bo214b2o7b2o9b
2o187bo7bo4bobo79bo3b2o21b3o$41bo2bobo7b2o9bo2bobobo25bobob2o214bobo3b
o2b2o9bobo82bobo101b2o6b2o4b2o81bo24bo186bo$39bobo2b2o17bobo2bobob2o
29b2o4b2o164b2o18b2o22bo4b2o3bo9bo84b2o101bobo5bobo84b3o6b2o16bob2o
134bo49bo$39b2o15bo6b2o4bo38b2o164bobo12bo4bobo26bobo98bo201b3o2bo16b
2obo136bo46b3o$56b2o52bo31bobo66bobo60bo14b3o2bo333bo5bo19bo131b3o51bo
$55bobo85b2o67b2o5bo52bobo17bobo125b2o205bo5b2o18b2o135bo49bobo$143bo
5b2o18b2o41bo7bo50bobo17bobo125bobo368bobo47b2o$148bobo19bo47b3o50b2o
18b2o128bo368b2o$43b2o6bo93bo3bo19bo668bo$44b2o4b2o94bo21bo52bo563b2o
52b2o3b2o18b2o$43bo6bobo91b3o20bo42b2o9bobo12bo542b2obobobo12b2ob2o34b
2o5bo17bobo$166bo44b2o8b2o12bobo541bob2obo14bob2obo40bob2o14bobob2o$
166bobo41bo24bo2bo545b2o19bo37b2obo2bo14bobo2bo$148bo18b2o47b2o18bobo
541b4o10bo5b4obo36bobo3b2o15bo2b2o$147bo65bo3bo15bo3bo14b2o526bo2bo9bo
6bo2b2o37bobo$147b3o63b4o16b4o14bobo539b3o42b3o2bo$253bo586bo$148bo64b
2o18b2o604bo$147b2o64b2o18b2o548b2o$147bobo634b2o$783bo4$415bo$416bo
13bo$414b3o5bo5b2o93b2o18b2o89bo$86bo180bo155b2o4b2o93bo19bo89bobo$87b
2o176b2o59bo90bo4b2o100bob2o16bob2o82bo3b2o$86b2o178b2o54bo3bobo88b2o
106bo2bo16bo2bo82b2o$261bobo59b2ob2o88bobo22b2o84b2o18bobo80b2o$262b2o
58b2o118bo79bo9bo15bo88bo$96bo160bo4bo157b2o19bo81b2o5b2o93b2o9b2o7b2o
$94b2o159bobo61bo100bo19bo81b2o7b2o91bo2bo8bobo5bo2bob2o$95b2o47bo111b
2o62bo100b3o17b3o180bo2bo2b2o12bo2bobo$142bobo13b2o17b2o106b2o31b3o3bo
98bo2b2o15bo2b2o76bo97bobo2bobobo10bobo2bobo$89bo53b2o3bo10bo18bo106bo
bo34b2o99bobobo15bobobo76b2o96b2o4bo13b2o4bo$90b2o57b2o8bob2o15bob2o
104bobo34b2o20b2o77bo19bo78bobo5b3o$89b2o26b2o29b2o10bobo16bobo84b2obo
17bobo56bo186bo101b2o$85b2o29bobo147bob2o18b2o36bo18bo186bo102bobo$86b
2o28bo60b4o89b2o18b2o33bobo17bobo287bo155bobo$85bo8b2o21b4o56bo2bo89bo
19bo35bobo17bobo442b2o$95bo24bo147bobo17bobo36bo19bo444bo$94bo5b2o17bo
5b2o141b2o18b2o$95b3obobo18b3obobo651b2o13b2o3b2o$97b2o23b2o654bo2bo
11bobo2bo2bo$779b3o11bo5b3o$253b3o$255bo525b3o7bo9b3obo$254bo524bo2bob
o5b2o7bo2bob2o$624bo154b2o4bo4bobo6b2o$625b2o159bo$413b2o18b2o189b2o
159b2o$160bobo250bobo17bobo$160b2o468bo$161bo253bobo17bobo190b2o$326bo
bo87b2o18b2o187bo3b2o$160b2o165b2o3bo85b2o18b2o186b2o158b2o$160bobo
164bo2b2o86bobo17bobo88bo95b2o159bobo$160bo159bo10b2o8bo77bo5b2o13bo
87bo257bo$319bobo18bobo81b2o14b2o80b2o4b3o4bo6b2o$319bobo2b2o14bobo2b
2o79bo95bobo10bobo4bobob2o97b2o$318b2obobobo13b2obobo2bo81b2o93bo10b2o
7bobo79bo19bo$322bo20bo2b2o68b2o6b2o2b2o93b2obo5b2o9b2obo78bobo17bo$
327bo89b2o4bobo4bo91bo2bobo3b2o9bo2bo78bobo17bo$327b2o3bo83bo8bo96b2o
2bo6bo8b2o80b2o18b2o$326bobo3bobo287b2o7bo10b2o$252b2o28b2o48b2o196bo
92bo6b2o11bo$253bo29bo245b2o92bobo4bobo10bobo$252bo13bo15bo246bobo92b
2o18b2o$252bobo9b2o16bobo$253bobo9b2o16bobo$254bo30bo$267bo17bobo$266b
2o18b2o499b2obo2b2o12b2obo2b2o$266bobo513bo4bob2o3bo12bob2o3bo$261b2o
520bo7b3o17b3o$143bo116bobo518b3o4b2obo16b2obo$144bo117bo525bo2bo16bob
o$142b3o634b2o8b2o$778bobo$146bo279bo353bo$144b2o115b2o163bobo$145b2o
113b2o57bobo104b2o$164b2o96bo57b2o100bobo$164bobo153bo4bo97b2o101bo$
142bobo2bo18bo157bo93b2o3bo7bo6b2o86bobo269b3o$143b2o2b3o16bob2o154b3o
18bo71bo2bo8b2o6bo2bo3b2o80b2o256b3o11bo$143bo6bo16bo2bo173bobo70bo2bo
5b2o2b2o5bo2bo2bobo88bobo249bo12bo$149bobo17bobo173bobo67bobo2bob2o2bo
bo6bobo2bobo82bo8b2o249bo$144b3o3bo19bo154b2obo17bobo66b2o4bobo2bo8b2o
4bo84b2o7bo90bo$144bo176bo3bob2o18b2o176b2o97bobo$145bo175b2o6b2o18b2o
180b2o18b2o72b2o3bo$320bobo6bobo17bobo179bo16bo2bo76b2o$330bo19bo171b
3o3b2obobob2o10bobobobob2o72b2o$317bo206bo3bo2bob2obo11bo2bob2obo66bo
10b2o18b2o$317b2o204bo5b2o18b2o72b2o9bo19bo$316bobo303bobo10bo14b2o3bo
$629b2o3b2o15bo2b2o$265bo363bobobo17bobo$263b2o367b2o18b2o$264b2o$624b
2o$623bobo$320bo304bo$265bo55bo458bo$263bobo53b3o459b2o$264b2o514b2o$
269bobo514b2o4bo9b2o4bo$269b2o18b2o494bobo2b3o10bo2b3o$270bo17bobo128b
obo356bo6bobobo13bobo$257bo30bo126bo3b2o357b2o4b2obo2bo11b2o2bo$256bob
o9b2o16bobo34bo92b2o2bo104b2o18b2o230bobo8bobo13bobo$255bobo9b2o16bobo
36bo90b2o108bo19bo243bo14b2o$140b2o18b2o92bo2bobo9bo14bo2bobo32b3o202b
o2bo16bo2bo$141bo19bo92b2o2bobo23b2o2bobo131b2o13b2o87b5o15b5o231b2o$
141bobo6bo10bob2o94bo29bo30bo101bobobo9bo2bobo341b2o2bo$142b2o7bo10b2o
bo154b2o21b2o80b2o9b2o2b2o84b3o17b3o233bo3b2o$149b3o14bo152bobo21bo76b
o105bo2bo15bo2bo237bobo$167bo176b3o68bo3b2o106b2o15bobo$147b2o17b2o
156b2obo19bo65bobo3bobo123bo$146bobo7b2o166bob2o18b2o66b2o$148bo6b2o
171b2o18b2o273b2o18b2o$157bo170bobo17bobo272bo19bo$329bo19bo274bo19bo$
318bo304b2o2b2o14b2o2b2o$141bo176b2o199b3o102bobobo15bobobo$141b2o174b
obo201bo2b2o98bo2bo16bobo$140bobo377bo3bobo96b2o20b2o$524bo$627b3o$
520b3o99b2o3bo$522bo100b2o3bo$521bo100bo$627b2o$626bobo$628bo2$424bo
206b2o$333bo89bo207bobo152bo$332bo90b3o205bo152bobo$332b3o450b2o$420bo
$421bo$419b3o3bo$142bo280b2o16b2o97bo$140b2o183b2o97b2o16bo96b2o245b2o
$141b2o181bobo114bo97bobo244bo$326bo93b2o18bo339bobo4bo$139bo279bobo2b
o14bo341b2o5bobo2bo13b2obo2bo$137bobo192b2o19bo64bo5bobo11bo342bo7b5o
13bob5o$138b2o2bobo188bo18bobo62bo6b2o11bo$142b2o188bo5b2o11bobo4b2o
56bo19bo187b2o18b2o133bo11b3o17b3o$143bo18b2o161b2o6b3obobo11bobobobob
o55bo19bo188bo19bo132bobo11bo2bo16bo2bo$161bobo160bobo8b2o15b2ob2o58bo
bo17bobo188bo2bo16bo2bo128b2o12b2o18b2o$160bo165bo89bobo17bobo186b5o4b
o10b5o$141b2o18b2o254bo19bo195bo146bo$141bo20bo154b2o205bobo98b3o5b3o
9b3o132b2o$138bo5bo17bobo151bobo206b2o98bo2bo15bo2bo131bobo$138b2o3b2o
18b2o153bo206bo100b2o16b2o$137bobo$518bob2o31bob2o62b2o$518b2obo2bo11b
2o15b2obo2bo60b2o2bo$522b3o11bobo18b3o2bo56bo3b2o5b3o$525b2o9bo23b3o
60bobo4bo$524bo2bo31bo71bo$525b2o32b2o5$527bo$527b2o$423bobo100bobo3bo
$424b2o3bo100b2o$424bo2b2o102b2o$137bo282bo7b2o10bo$138bo280bobo17bobo
$136b3o276b2obobobo12b2obobobo$415bob2obobo12bob2obo2bo$421bo19bobo$
425bobo14bo$425b2o$426bo$152bobo266b3o$143bo8b2o267bo$144bo8bo268bo$
142b3o2$523b2o38b2o$523b2o38b2o$166b2o372bo4bo$139b2o8b2o14bo2bo352b6o
14b2obo16b6o$138bobo8bo16bo2bo351bo4bo13b2o2b3o14bo5bo$140bo9bo16b2obo
353b2o38b3o$149b2o17bobo353bo39bo$148bo2b2o15bo2b2o348b2obo36b2obo$
149b2o2bo15b2o2bo346bo2bo36bo2bo$152b2o18b2o347b2o38b2o3$551b3o$551bo$
418bobo114b2o15bo$419b2o113b2o$419bo116bo$421bo$420bo$420b3o2b2o$424b
2o$426bo12b2o$420bo18bo$415bo3bobo19bo$415b2o3b2o18b2o$414bobo22bo$
420b2o18b2o$421bo19bo$421bobo17bobo$422b2o18b2o3$528b2o18b2o$527bobo
17bobo$527bobob2o14bobob2o$519bo8bobo2bo14bobo2bo$520b2o7bo2b2o15bo2bo
$519b2o29b2o4$526b2o$419bobo19b2o82bobo$420b2o4b2o12bo2bo2b2o79bo12b2o
$420bo3bo2bo13b2obo2bo81b3o8bobo$424b2o18b2o83bo10bo$418bo2b2obo19bo
85bo$416bobo2b2o2bo19bo$417b2o5b2o18b2o$420bo$420b2o$419bobo$423b2o$
423bobo$423bo!


Bob Shemyakin
BobShemyakin
 
Posts: 192
Joined: June 15th, 2014, 6:24 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby simsim314 » December 20th, 2016, 5:47 am

Guys how about an app that builds and destroys bits, using tables like of Bob's and growths SLs this way?

Obviously in a hope to eventually build every SL using this app, but for starters we can look at it as a "crystal" grower, but we have SLs as our crystal.
User avatar
simsim314
 
Posts: 1507
Joined: February 10th, 2014, 1:27 pm

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby chris_c » December 20th, 2016, 8:19 am

I have pushed an update to my github repo that contains explicit syntheses for 3100 out of 3286 16-bit still lifes. So far 2843 have cost less than 16 gliders and 96 have cost equal to 16 gliders.

In summary.txt you should now find a list of all 16-bit or fewer still lifes ordered by cost. A cost of 999 represents still lifes with syntheses that are unknown to my system.

Also I have added files such as stillNN.txt that list still lifes of population NN bits in cost order and a file still_list.txt that contains the costs of all still lifes in Niemiec order.

The script display_synth.py has been updated and now shows all steps of the synthesis in the same orientation. The script is given lower down in this post. Remember to delete any previously downloaded version of min_paths.txt and the script will automatically download the latest version instead.

First of all let me write a bit about the still lifes that do not have syntheses. Define two still lifes as equivalent if there are known methods of obtaining one still life from the other in both directions. Then there are 142 equivalence classes of still lifes with unknown synthesis that contain a 16-bit still life and have no known 16-bit ancestor outside the equivalence class.

(EDIT: In the previous sentence the second occurrence of "16-bit" was missing originally).

These are shown below. I know that mniemiec's site will contain syntheses for many of them but I am posting them here in the hope that people can deduce some important converters that I am missing:

x = 106, y = 2828, rule = B3/S23
3b2o$4bo$2bo$bob4o$2bo3bo$3bo$3o$o13$3bobo15b2ob2o$2bob2o15b2obo$2bo
22bo$b2ob2o15b4o$2bob2o16bo$o19bo$2o18b2o14$b2o$2bo$2bob2o$b2o2bo$3b2o
$b2o$obo$bo13$2b2o17b2o$3bo18bo$bo19bo$b2o18b2o$3bo19bo$3bo19bo$bob2o
16bob2o$obo17bobo$obo17bobo$bo19bo11$4b2o$3bo2bo$bo2bobo$b2ob2o$2bo$ob
o$2o14$4bo19bo$3bobo17bobo$bo2bobo14bo2bo$b2obobo14b2obobo$2bo2bo16bo
2b2o$obo17bobo$2o18b2o14$4bo$3bobo$bo2bobo$b2obobo$2bob2o$o$2o14$2b2o$
3bo$bo2b2o$b2obobo$2bo2bo$obo$2o14$3b2o$4bo2bo$4bobobo$2bobo2bo$bob2o$
bo$2o14$5b2o18b2o$6bo19bo$3b3o17b3o$3bo19bo$b2o18b2o$o19bo$b2o18b2o$2b
o19bo$bo18bo$b2o17b2o11$3b2o17b2o20bo19bo18bo19bo$2bo2bo16bo2bo17bobo
17bobo16bobo17bobo$3b2obo16b2obo15bobobo15bobo16bobobo15bobo$5bo19bo
16bobobo15bobobo14bobobo15bobobo$b4o16b4o16b2o2bo15b2o2b2o13b2o2bo15b
2o2b2o$2bo19bo19bo19bo18bo19bo$o19bo19bo19bo19bo19bo$2o18b2o18b2o18b2o
18b2o18b2o13$2b2o2b2o14b2o$2bobo2bo14bobob2o$4b2o18b2obo$3bo19bo$b3o
17b3o$o19bo$2o18b2o14$b2o18b2o$bo19bo$2bo2b2o15bo$3bo2bo16bob2o$bob2o
16bob2obo$obo17bobo$obo17bobo$bo19bo13$bo3b2o$b3o2bo$4b2o$3bo$b3o$o$2o
14$2ob2ob2o$bobo3bo$bo3b2o$2b3o$4bo16$2ob2o$bobobo$bo2bobo$2bobo2bo$3b
o2b2o16$2ob2ob2o$bobo3bo$bo2b3o$2bobo$3bo16$2ob2o$bobo$bo2b3o$2bobo2bo
$3bo2b2o16$2ob2o$bobobobo$bo2bob2o$2bobo$3b2o16$4b2o18bo$2obobo14b2obo
bo$bobo17bobobo$bob2o16bob2o$2bo19bo$obo17bobo$2o18b2o14$4b2o$2obo2bo$
bob2obo$bo2bob2o$2b2o16$2o2bobo13b2obo$o2bob2o13bob2o$2b2o20b2obo$4b2o
bo13b2obob2o$4bob2o13bobo16$2o3b2o$obobobo$2bobobobo$2b2o3b2o17$2o2bo$
o2bobo$2b2o2bo$4b2o$2b2o$bobo$2bo14$2o$o2b2o$2b2o$5bo$2b4o$2bo$3bo$2b
2o13$2o2b2o$o2bobo$2b2o$4bo$2b3o$bo$b2o14$ob2ob2o$2obob2o$3bo$3bob2o$
4bobo16$o2b2o$4o$5bo$2b4o$2bo$3bo$2b2o14$o2bob2o13b2o$4obo2bo12bo$4bo
2b2o12bob2o$2bo17b2o2bo$2b2o18bo$20b2o$20bo$21bo$20b2o12$o2bob2o$5obo
2$2bob2o$2b2obo16$o2bo2b2o$4o3bo$4b3o$2bobo$2b2o16$o3b2o$3o2bo$3b2o$2b
o2b3o$2b2o3bo16$2ob2obo17bobo14b2ob2obo17bobo$2obob2o13b2obob2o13bobob
ob2o13b2obob2o$3bo16b2obo17bo2bo15bobobo$3bob2o16bob2o17bob2o13bo2bob
2o$4bobo16b2obo18bobo16b2obo16$2o18b2o$o2b2o15bo2b2o$b2obo16b2obo$2bo
19bo$2bo19bo$2o18b2o$o19bo$2bo18bo$b2o17b2o12$2o3b2o$o2bo2bo$b2ob2o$2b
obo$2bobo$3bo15$2obo16b2o$ob2o16bo3b2o$22bo2bo$b5o15b2obo$2bo2bo16bob
2o$o21bo$2o19b2o14$o2bo$6o$6bo$2bo2bobo$bobo2bo$2bo15$o2bo$4o$4b2o$2bo
2bo$bob2o$bo$2o14$2o2bo$o2bobo$b2o2bo$3b2o$b2o$obo$bo14$2o18b2o$o19bo$
b3o17b3o$3bo19bo$b2o18b2o$o19bo$b2o18b2o$2bo19bo$bo18bo$b2o17b2o11$2o
3bo$o2b3o$b2o$3bo$b3o$o$2o14$2o$o$bo2b2o$2bo2bo$b2obo$3bo$obo$2o13$2ob
o$ob4o$6bo$b2o2bo$bo2bo$2b2o15$2ob2o$ob2o2bo$5b2o$b4o$bo2bo16$2obo$ob
4o$6bo$b2o2b2o$bobo$2bo15$2o$o3b2o$2bo2bo$b2obo$bo2b2o$3bo$2b2o14$2o
21b2o$obo17b2o2bo$2b3o2b2o11bob2o$bo3bo2bo13bo$b2o2b2o15bo$20b2o$20bo$
21bo$20b2o12$2o$obo2bo$2b4o$bo$b3o$4bo$3b2o14$2ob2o$ob2obo$5bo$b2obo$b
2ob2o16$2b2o$bo2bo$ob2o2bo$bo2b3o$3bo$4bo$3b2o14$2bo$bobo$o2bo$b3ob2o$
4bobo$3bo$2bo$2b2o13$2b2o$bobo$o2bob2o$b3o2bo$4bo$3bo$3b2o14$2b2o$bobo
$o3b2o$b2obobo$3bo2bo$3bobo$4bo14$2b2o$bo2bo$o2b2o$b2o2b2o$3bobo$3bobo
$4bo14$2b2o$bo2bo$o2bo$b2ob3o$3bo2bo$3bobo$4bo14$2bo$bobo2bo$o2b4o$b2o
$3b2o$3bobo$4bo14$2b2obo$bob2obo$o5bo$b3obo$3bob2o16$2b2ob2o$bobobo$o
5bo$b4obo$3bobo16$3b2o$b3o$o4bo$b5o2$3bo$2bobo$3bo13$3b2o$b3o$o4bo$b4o
bo$5bo$3bo$3b2o14$3bo$b3o2bo$o3b3o$b2o$3b2o$3bobo$4bo14$3bobo$b4obo$o
5bo$b3obo$3bob2o16$3b2o$b3obo$o5bo$bo5bo$2bob3o$3b2o15$2b2o$bobo2b2o$o
6bo$b2o3bo$2bo2bo$2bobo$3bo14$2bo$bobo$o2b3o$b2o3bo$2bo2b2o$o$2o14$2b
2o$bobo$o2bobo$b2ob2o$2bo$obo$2o14$3b2o$b3obo$o4bo$b4o$2bo$o$2o14$3b2o
$3bobo$2obo2bo$bobob2o$bobo$2b2o15$3b2o$3bobo$2obobo$bobob2o$bobo$2b2o
15$2ob2o$bobo$o3bo$b3obo$4bo$3bo$3b2o14$2ob2o$bobobo$o5bo$b4obo$3bobo
16$2obobo$bob2obo$o5bo$b5o$3bo16$2obo$bob3o$o5bo$b4obo$3bobo16$2ob2obo
13b2ob2o15b2ob2o15bobo$bobob2o14bobo2bo14bobo2bo13b2obob2o$o19bo4b2o
13bo4b2o16b2obo$b2o18b2o18b2o17b2o$2bo19bo19bo17bo$o20bo18bo20bo$2o19b
2o17b2o18b2o14$2b2ob2o$o2bobo$2obo3bo$3bo2b2o$3b2o16$3b2obo$obo2b2o$2o
bo$3bob2o$3b2obo16$3bo$o2b3o$3o3bo$3bob2o$2bo$bo$b2o14$3bobo$o2b2obo$
3o3bo$3bobo$2b2ob2o16$2b2o17b2o19b2o18b2o$o2bo16bo2bo18bo19bo$3o17b3o
20bo19bo$5bo19bo14b4o16b4o$2b4o16b4o14bo19bo$2bo19bo20b3o17b3o$3bo19bo
19bo2bo16bo2bo$2b2o18b2o21b2o17b2o13$b2obo$o2b2o$2o3b2o$2b2o2bo$2bob2o
16$b2o$o2bo$ob2o2bo$bo2b3o$3bo$4bo$3b2o14$b2o$o2bo$obo2bo$bob2obo$3bo
2bo$3bobo$4bo14$bo19bo$obob2o14bobob2o$ob2obo14bob2obo$bo19bo$3b2o18b
2o$4bo19bo$2bo20bo$2b2o19b2o13$bo$obo2b2o$obo3bo$bob3o$3bo$2bo$2b2o14$
bob2o$ob2obo$o5bo$b4obo$3bobo16$bobobo$ob3obo$o5bo$b5o$3bo16$bobobo$ob
3obo$o5bo$b3obo$3b2o16$b2o20b2o$obo20bobo$o24bo$b4o16b4o$5bo14bo$3b2o
16b2o$3bo18bo$4bo15bo$3b2o15b2o12$b2o$ob3o$o4bo$b3obo$4bo$3bo$3b2o14$b
2o$obo2bo$o2b3o$b2o$3bo$obo$2o14$b2o20b2o$obo20bobo$o2b2o16b2o2bo$b2o
2bo14bo2b2o$3b2o16b2o$3bo18bo$4bo15bo$3b2o15b2o13$bob2o$ob2obo$o5bo$bo
b2obo$2b2obo16$b2ob2o$obobo$o5bo$bo3b2o$2bobo$3b2o15$b2o$o2bo$obo$bob
3o$2bo2bo$obo$2o14$b2ob2o$obobo$obo2bo$bobobo$2bobo$3bo15$b2o$obo$o2b
2o$b2o2bo$2bob2o$2bo$b2o14$b2o$ob3o$o4bo$b4o$2bo$o$2o14$2b2o$o2b3o$2o
4bo$bob3o$bobo$2bo15$2b2o$bobo$bo2b2o$2o4bo$4b3o$3bo$3b2o14$3bobo$3b2o
bo$b2o3bo$o2bobo$bobob2o$2bo15$2b2ob2o$3bobo$bo3bo$ob3o$bo$2bo$b2o14$
2b2o$3bo$bo2b2o$ob2o2bo$bo2b2o$3bo$2b2o14$3b2o$2bobo$bo$ob5o$bo4bo$3bo
$2b2o14$4bo$2b3o$bo$ob5o$bo4bo$3bo$2b2o14$b2o$o2bo$bobo$2obobo$2bob2o$
2bo$b2o14$2b2o$3bo$3o3bo$o2b4o$3bo$4bo$3b2o14$3b2o$3bo$2obo2bo$obob3o$
3bo$4bo$3b2o14$4b2o$3bo2bo$2o2b2o$ob2o$3bo$obo$2o14$2b2o$3bo$3o$o2b3o$
2bo2bo$obo$2o14$2b2obo14bob2o$2bob2o14b2obo$obo20bobo$2o2b2o14b2o2b2o$
5bo14bo$3bo17bo$3b2o15b2o14$2b2o$2bo2bo$obob2o$2obo$3bo$3o$o14$b2o$2b
3o$o4bo$4obo$4bo$2bo$2b2o14$b2o$2bo$o2b2o$3o2bo$3b3o$2bo$2b2o14$4b2o$b
2o2bo$o2b2o$2obo$3bo$3o$o14$2b2o$bo2bo$ob2obo$2o2bo$3bo$3o$o14$2b2o$bo
bo$o$6o$5bo$2bo$bobo$2bo13$2b2o$bo2bo$o2bobo$4obo$4bo$2bo$2b2o14$3bo$b
3o$o$6o$5bo$2bo$bobo$2bo13$2b2o18b2o$bo2bo16bo2bo$o2bobo14bo2bo$2obobo
14b2obobo$2bobo17bob2o$2bo19bo$b2o18b2o14$3bo$b3o$o$ob2o$bobo$3bob2o$
3b2obo14$2bo19bo$bobo17bobo$obo17bobo$o2b3o14bo2b3o$b2o2bo15b2o2bo$2bo
19bo$bo18bo$b2o17b2o13$2bo$bobo$obo$o4bo$b5o2$3bo$2bobo$3bo12$4b2o$b2o
2bo$ob3o$o$b2o$2bo$o$2o13$2b2o$2bobo$2o3bo$o5bo$bo3b2o$2bobo$3b2o14$2b
o$2b3o$2o3bo$o2b2o$b2o$2bo$o$2o13$2b2o$3bo$3o$o$b2o$3bo$3b3o$6bo$5b2o
12$4b2o$4bo$2o3bo$o5bo$bo3b2o$2bo2bo$3bobo$4bo13$3bo$2bobo$o2bobo$2obo
bo$bob2o$bo$2o14$b2ob2o$2bobo$bo3bo$2b2obo$obobo$2o15$4bo19bo$3bobo17b
obo$3bo2bo16bo2bo$b2o2b2o14b2o2b2o$o19bo$b2o18b2o$2bo19bo$bo18bo$b2o
17b2o12$4bo$3bobo$3bo2bo$b2o2b2o$o$3o$3bo$2b2o13$3bo$2bobo$3bobo$bobob
o$obobo$obo$bobo$2bo13$2bo$bobo$2bo$5bo$6o$o$3bo$2bobo$3bo12$2b2o17b2o
$bo2bo16bo2bo$2b2obo16b2obo$4bo19bo$4o16b4o$o19bo$bo19bo$2o18b2o13$4bo
$2b3o$bo$bo2b3o$2obo2bo$3bo$3b2o14$b2obo$o2b2o$bo$2b2obo$obob2o$2o15$
2obo$ob2o$4b2o$b2o2bo$o2b2o$2o15$2bo$2b3o$2o3bo$bo2bo$o3b2o$b3o$3bo14$
3b2o$3bobo$bobo2bo$obobobo$obob2o$bo15$2b2o$2bo$3bo$3o2bo$o2b3o$2bo$3b
o$2b2o13$4b2o$5bo$2b3o$2bo2b3o$3bo3bo$3o$o14$4bo$3bobo$3bo2bo$2b2o3bo$
2bo3b2o$3bo$3o$o!


The updated display_synth script:

import golly as g
import os
from urllib2 import urlopen

URL = "http://raw.githubusercontent.com/ceebo/glider_synth/master/min_paths.txt"

GLIDERS = [(g.parse("3o$2bo$bo!", -2, 0), 1, -1),   #NE
           (g.parse("bo$2bo$3o!", -2, -2), 1, 1),   #SE
           (g.parse("bo$o$3o!", 0, -2), -1, 1),     #SW
           (g.parse("3o$o$bo!", 0, 0), -1, -1)]     #NW

def get_gliders(glider_lists, t):

    ret = []

    for (glider, vx, vy), glider_list in zip(GLIDERS, glider_lists):
       
        for lane, timing in glider_list:

            phase = (t + timing) % 4
            d = (t + timing) // 4

            ret += g.transform(g.evolve(glider, phase), lane + d * vx, d * vy)

    return ret

# return the transformation t2 o t1
def compose(t1, t2):

    x, y, a, b, c, d = g.transform(g.transform([0, 0, 1, 0, 0, 1], *t1), *t2)

    return (x, y, a-x, c-x, b-y, d-y)

# return the inverse of t
def inverse(t):

    x, y, a, b, c, d = t

    det = a * d - b * c

    # assert(det in [-1, +1])

    inv = [det * i for i in [d, -b, -c, a]]

    return g.transform([-x, -y], 0, 0, *inv) + inv

def display_edge(edge, post_transform=(0,0,1,0,0,1)):

    input_code, output_code, phase, glider_lists, transform = edge

    input_cells = decodeCanon(input_code) + get_gliders(glider_lists, 0)
    output_cells = g.evolve(decodeCanon(output_code), phase)

    new_transform = compose(inverse(transform), post_transform)

    input_cells = g.transform(input_cells, *new_transform)
    output_cells = g.transform(output_cells, *post_transform)

    g.putcells(input_cells, 0, 0)   
    g.putcells(output_cells, 100, 0)

    return new_transform

def edge_cost(edge):
   
    _, _, _, glider_lists, _ = edge
    return sum(len(l) for l in glider_lists)

def edge_from_string(s):

    t = s.split(";")

    glider_lists = []
    for gliders_string in t[3:7]:
        glider_list = []
        if gliders_string:
            gs = gliders_string.split(",")
            for i in range(0, len(gs), 2):
                glider_list.append((int(gs[i]), int(gs[i+1])))
        glider_lists.append(glider_list)

    transform = tuple(map(int, t[7].split(",")))

    return (t[0], t[1], int(t[2]), glider_lists, transform)   

def display_synthesis(apgcode):

    found = True
    cost = 0
    transform = (0,0,1,0,0,1)

    while apgcode != "0":

        if apgcode not in min_paths:
            return "Don't know how to synthesise %s" % apgcode

        edge = min_paths[apgcode]

        # move everything down 100 cells
        if g.getrect():
            cells = g.getcells(g.getrect())
            g.new('')
            g.putcells(cells, 0, 100)
           
        transform = display_edge(edge, transform)
                   
        # update cost and apgcode
        apgcode = edge[0]
        cost += edge_cost(edge)
       
    return "Cost %d gliders " % cost

# Obtains a canonical representation of any oscillator/spaceship that (in
# some phase) fits within a 40-by-40 bounding box. This representation is
# alphanumeric and lowercase, and so much more compact than RLE. Compare:
#
# Common name: pentadecathlon
# Canonical representation: 4r4z4r4
# Equivalent RLE: 2bo4bo$2ob4ob2o$2bo4bo!
#
# It is a generalisation of a notation created by Allan Weschler in 1992.
def canonise(duration):

    representation = "#"

    for _ in range(duration):
       
        g.run(1)
        rect = g.getrect()

        if len(rect) == 0:
            return "0"

        if ((rect[2] <= 40) & (rect[3] <= 40)):
            # Fits within a 40-by-40 bounding box, so eligible to be canonised.
            # Choose the orientation which results in the smallest description:
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0], rect[1], 1, 0, 0, 1))
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0]+rect[2]-1, rect[1], -1, 0, 0, 1))
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0], rect[1]+rect[3]-1, 1, 0, 0, -1))
            representation = compare_representations(representation, canonise_orientation(rect[2], rect[3], rect[0]+rect[2]-1, rect[1]+rect[3]-1, -1, 0, 0, -1))
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0], rect[1], 0, 1, 1, 0))
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0]+rect[2]-1, rect[1], 0, -1, 1, 0))
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0], rect[1]+rect[3]-1, 0, 1, -1, 0))
            representation = compare_representations(representation, canonise_orientation(rect[3], rect[2], rect[0]+rect[2]-1, rect[1]+rect[3]-1, 0, -1, -1, 0))
       
    if representation == '#':
        prefix = ""
    elif duration == 1:
        prefix = "xs%d_" % int(g.getpop())
    else:
        prefix = "xp%d_" % duration

    return prefix + representation

# A subroutine used by canonise:
def canonise_orientation(length, breadth, ox, oy, a, b, c, d):

    representation = ""

    chars = "0123456789abcdefghijklmnopqrstuvwxyz"

    for v in xrange(0, breadth, 5):
        zeroes = 0
        if (v != 0):
            representation += "z"
        for u in xrange(length):
            baudot = 0
            for w in xrange(v, v+5):
                x = ox + a*u + b*w
                y = oy + c*u + d*w
                baudot = (baudot >> 1) + 16*g.getcell(x, y)
            if (baudot == 0):
                zeroes += 1
            else:
                if (zeroes > 0):
                    if (zeroes == 1):
                        representation += "0"
                    elif (zeroes == 2):
                        representation += "w"
                    elif (zeroes == 3):
                        representation += "x"
                    else:
                        representation += "y"
                        representation += chars[zeroes - 4]
                zeroes = 0
                representation += chars[baudot]
    return representation

# Compares strings first by length, then by lexicographical ordering.
# A hash character is worse than anything else.
def compare_representations(a, b):

    if (a == "#"):
        return b
    elif (b == "#"):
        return a
    elif (len(a) < len(b)):
        return a
    elif (len(b) < len(a)):
        return b
    elif (a < b):
        return a
    else:
        return b

chars = "0123456789abcdefghijklmnopqrstuvwxyz"

# Based on code by Arie Paap Sept. 2014
def decodeCanon(canonPatt):

    if not canonPatt or canonPatt[0] != 'x' or '_' not in canonPatt:
        return []
   
    blank = False
    x = y = 0
    clist = []
   
    for c in canonPatt[canonPatt.find("_")+1:]:
   
        if blank:
            x += chars.index(c)
            blank = False
        else:
            if (c == 'y'):
                x += 4
                blank = True
            elif (c == 'x'):
                x += 3
            elif (c == 'w'):
                x += 2
            elif (c == 'z'):
                x = 0
                y += 5
            else:
                v = chars.index(c)
                for i in range(5):
                    if v & (1 << i):
                        clist += [x, y+i]
                x += 1

    return clist

def get_period(max_period):
   
    cells = g.getcells(g.getrect())
    cells = zip(cells[::2], cells[1::2])

    for t in range(max_period):
       
        g.run(1)

        if int(g.getpop()) != len(cells):
            continue

        if all(g.getcell(x, y) for x, y in cells):
            return t + 1

    g.show("Not still life or oscillator")
    g.exit()

if os.path.exists("min_paths.txt"):
    message1 = "Read data from \"%s\"." % os.path.abspath("min_paths.txt")
else:
    g.show("Downloading min_paths.txt...")
    with open("min_paths.txt", "w") as f:
        f.write(urlopen(URL).read())
    message1 = "Downloaded data from \"%s\"." % URL

min_paths = {}

with open("min_paths.txt") as f:
    for s in f:
        edge = edge_from_string(s)
        min_paths[edge[1]] = edge

if g.getselrect():
    cells = g.getcells(g.getselrect())
elif g.getrect():
    cells = g.getcells(g.getrect())
else:
    g.show("Empty")
    g.exit()

g.addlayer()
g.new('')
g.putcells(cells)

apgcode = canonise(get_period(46))

g.new(apgcode)

message2 = display_synthesis(apgcode)

g.fit()
g.show(message1 + " " + message2)


BobShemyakin wrote:Offer my collection of converters. Partially assembled on the Forum but there are converters found me.


Thanks! A lot of these are new to me and I'm sure they will provide many reductions and hopefully solve some of the unknown syntheses as well.
chris_c
 
Posts: 719
Joined: June 28th, 2014, 7:15 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby BlinkerSpawn » December 20th, 2016, 1:12 pm

chris_c wrote:
BobShemyakin wrote:Offer my collection of converters. Partially assembled on the Forum but there are converters found me.


Thanks! A lot of these are new to me and I'm sure they will provide many reductions and hopefully solve some of the unknown syntheses as well.

Organized versions of 2G and 3G:
x = 563, y = 221, rule = B3/S23
10bo3bo39bo3bo3bo37bo3bo48bo3bo47bo3bo46bo50bo3bo50bo48bo3bo35bo3bo43b
o3bo3bo35bo3bo$9bobobobo37bobobobobobo35bobobobo46bobobobo45bobobobo
44bobo48bobobobo48bobo46bobobobo33bobobobo41bobobobobobo33bobobobo$10b
o3bo39bo3bo3bo37bo3bo48bo3bo47bo3bo46bo50bo3bo50bo48bo3bo35bo3bo43bo3b
o3bo35bo3bo3bo$17bo132bo9bo41bo9bo195bo9bo29bo9bo91bobo$7bo8bobo33bo
44bo6bo44bobo7bobo39bobo7bobo42bo47bo9bo47bo44bobo7bobo27bobo7bobo37bo
43bo9bo$6bobo8bo33bobo42bobo4bobo44bo9bo41bo9bo42bobo45bobo7bobo45bobo
44bo9bo29bo9bo37bobo41bobo$7bo44bo44bo6bo151bo47bo9bo47bo134bo43bo$
160bo51bo205bo39bo$6bo3bo42bo3bo36bo9bo54bobo49bobo42bo46bo10bo33bo3bo
9bo54bobo37bobo38bo3bo38bo4bo$5bobobobo40bobobobo34bobo7bobo54bo51bo
42bobo44bobo8bobo31bobobobo7bobo35bo3bo14bo39bo38bobobobo36bobo2bobo$
6bo3bo3bo38bo3bo3bo32bo9bo52bo51bo46bo46bo10bo33bo3bo9bo35bobobobo10bo
24bo3bo10bo32bo3bo5bo3bo3bo25bo3bo4bo4bo3bo$13bobo44bobo93bobo49bobo
188bo3bo10bobo22bobobobo8bobo30bobobobo11bobo23bobobobo11bobo$14bo46bo
30bo3bo3bo3bo52bo51bo46bo105bo52bo24bo3bo10bo32bo3bo13bo25bo3bo13bo$6b
o10bo46bo26bobobobobobobobo54bo45bo48bobo45bo10bo46bobo48bo45bo50bo31b
o11bo$5bobo8bobo44bobo26bo3bo3bo3bo54bobo43bobo48bo45bobo8bobo46bo48bo
bo43bobo48bobo29bobo9bobo$6bo10bo46bo95bo45bo96bo10bo97bo45bo50bo31bo
11bo$104bo98bo52bo105bo46bo$6bo9bo36bo9bo39bobo44bo9bo41bobo50bobo45bo
9bo47bobo44bobo37bo9bo39bo9bo33bo9bo$5bobo7bobo34bobo7bobo39bo44bobo7b
obo41bo52bo45bobo7bobo47bo46bo37bobo7bobo37bobo7bobo31bobo7bobo$6bo9bo
36bo9bo86bo9bo142bo9bo134bo9bo39bo9bo33bo9bo$9bo3bo42bo3bo43bo48bo3bo
43bo3bo3bo3bo42bo49bo3bo51bo44bo3bo3bo3bo31bo3bo45bo3bo39bo3bo$8bobobo
bo40bobobobo41bobo46bobobobo41bobobobobobobobo40bobo47bobobobo49bobo
42bobobobobobobobo29bobobobo43bobobobo37bobobobo$9bo3bo42bo3bo43bo48bo
3bo43bo3bo3bo3bo42bo49bo3bo51bo44bo3bo3bo3bo31bo3bo45bo3bo39bo3bo7$
140bo156bo97bo$39bo53bo47bo153b2o96bobo$40bo53bo44b3o2bo49bo45bo55b2o
45bo50b2o$2bo35b3o2bo48b3o49bobo47bobo43bobo48bobo50bo52bobo39bo101bo$
3bo19b2o18bobo43b2o53b2o45b2ob2o44b2o50b2o48b3o52b2o40bobo51bo39bo6bo$
b3o19bobo17b2o19b2o22bobo74b2o23bobo99bo105bo37bo2b2o52bobo38b2o4b3o$
24bobo36bo2bo23bo24b2o48bobo24bo23bo25b2o96b2o92bobo56b2o38b2o$6b2o17b
obo18b2o16bo2bo28b2o16bo2bo28b2o19bo28b2o17bobo23bobo3bo48b2o19b2o20bo
bo5b2o18b2o27b2o4b2o15bo2b2o11b2o2bo49b2o18bo27bo$b2o3bobo17bobo17bobo
16b2obo27bobo15bobobo27bo19bo29bobo16b2obo24bo2bobo16bo2bo27bo2bo16bo
2bo21bo4bobo17bobo27bobobo2bo14bobo2bo14bobo19bo26b3obo3b3o9b3o26bobo$
2o6bo19bo19bo19bo29bo16bo2bo28b3o17b3o28bo19bo28b2o16b4o28b2obo16b2obo
25b2o19bo30bob2o16bob2o15bobobo17bobo24bo4bo3bo10bo30b2o$2bo5b2o18b2o
18b2o18b2o28b2o18b2o29bo19bo28b2o18b2o80bo19bo76b2o18b2o17bobo2bo14bob
o2bo24b2o3b2o3bo9b2o31b2o19bo$247b2o18b2o31b2o18b2o76bo19bo17b2o3b2o
13b2o3b2o76bobo17bobo$247b2o18b2o128bo19bo122bobo17bobo$397b2o18b2o
122bo19bo5$146bo$145bo$145b3o$96bo101bobo144bobo$49bo44b2o46bobo50bo2b
2o96bobo46b2o$44bo2b2o42bo3b2o46b2o48bobo3bo38bobo55b2o48bo$42bobo3b2o
14bo24bobo51bo50b2o43b2o2bo48bo4bo$43b2o18bobo24b2o22b2o123bo3bobo47b
2o47b2o$64bobo47bobo50b2o49b2o23b2o47b2o47bobo24bo$46bo19bo29bo19bo30b
o18bobo29b2o17bo2bo26bo18b2o29b2ob2o15b2ob2o21bo2b2obo17bobo28bo19bo$
46b3o17b3o27b3o17b3o27bobob2o14bobob2o24bo2bo16bo2bo26bobo17bobo27bobo
bo17bobo25bob2o18b2o27bobo17bobo$49bo19bo29bo19bo27b2ob2o15b2ob2o23bob
2o16bob2o28bo19bo28bobo2bo14bobo2bo74bobo19bo$48b2o18b2o28b2o18b2o75bo
19bo81bo2b2o14b2o2b2o75bo$194b2o18b2o178b2o$393bobo$395bo$397b2o$397bo
bo$397bo3$195bo$196bo$92bobo99b3o98bobo$93b2o3bo100bo48bo42bo3b2o$93bo
2b2o44bobo53bo48bo44b2o2bo50bo$97b2o44b2o53b3o40bo5b3o41b2o54bobo$115b
o27bo98bo104b2o$114bobo123b3o99bo$97bo17b2o22b3o7bo18b2o27b2o17b2ob2o
26bo19bo29b2o44bo3bo$96bobo18b2o22bo6bobo16bo2bo25bo2bo16bo3bo25bobo
17bobo29bo3b2o14bo22b3o2bobo17b2o$97bobo17bobo20bo8bo17b3o27b3o17b3o
27bobo16bo2bo28bobo2bo13bobo2b2o22bo2bo16bo2bo$98bo19bo129b2o17bobo26b
obob2o16bobo2bo23b3o17b3o$147b5o15b5o25b2obo16b2obo47bo27b2o18bobob2o$
148bo2bo16bo2bo25bob2o16bob2o95b2o28bob2o16bob2o$146bo19bo179b2obo16b
2obo$146b2o18b2o5$93bo$94bo105bo94bo51bo$92b3o104bo47bo47bobo47b2o$
142bo56b3o43b2o43bobo2b2o49b2o$115bo27bo53bo48b2o43b2o48bobo$91b2o21bo
bo24b3o51bobo44bo48bo50b2o$92b2o2b2o16bo2bo48b2o28b2o45b2o97bo$91bo5bo
17bobo47bo2bo49bo23b2o$96bo19bo23b2o4b2o3b2o13bobo2b2o26bo17bobo27bo
48b2o48b2o3b2o14b2o2b2o$97b3o17b3o19bobo4bo2bo2bo14bo4bo25bobo17bobo
25bobo18b2o27bo19b2o28bo2bo2bo14bo4bo$99bo19bo21bo6b4o16b4o27bo19bo27b
obo16bo2bo28bo17bobo29b4o16b4o$248b2o16bo2bo27b2o18b2o$150b2o18b2o95b
2o81b2o18b2o$150b2o18b2o178b2o18b2o5$345bo$346b2o$345b2o$240bobo$241b
2o2bobo48bobo$199bo41bo3b2o46bo2b2o46b3o$197bobo46bo44bobo3bo48bo$194b
2o2b2o92b2o51bo$195b2o$194bo23bo98bo33b2o14b2o2b2o$199bo17bobo26b2o18b
o29b2o3b2o13bobo2b2o23b2obo2bo14bo4bo$198bobo16bo2bo25bo18bobo28bo2bo
2bo14bo4bo23bob4o16b4o$198bobo17bobo27bo17bobo29b4o16b4o$196bobob2o14b
obob2o25b2o18b2o81b2o18b2o$196b2o18b2o82b2o18b2o28b2o18b2o$300b2o18b2o
9$245bo93bobo$244bo95b2o$193bobo48b3o93bo$189bo3b2o$190b2o2bo46b2o$
189b2o23b2o26b2o22b2o$196b2o16bobo24bo4b2o3b2o13bobo2b2o74bo$196bo20bo
28bo2bo2bo14bo4bo73bobob2o15b2ob2o$198bo19bo29b4o16b4o68b2o4bobobobo
15bobobo$197b2o18b2o122b2o4b2o3bo14bo4bo$250b2o18b2o68bo8b3o15bob3o$
250b2o18b2o77bo18b2o9$248bo$246bobo$193bobo47b2o2b2o97bobo$189bo3b2o
49b2o98bobobobo$190b2o2bo48bo101b2ob2o$189b2o23b2o51b2o$196b2o16bobo
29bob2o16bo2bo77bo$196bo2bo17bobo26b2obo16b2obo76bobo18b2o$198b2o18b2o
29bob2o16bob2o74bobo17bobo$249b2obo16b2obo76bo19bo$349b2o18b2o10$195bo
52bo$194bo51bobo$194b3o46b2o2b2o$244b2o$191b2o50bo$192b2o22b2o49bo$
191bo4b2o18bobo27bobo17bobo$196bo2bo17bobo26b2obo16b2obo$198b2o18b2o
29bo19bo$249b2o18b2o15$193bo$192bo$192b3o4b2o18b2o$199bo16bo2bo$190bo
5b2obo15bobobo$191b2o3b2ob2o14bobob2o$190b2o24bo12$193bobo$193b2o$194b
o$216bo$191b2o3b2o17bobo$190bobo4bo17bobo$192bo3bo19bo$197b3o17b3o$
199bo19bo!

x = 915, y = 202, rule = B3/S23
7bo13bo3bo43bo3bo41bo3bo46bo3bo3bo3bo39bo3bo43bo3bo3bo46bo3bo61bo3bo
84bo3bo87bo88bo3bo80bo57bo3bo53bo3bo43bo3bo$6bobo11bobobobo41bobobobo
39bobobobo44bobobobobobobobo37bobobobo41bobobobobobo44bobobobo59bobobo
bo82bobobobo85bobo86bobobobo78bobo55bobobobo51bobobobo41bobobobo$7bo
13bo3bo43bo3bo41bo3bo46bo3bo3bo3bo39bo3bo43bo3bo3bo46bo3bo61bo3bo84bo
3bo87bo88bo3bo80bo57bo3bo53bo3bo43bo3bo$18bo9bo37bo9bo35bo9bo102bo158b
o9bo78bo9bo313bo9bo105bo$7bo9bobo7bobo35bobo7bobo33bobo7bobo53bo37bo8b
obo37bo53bo6bo57bobo7bobo76bobo7bobo83bo85bo9bo77bo53bobo7bobo46bo6bo
40bo8bobo$6bobo9bo9bo37bo9bo35bo9bo53bobo35bobo8bo37bobo51bobo4bobo57b
o9bo78bo9bo83bobo83bobo7bobo75bobo53bo9bo46bobo4bobo38bobo8bo$7bo169bo
37bo48bo53bo6bo242bo85bo9bo77bo112bo6bo40bo$28bo36bo10bo35bo9bo271bo
88bo323bo$7bo19bobo34bobo8bobo33bobo7bobo51bo38bo3bo46bo3bo45bo9bo67bo
bo86bobo83bo84bo10bo63bo3bo9bo63bobo43bo9bo39bo3bo$6bobo19bo36bo10bo
35bo9bo51bobo36bobobobo44bobobobo43bobo7bobo67bo88bo83bobo82bobo8bobo
61bobobobo7bobo44bo3bo14bo43bobo7bobo37bobobobo$7bo17bo42bo46bo3bo55bo
38bo3bo3bo42bo3bo3bo41bo9bo65bo88bo87bo84bo10bo63bo3bo9bo44bobobobo10b
o47bo9bo26bo3bo8bo3bo3bo$24bobo40bobo44bobobobo100bobo48bobo115bobo86b
obo306bo3bo10bobo82bobobobo14bobo$7bo17bo42bo3bo3bo38bo3bo53bo48bo50bo
39bo3bo3bo3bo65bo88bo87bo173bo61bo33bo3bo7bo3bo3bo3bo26bo3bo16bo$6bobo
13bo48bobobobo34bo9bo49bobo39bo10bo50bo35bobobobobobobobo67bo82bo89bob
o83bo10bo76bobo57bo35bobobobo5bobobobobobobobo38bo10bo$7bo13bobo48bo3b
o34bobo7bobo49bo39bobo8bobo48bobo35bo3bo3bo3bo67bobo80bobo89bo83bobo8b
obo76bo57bobo35bo3bo7bo3bo3bo3bo38bobo8bobo$22bo89bo9bo91bo10bo50bo
117bo82bo175bo10bo136bo100bo10bo$7bo11bo55bo95bo153bo148bo93bo173bo55b
o63bo$6bobo9bobo44bo8bobo35bo9bo47bobo41bo9bo40bo9bo48bobo57bo9bo78bob
o91bobo83bo9bo77bobo53bobo61bobo38bo9bo$7bo11bo44bobo8bo35bobo7bobo47b
o41bobo7bobo38bobo7bobo48bo57bobo7bobo78bo93bo83bobo7bobo77bo55bo63bo
38bobo7bobo$65bo46bo9bo91bo9bo40bo9bo108bo9bo258bo9bo114bo123bo9bo$7bo
9bo3bo3bo3bo38bo3bo42bo3bo49bo47bo3bo46bo3bo52bo61bo3bo80bo3bo3bo3bo
83bo87bo3bo81bo33bobo17bo3bo3bo3bo53bo42bo3bo$6bobo7bobobobobobobobo
36bobobobo40bobobobo47bobo45bobobobo44bobobobo50bobo59bobobobo78bobobo
bobobobobo81bobo85bobobobo79bobo33b2o16bobobobobobobobo51bobo40bobobob
o$7bo9bo3bo3bo3bo38bo3bo42bo3bo49bo47bo3bo46bo3bo52bo61bo3bo80bo3bo3bo
3bo83bo87bo3bo81bo53bo3bo3bo3bo53bo42bo3bo5$11bo43bo338bo56bo$9b2o45b
2o150bo3bo50b2o130b2o52bobo89bo247bobo2bo89bobo$10b2o43b2o102bo4bo44bo
bo49bobobo128b2o54b2o33bo55bobo246b2o2bobo88b2o$27b2o30bobo95bobo2b2o
43b3ob3o45bobobo89bo129b2o56b2o33bo88bo124bo3b2o49bo39bo5bo$4bo22b2o
21bo8b2o47bo49b2o3b2o95b2o92bo45bo46bo4bo31b2o3bo47bo39bo3bobo49bo32bo
7bo166bo2bo44b2o$5b2o41bobo9bo48bo19bo25bo99b2o22bo28bobo3bo37b3o3bo
39b2o48bob2o37bobo45bobo35b3o3b2o49bo31b3o6bo168bob3o43b2o$4b2o21b2o
20b2o56b3o18bobo24b2o23bo25b2o20b2o26b2o20bobo28b2ob2o19bo22b2o41b2o
45b3o2b2o36b2o43b2ob2o43bo49b3o38b3o49bo110bo3b3o$2o24bobo46bo53b2o23b
obo22bobo25b2o19b2o25bo23b2o28bo3b2o17bobo14b3o5b2o20b2o14bo88b3o20b2o
24bobo190b2o106bobo$b2o23bo47bobo25bo76bobo24bo124bobo17bo28bo14b2o22b
2o49b2o14bo20bo27bo38b2o50bo98b2o108b2o$o8b2o16b4o28b2obo12bobob2obo
17bobo6b2o16b4o29b2o16b2ob2o27b2o16b4o27b2o18b2o29b2o19bo18bo9bo18bo
14bobo2b2o17bo2bo27b2o18bobo13bo3b2o17bo30b2o17bobo14b2o2b2o17bo25bobo
3b2o16b2o15b2o2b2o51b2o9b2o18b2o37b2o45b2o2bo2b2o16b2o23b2obo$10bo19bo
28bob2o14bobob2o18b2o2bo4bo16bo2bo28bo2bo15bo3bo26bo2bo15bo3bo26b2o18b
2o24b3obobo18b2o27bobo17bobo18bo17bobo28b2o18b2o18bo19bo29bobo16b2obo
12bo4bo18b3o20b2o2b2o2bo2bo16bo2bo11bobo3bo18b2o30bobo8bobo15bobobo34b
o3bo15bo2bo26bo2bobo2bo11b2obo2bo20bo2bob2o$9bo19bo46bobo26b2o2bo19bo
29b3o17b3o27b3o17b3o75bo2bo19bo29b2o18b2o17bo19bo70bo19bo30bo19bo19bo
19bo20b2o5bobobo15bobobo12bo2bo20bo32bo5bobo18b2o37b4o16b4o27b3ob3o12b
ob4o19bobo6b2o18b2o$9b2o18b2o46bo26bobo3b3o17b3o173bo4b3o17b3o66b3o17b
3o66b2o18b2o30b2o18b2o17b2o18b2o19bo8bobo17bobo17b3ob2o14bobob2o33b2o
154b2o6bo19bo$112bo19bo26b2obo16b2obo26b2obo16b2obo80bo19bo68bo19bo
208bo19bo20b2obo13b2ob2obo93b2o18b2o31b3o15b3o28bobo17bobo$159bob2o16b
ob2o26bob2o16bob2o556b2o18b2o31bo2bo14bo2bo27b2o18b2o$724b3o117b2o16b
2o$726bo$362bo362bo$360b2o$361b2o$444bo$109bo4bo186bobo2bobo47bo88bo
188bobo$109bobo2bobo185b2o2b2o49b2o84b3o40bobo2bo47bo94b2o32bo54bo$
104bobo2b2o3b2o186bo4bo48b2o3bo33bobo89b2o2bobo45bobo37bobo49bo3bo33bo
5bobo46bo3bobo$105b2o151bo4bo62b2o31b2o34b2o50bo39bo3b2o46b2o38b2o51bo
34b3o5b2o45b3o3b2o$105bo153bo3bobo60bobo31b2o28bo5bo50bobo84bo45bo49b
3o43bo52bo56bobo$130b2o69bo3bo51b3o3b2o13b2o25b2o22bo61b2o50b3ob2o33bo
52b2o38bo211b2o54bo$129bo2bo66bobob2o73bobo23bobo23bo59b2o53bo36b2o25b
2o23b2o40bo73b2o14bo58b2o60bo55bobo$129bobo68b2o2b2o20b2ob2o23b3o22b2o
25bo24bo48b2o12b3o21b2o24bo27b2o7bobo25bobo19b2o26bo14b3o74bo14b2o56bo
bo24bo85bo5b2o$110b2o16b2ob2o77b2o15bobo26bo4b2o18b2o26b2obo19bo27bo
18bo2bo13bo2b2o16bo2bo31bo20bo15b2obo17bobo17bobo6b2o17bobo18b2o49b2ob
2obo14bob2obo8bobo3b2o16b2o35bo2b2obo17bobo32b2o6b2o18b2o20bobo2b2o$
109bo2bo15bo3bo76bo2bo14bo3bo23bo5bobo17bo27bob2o18b2o26bobobob2o12bob
obob2o8bo4bo17bobo29b3o17b3o16bob2o18b2o19bo6bobo17bobo17bo17b2o26b3ob
obobob2o15b2ob2o13bo2bo15bo2bo36bob2o18b2o33b2o6bo19bo17b2o2b2o3bo$
109b3o17b3o78b2o16b4o30bo19bo77b2ob2obo13b2ob2obo12bo19bo29bo19bo71bo
19bo11b2o6bo15bobobo25bo2bo39b3o17b3o92bo5b3o17b3o19b2o5bo3bo14b2o$
259b3o17b3o34bo83b3o17b3o26b2o18b2o70b2o18b2o11b2o4b2o18b2o24bo164bo
18bo21bo8b4o14b2o$109b2obo16b2obo77b2o18b2o27bo19bo36bobo83bo19bo150bo
95bob2o16bob2o96bobo18b2o$109bob2o16bob2o77b2o18b2o84b2o351b2obo16b2ob
o96b2o48b4o16b4o$839bo2bo16bo2bo$793b2o$793bobo$793bo2$720bo$108bo527b
o23bo60b2o$107bo75b3o297bo97bo52bobo24b2o57b2o$107b3o75bo73bobo91bo36b
obo57bo30bobo92bo2b2o54b2o23b2o68bobo52bobo$184bo74b2o37bo55b2o35b2o5b
obo47b2o32b2o3bobo48bo4bo30bobo3b2o87bo60b2o53b2o$105bo154bo36bo55b2o
36bo6b2o49b2o36b2o47bobo2b2o32b2o57bo32b2o62bo54bo$106b2o145bo43b3o99b
o46bo41bo44b2o2b2o3b2o89b2o33b2o54b2o$105b2o147b2o21b2o48b2o23bo65b2o
24bobo37b2o48b2o64bo32bobo28b2o57bobo$126b2ob2o122b2o22bobo48bo23b2o
24b2o12b3o23bo22b2o2b2o21b2o13bobo47bo26bo38bobo49b2o12b2o58bo2b2o21bo
34b3o$109b2o16bobo120bo9bo17bobo17b3o9bo17bobo20bobo5b2o16bo2bo13bo4b
2o19bo19bobo6b2o17bobo14bo3b2o18b2o28b2o18bobo17b2obo17bobo27b2o19bo
12bo4b2o18bo38bo2bo18bobo35bo3b2o$109bobo13bobobobo118b2o7bobo17bobo
16bo10bobo17bobo27bobo16b2obo11bo6bo18b2o21bo6bobo17bobo17bo19bobo27b
2o18b2o10b2o6bob2o18b2o26bo2bo19bo17bo17bobo39b2o19b2o34bo3bobo3bo11b
2o$103bo6b2o13b2o3b2o117bobo8b2o18b2o17bo10bo19bo18bo11bo19bo17bo19bo
31bo19bo19bo18bobo59b2o56bobo18b2o16bo19bo100bo4b2o13bo$103b2o244b2o
10b2o18b2o17b3o17b3o28b2o18b2o17b2o19b2o58bo54b2o3bo19bo18b3o17b3o96bo
6b2o11bo$102bobo243bobo51bo19bo202bobo4b3o17b3o17bo19bo96b2o18b2o$627b
o6bo19bo2$669bobo$670b2o$670bo$628bo$304bo143bo180b2o35bo$303bo97bo47b
o178b2o7bo26bobo2bo$303b3o93b2o46b3o31bobo151b2o28b2o2bobo$353bo6bo39b
2o80b2o54bo93bo3b2o31b2o$98b2o251bobo7bo34b2o49bo34bo3bo50bo42bo52b2o$
99b2obobo202bobo42b2o5b3o33bobo49b2o37bobo44bo3b3o38bobo51b2o99bo56bob
o$98bo3b2o199b2o2b2o70bo17bo48bobo37b2o46b2o39b2o2b2o151bo55bobobobo$
103bo21bo176bobo3bo46b2o21bobo37bo114b2o12bo9b2o17b2o154b3o54b2ob2o$
124bobo177bo23bo25bobo22bobo10bo25b3o45b2o41b2o30b2o3bo10bobo15bo$102b
3o4b2o14bobob2o179b2o15bobo26bo2b2obo17bobo9b2o5b2o20bo27b2o15bobo20b
2o19bo28bo2bo3b3o10bo21bo18b2o28b2o17b2o18b2o21b2o36bo59bo$102bo6bo2bo
14bobo2bo177bo16bo2bo28bob2o18b2o8bobo6bo19bo28b2o18bo19bo19bo29b2o18b
2o19bobo16bo2bo26bo2bo16bo2bo16bo2bo17bo2bo35bobo57bobo18bo$103bo7b2o
14b2o2b2o178bo16b2obo67bo19bo50bo12b3o5bo17bobo63b3o2bobo17bobo27b2obo
16b2obo16b3o17b3o37bobo16b2obo36bobo17bobo$310b2o17bobo67b2o18b2o28b2o
18b2o14bo4b2o18b2o65bob2ob2o15b2ob2o29bo19bo77b2o16bob2o32b3o2bo19bo$
309bo2b2o15bo2b2o115bo19bo14bo91bo56b2o18b2o14bob2o16bob2o34b2o58bo3b
3o17b3o$310b2o2bo15b2o2bo115bo19bo198b2obo16b2obo30bo2b2o58bo6bo19bo$
313b2o18b2o114b2o18b2o253bo3bo$438b2o282b3o$439b2o$438bo2$789bo$404bo
84bo298bo$352bo45bo5bobo81bo134bo39bo5bo118b3o$350bobo45bobo3b2o75bo6b
3o48bo84bo4bo34bo3bo$351b2o3bo36bobo2b2o82b2o53b2o32bo50b3o3bo33b3o3b
3o116bo$355bo38b2o85b2o50bo4b2o32bo3bo51b3o157bo$355b3o36bo46bobo90bo
35b3o4b2o207b3o$442b2o63b2o23b3o41b2o47b2o38b2o$301bo26b2o48b2o62bo40b
3o21bobo114bobo24bo12bobo22b2o$300bo8b2o16bobo24b2o4bo17bobo18b2o17b2o
24bo4b2ob2o15b2ob2o11bo3b2o19bo24bo4b2o18b2o17b2o18b2o25bo2b2obo17bobo
13bo2b2obo16bobo93bo6bo$300b3o6bo2bo14bo4bo22b2o2bobo17bobo17bo17bo2bo
17bo5b2o4bob2o14bobob2o10bo4bo21bo23b2o3b2o19bo12b2o3bo19bobo27bob2o
17bobo16bob2o17b2o93b2o5b3o18b2o$293bo16b3o15b5o21bo5b2o18b2o19bo15bob
obo16b2o3bobo4bo17bobo20bo18b2o22bobo22bo15b2o3bo20bo49bo132bobo8bo16b
o2bo$291bobo106b2o16bo2bo15bobo9b2o18b2o19b2o48b4o14bob4o10bo6bobo17bo
bo185b2o3b2o15bo2b2o$292b2o5b3o8b2obo16b2obo67bob2o16bob2o114bo3bo15bo
3bo18b2o18b2o186bo19bo$299bo10bob2o16bob2o65bobob2o14bobob2o115bo19bo
228bo19bo$300bo98b2o18b2o118b2o18b2o228b2o18b2o6$308bo$308bobo41bo5bo
173bobo6bo39bobo$308b2o40bobo4bo94bo29bo50b2o5bo40b2o$303bobo45b2o4b3o
91bo31b2o3bo44bo6b3o39bo205bobo$304b2o145b3o28b2o2b2o89bobo208b2o$304b
o143bo38b2o89b2o209bo$449bo84b3o41bo204bo$378b2o67b3o18bo39b2o26bo23b
2o12bo24bo184b2o$309b2o44b2o2b2o17bobo71b2o13bobob2o11bo4b2o17bobo24bo
3b2obo16bo2bo11b2o6b2o14bobo182b2o4b2o$304b3o3bo19b2o22bobo3bo19bo71bo
2bo12b2obo2bo9b2o4bo19bo28bob2o17bobo10bobo4bo2bo15bo2bo186bo19b2o$
306bo2bo20bo25bo2bo20b2o67b2obob2o15bob2o8bobo3bo19bo51bo18b3o17b3o
188bo17bobo$305bo4b3ob2o11b2obobob2o24b3ob2o15bo2b2o63bo2bo18bo18b3o
17b3o270b3o4b2o19bo$312b2obo11bo2bob2obo26b2obo15bobobo60bo4b2o17b2o
20bo19bo66bob2o16bob2o182bo3bo2b2o16bob2o$328b2o52bo63b2o131b2obo16b2o
bo181bo5b2o2bo16bo2bo$445bobo345b2o18b2o5$485bo$443bobo40b2o297bo$444b
2o39b2o298bobo$444bo3bo40bobo293b2o$448bobo38b2o292bo$448b2o40bo293bo$
468b2o312b3o$468bo$302bo139b2o25bo$296bo6bo25b2o110bobo5b2o19bo9b3o6b
2o19bo280bo19bo$294bobo4b3o7b2o16bobo111bo5bo21bo10bo6bo19bobo269b3o6b
obo17bobo$295b2o15bo18bo119bo18b2o9bo8bo19bobo268bo7bobobo16bo2bo$312b
ob2o14b2ob2o115b2o39bobo18bo269bo6bobobo17bobo$302b3o6b2obo18bo158b2o
18bobo275b2ob2o15b2ob2o$304bo7bobobo13b2obobo177b2o$303bo8bo2b2o14bo2b
2o$311b2o16bobo$329b2o3$455bo$454bo27bobo$448bo5b3o26b2o7bo$443bobo2bo
bo32bo7bo$310bobo131b2o2b2o41b3o297bo$310b2o132bo40b3o301b2o$311bo175b
o302b2o$486bo23bo276bo$306bo164b2o36bobo273bobo$307b2o141b2o18bo2bo15b
2o3b2o13bobo2b2o270b2o2bo$306b2o4b2o18b2o115bo2bo16bo2bo16bo2bo2bo14bo
4bo273bobo$303b2o7b2o15bo3bo115b3o17b3o19b4o16b4o275bo2bo16b2obo$302bo
bo24b4o454b2o2b3o16bob2o$304bo144b2obo16b2obo20b2o18b2o271bobo$311b2o
18b2o116bob2o16bob2o20b2o18b2o273bo2b5o15b5o$311b2o18b2o459bo2bo16bo2b
o$790bo19bo$790b2o18b2o2$439bo13bobo$440bo12b2o$438b3o13bo2$492bo$492b
obo$485bo6b2o$483bobo$469b2o13b2o$469bobo9bo26bo$449b2o3b2o15bo2b2o5b
2o6b2o16bobo$445b2o2bo2bo2bo14bo4bo4bobo7bo17bobo$444bobo4b4o16b4o14bo
19bo$446bo43b3o17b3o$453b2o18b2o17bo19bo$453b2o18b2o!

Several converters, either duplicated, mislabeled, or obsoleted (although I may have failed to recognize necessary extra gliders in one or two cases), have been dealt with accordingly, things have been placed more neatly and readably, and this component have been taken off the lists entirely:
x = 27, y = 9, rule = B3/S23
2bo$obo$b2o3$3bobo17b2o$3b2obo16bobo$6bo18bo$6b2o17b2o!
Last edited by BlinkerSpawn on May 2nd, 2017, 10:59 am, edited 1 time in total.
LifeWiki: Like Wikipedia but with more spaceships. [citation needed]
User avatar
BlinkerSpawn
 
Posts: 1323
Joined: November 8th, 2014, 8:48 pm

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby Extrementhusiast » December 20th, 2016, 6:20 pm

The bookend-to-worm converter in that collection is outdated, and should be replaced with this newer version:
x = 15, y = 17, rule = B3/S23
9bo$9bobo$9b2o4$4bo$5bo$3b3o2$b2o$obo7b2o$2bo7bo2bo$11b3o2$11b2obo$11b
ob2o!

...with this as a potential variant:
x = 18, y = 19, rule = B3/S23
2bo$obo$b2o$9bo$7b2o$8b2o2$7bo$8bo$6b3o4$13b2o$13bo2bo$14b3o2$14b2obo$
14bob2o!
I Like My Heisenburps! (and others)
User avatar
Extrementhusiast
 
Posts: 1627
Joined: June 16th, 2009, 11:24 pm
Location: USA

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby BobShemyakin » December 22nd, 2016, 2:39 pm

Extrementhusiast wrote:The bookend-to-worm converter in that collection is outdated, and should be replaced with this newer version:
x = 15, y = 17, rule = B3/S23
9bo$9bobo$9b2o4$4bo$5bo$3b3o2$b2o$obo7b2o$2bo7bo2bo$11b3o2$11b2obo$11b
ob2o!

...with this as a potential variant:
x = 18, y = 19, rule = B3/S23
2bo$obo$b2o$9bo$7b2o$8b2o2$7bo$8bo$6b3o4$13b2o$13bo2bo$14b3o2$14b2obo$
14bob2o!

Note that potential variant is better because the attack sector 90° (the first 180°). It gives more space to accommodate target.

Bob Shemyakin
BobShemyakin
 
Posts: 192
Joined: June 15th, 2014, 6:24 am

Re: 15 in 15: Efficient 15-bit Synthesis Project (DONE!)

Postby Extrementhusiast » December 22nd, 2016, 8:56 pm

BobShemyakin wrote:
Extrementhusiast wrote:The bookend-to-worm converter in that collection is outdated, and should be replaced with this newer version:
x = 15, y = 17, rule = B3/S23
9bo$9bobo$9b2o4$4bo$5bo$3b3o2$b2o$obo7b2o$2bo7bo2bo$11b3o2$11b2obo$11b
ob2o!

...with this as a potential variant:
x = 18, y = 19, rule = B3/S23
2bo$obo$b2o$9bo$7b2o$8b2o2$7bo$8bo$6b3o4$13b2o$13bo2bo$14b3o2$14b2obo$
14bob2o!

Note that potential variant is better because the attack sector 90° (the first 180°). It gives more space to accommodate target.

Bob Shemyakin


I designated the first component as the standard because it is much less sparky, and is sufficient for most purposes. (Plus, it's much easier to remember.)
I Like My Heisenburps! (and others)
User avatar
Extrementhusiast
 
Posts: 1627
Joined: June 16th, 2009, 11:24 pm
Location: USA

PreviousNext

Return to Patterns

Who is online

Users browsing this forum: No registered users and 7 guests