4 glider syntheses

For discussion of specific patterns or specific families of patterns, both newly-discovered and well-known.
User avatar
Entity Valkyrie 2
Posts: 1756
Joined: February 26th, 2019, 7:13 pm
Contact:

Re: 4 glider syntheses

Post by Entity Valkyrie 2 » February 15th, 2020, 5:21 pm

Extrementhusiast wrote:
February 15th, 2020, 3:31 pm
mniemiec wrote:
February 15th, 2020, 7:25 am
Entity Valkyrie 2 wrote:
February 15th, 2020, 6:37 am
Y'all probably don't know that Entity Valkyrie 2 is also a (junior) composer, but giving you an example piece would show you my real name so I wouldn't do it.

EDIT: That's probably a random post.
This would be more appropriate for the sandbox, rather than added to a totally unrelated thread. Also, posts of the form "I have information that I think might be of interest to you (otherwise I wouldn't be talking about it), but I'm not going to give it to you" are generally not useful. I also don't understand why people are afraid to mention discoveries under their real names. Is there some kind of stigma associated with CA that I'm not aware of?
No, but in this era of everything tracking you, I can see why somebody would want to keep themselves private.
Probably that I just simply don't want to reveal my real name, or have any discoveries attributed to my real name rather than my pseudonym.

But that's off topic, let's go back.

Is there a 3G collision that produces a 2x2 array of blocks?

Code: Select all

x = 15, y = 15, rule = B3/S23
o13bo$b2o9b2o$2o11b2o10$2o11b2o$b2o9b2o$o13bo!
Bx222 IS MY WORST ENEMY.

Please click here for my own pages.

My recent rules:
StateInvestigator 3.0
B3-kq4ej5i6ckn7e/S2-i34q6a7
B3-kq4ej5y6c/S2-i34q5e
Move the Box

User avatar
Ian07
Moderator
Posts: 891
Joined: September 22nd, 2018, 8:48 am
Location: New Jersey, US

Re: 4 glider syntheses

Post by Ian07 » February 15th, 2020, 6:33 pm

Entity Valkyrie 2 wrote:
February 15th, 2020, 5:21 pm
Is there a 3G collision that produces a 2x2 array of blocks?
No.

GUYTU6J
Posts: 2200
Joined: August 5th, 2016, 10:27 am
Location: 拆哪!I repeat, CHINA! (a.k.a. 种花家)
Contact:

Re: 4 glider syntheses

Post by GUYTU6J » February 18th, 2020, 12:12 am

@Ian07, is there any new 4G synthesis in b3s23/4Glider_stdin? There're 147 billion objects.
(The same question may be asked again sometime later)

User avatar
Ian07
Moderator
Posts: 891
Joined: September 22nd, 2018, 8:48 am
Location: New Jersey, US

Re: 4 glider syntheses

Post by Ian07 » February 18th, 2020, 7:09 am

GUYTU6J wrote:
February 18th, 2020, 12:12 am
@Ian07, is there any new 4G synthesis in b3s23/4Glider_stdin? There're 147 billion objects.
(The same question may be asked again sometime later)
I'll probably take another look once you're finished searching to avoid further re-duplicating the work for myself. (that is you, right?)

GUYTU6J
Posts: 2200
Joined: August 5th, 2016, 10:27 am
Location: 拆哪!I repeat, CHINA! (a.k.a. 种花家)
Contact:

Re: 4 glider syntheses

Post by GUYTU6J » February 18th, 2020, 8:50 am

Ian07 wrote:
February 18th, 2020, 7:09 am
GUYTU6J wrote:
February 18th, 2020, 12:12 am
@Ian07, is there any new 4G synthesis in b3s23/4Glider_stdin? There're 147 billion objects.
(The same question may be asked again sometime later)
I'll probably take another look once you're finished searching to avoid further re-duplicating the work for myself. (that is you, right?)
Yes, I'm running the searches on my computer. But I've not decided when to quit, so perhaps we have to wait for a while. What tool is suitable for checking soups quickly, by the way?

User avatar
Ian07
Moderator
Posts: 891
Joined: September 22nd, 2018, 8:48 am
Location: New Jersey, US

Re: 4 glider syntheses

Post by Ian07 » February 18th, 2020, 11:20 pm

GUYTU6J wrote:
February 18th, 2020, 8:50 am
What tool is suitable for checking soups quickly, by the way?
I've been using lifelib to display all soups for a given object. Particularly I hacked together this code a while ago:

Code: Select all

samples = lt.download_samples('b3s23','xp30_w33z8kqrqk8zzzx33')
collisions = lt.pattern("")
shift = 0
for sample in samples['4Glider_stdin']:
    collisions += sample.shift(shift, 0)
    shift += 200
collisions.viewer()
Once the rule has been compiled, just run this in a Python notebook, replacing the apgcode with that of the desired object.

GUYTU6J
Posts: 2200
Joined: August 5th, 2016, 10:27 am
Location: 拆哪!I repeat, CHINA! (a.k.a. 种花家)
Contact:

Re: 4 glider syntheses

Post by GUYTU6J » February 23rd, 2020, 12:30 am

A quick note before I go: I hacked 4g.cpp trying to find 4G syntheses with a larger initial bounding box.

Code: Select all

#include <cstring>
#include <cstdio>
#include <random>
using namespace std;

bool aray[100][100];

const int glide[16] = {143, 346, 107, 286, 302, 115, 167, 370, 482, 181, 428, 241, 233, 412, 458, 157};

// 0: down right
// 1: down left
// 2: up left
// 3: up right

const int gc = 4;

inline bool inr(int x) { return 0 <= x && x <= 100; }

int main() {
    mt19937 rng; random_device rd;
    rng.seed(rd());
    int x = -1;
    while(x--) {
        memset(aray, 0, sizeof aray);
        for(int i=0; i<gc; i++) {
            int dx = rng()%40, dy = rng()%40, id=rng()%16;
            switch (id/4)
            {
                case 0: dx+=16; dy+=16; break;
                case 1: dx+=16; break;
                case 2: break;
                case 3: dy+=16; break;
                default: break;
            }
            bool f = false;
            for(int i=0;i<50;i++) if(inr(dx+i/5-1) && inr(dy+i%5-1) && aray[dx+i/5-1][dy+i%5-1]) { f = true; break; }
            if(f) continue;
            for(int i=0;i<9;i++) aray[dx+i/3][dy+i%3] |= (bool)(glide[id]&(1<<i));
        }
        string rle;
        for(int i=0; i<100; i++) {
            if(i) rle += '$';
            int cnt = 0, cv = 2;
            for(int j=0; j<100; j++) {
                if(aray[i][j] != cv) {
                    if(cv != 2) {
                        if(cnt != 1) rle += to_string(cnt);
                        rle += cv?'o':'b';
                    }
                    cnt = 1; cv = aray[i][j];
                } else cnt++;
            }
            if(cv) rle += (to_string(cnt)+(cv?'o':'b'));
        }
        while(rle.back() == '$') rle.pop_back();
        string srle;
        int cnt = 0;
        for(char c:rle) {
            if(c == '$') {
                if(srle.length()) cnt++;
            } else {
                if(cnt) srle += (to_string(cnt)+'$');
                cnt = 0;
                srle += c;
            }
        } 
        srle += '!';
        puts("x = 0, y = 0, rule = B3/S23");
        puts(srle.c_str());
    }
}
After the most recent 1000000-soup haul here I'm searching with this new 4G generator. The number of objects per 100 million soup decreases drastically and glider becomes more frequent(ly wasted) as a result.
EDIT: Something is wrong. xs15_pf0352z23 in this haul is shown with a sample that contains 3G only:

Code: Select all

x = 0, y = 0, rule = B3/S23
32bobo1$32b2o1$33bo2$30bobo1$30b2o1$31bo18$52bo1$51b2o1$51bobo!
But I cannot stop searching by pressing q.

User avatar
Ian07
Moderator
Posts: 891
Joined: September 22nd, 2018, 8:48 am
Location: New Jersey, US

Re: 4 glider syntheses

Post by Ian07 » March 18th, 2020, 7:52 pm

GUYTU6J wrote:
February 23rd, 2020, 12:30 am
EDIT: Something is wrong. xs15_pf0352z23 in this haul is shown with a sample that contains 3G only:

Code: Select all

x = 0, y = 0, rule = B3/S23
32bobo1$32b2o1$33bo2$30bobo1$30b2o1$31bo18$52bo1$51b2o1$51bobo!
But I cannot stop searching by pressing q.
That's normal. Just a result of the script occasionally placing two gliders directly on top of each other since the safeguards against it (along with other invalid syntheses) weren't put in.

GUYTU6J
Posts: 2200
Joined: August 5th, 2016, 10:27 am
Location: 拆哪!I repeat, CHINA! (a.k.a. 种花家)
Contact:

Re: 4 glider syntheses

Post by GUYTU6J » March 18th, 2020, 10:25 pm

New result: 5G xs19_g88bbgz17871

Code: Select all

x = 19, y = 19, rule = B3/S23
11bo$9bobo$10b2o3$16bo$11bobo2bobo$12b2o2b2o$12bo4$14b3o$14bo$15bo2$bo
$b2o$obo!
Can we go through 4Glider_stdin results now?

User avatar
Ian07
Moderator
Posts: 891
Joined: September 22nd, 2018, 8:48 am
Location: New Jersey, US

Re: 4 glider syntheses

Post by Ian07 » March 18th, 2020, 10:41 pm

GUYTU6J wrote:
March 18th, 2020, 10:25 pm
Can we go through 4Glider_stdin results now?
Assuming everyone is done with their various searches, yes. However if you're not planning on using the lifelib script I posted earlier to speed up the process then I'll take care of it. I actually have ample time now to look through the results because my school's closed now until April 19th, so I'll probably get it done over the next couple of days.

EDIT: Nevermind, it looks like there's still searching going on, so I'll wait until later.

User avatar
Ian07
Moderator
Posts: 891
Joined: September 22nd, 2018, 8:48 am
Location: New Jersey, US

Re: 4 glider syntheses

Post by Ian07 » July 18th, 2020, 4:28 pm

#232: xs17_02llicz696:

Code: Select all

x = 43, y = 16, rule = B3/S23
2bo$obo$b2o7$25bo$23b2o$24b2o$41bo$27b2o11b2o$27bobo10bobo$27bo!
Also found from the Glider_stdin censuses.

GUYTU6J
Posts: 2200
Joined: August 5th, 2016, 10:27 am
Location: 拆哪!I repeat, CHINA! (a.k.a. 种花家)
Contact:

Re: 4 glider syntheses

Post by GUYTU6J » December 19th, 2021, 10:27 pm

Bump, can anyone repeat what was done by Freywa here? The relevant list seems pretty stable now, so I would like to see a stamp collection for strict still lives and oscillators currently synthesizable in {3,4,5} (2 is obvious) glliders.

(Ooops, this thread should be more appropriate but I forgot it)

User avatar
Ian07
Moderator
Posts: 891
Joined: September 22nd, 2018, 8:48 am
Location: New Jersey, US

Re: 4 glider syntheses

Post by Ian07 » June 12th, 2022, 3:31 pm

On April 19th, a 4G bipole was submitted to Catagolue:

Code: Select all

x = 20, y = 17, rule = B3/S23
bo$2bo$3o3bo$5b2o$5bobo3$2b2o$bobo$3bo5$18b2o$17b2o$19bo!
Probably by the same mysterious user who posted these other random syntheses. This was brought to my attention by Carson Cheng. Apparently, although it had been mentioned on the forums on June 3rd, nobody noticed that the bipole previously cost 5G.

EDIT on July 15, 2022: It turns out the mysterious user was Carson Cheng all along!
Last edited by Ian07 on July 15th, 2022, 9:01 pm, edited 1 time in total.

carsoncheng
Posts: 470
Joined: June 11th, 2022, 11:24 pm

Re: 4 glider syntheses

Post by carsoncheng » June 12th, 2022, 7:20 pm

#233: xs18_69bo3qic

Code: Select all

#CSYNTH xs18_69bo3qic costs 4 gliders (true).
#CLL state-numbering golly
x = 45, y = 43, rule = B3/S23
obo$b2o$bo11$19bo$17b2o$18b2o3$18b2o$18bobo$18bo20$42b3o$42bo$43bo!
I don't know when it was submitted to Catagolue. How do you obtain the date of submission?

User avatar
Ian07
Moderator
Posts: 891
Joined: September 22nd, 2018, 8:48 am
Location: New Jersey, US

Re: 4 glider syntheses

Post by Ian07 » June 12th, 2022, 8:21 pm

carsoncheng wrote:
June 12th, 2022, 7:20 pm
I don't know when it was submitted to Catagolue. How do you obtain the date of submission?
This is a two-step process:
  1. Check the backups of the synthesis-costs census, which are made on the 5th, 15th, and 25th of each month. In this case, the May 15th backup shows xs18_69bo3qic costing 5 gliders:

    Code: Select all

    "xs18_69bo3qic","100000000000000005"
    (stored as 10^17 + 5 as a rather bodgy way of separating true objects and pseudo-objects in the tabulations)

    The May 25th backup shows xs18_69bo3qic costing 4 gliders:

    Code: Select all

    "xs18_69bo3qic","100000000000000004"
    Therefore, we know the synthesis was submitted at some point during that time.
  2. Check the Catagolue update job logs, specifically the ones labeled "shinjuku". In this case, I had to go back to pages 5 and 6 to find updates during this time period. Doing a ctrl+F search for the apgcode on each one, I eventually found a match in job #2487382555, on May 20th:

    Code: Select all

    x = 0, y = 0, rule = B3/S23
    41bobo$41b2o$42bo16$22b2o4b2o$21bobo3b2o$23bo5bo23$3o$2bo$bo!
    # Filtering with radius 5
    # Engulfing 247zzzzyl8aczylgcozzzyzy046a
    # processing src=xs0_0, dst=xs18_69bo3qic...
    #     ...success.
    # Filtering with radius 8
    # Filtering with radius 13
    # Filtering with radius 21

carsoncheng
Posts: 470
Joined: June 11th, 2022, 11:24 pm

Re: 4 glider syntheses

Post by carsoncheng » July 10th, 2022, 12:59 am

#234: xs15_4a970si6:

Code: Select all

x = 35, y = 52, rule = B3/S23
bo$2bo$3o19$18bo$19bo12bobo$17b3o12b2o$33bo25$2b2o$bobo$3bo!

User avatar
otismo
Posts: 1201
Joined: August 18th, 2010, 1:41 pm
Location: Florida
Contact:

Re: 4 glider syntheses

Post by otismo » July 23rd, 2022, 12:15 am

update :

Code: Select all

x = 137, y = 17892, rule = B3/S23
10bo36bo$8b2o37bobo7b3o$10b2o31bo3b2o8bo$9bo34bo8b2o3bo$42b3o7bobo$54b
o61$8b2o4b2o32bo18bo$8bobo2bobo30bobo18bobo$10bo2bo33b2o18b2o$8bobo2bo
bo35b2o10b2o$8b2o4b2o34bobo10bobo$52bo10bo61$12b2o35bobo$10bob2o31bo3b
2o$9bo36bo3bo$12bo31b3o$8b2obo$8b2o3$58b3o$58bo$59bo2$54b2o$54bobo$54b
o61$8b2o43bo$8bo43bo$10bo41b3o$9b2o32bo$41bobo$42b2o6b2o$49b2o$51bo3$
45b3o$47bo$46bo61$8b2o30bobo$8bo32b2o$9bo31bo$8b2o35bobo$45b2o3b2o$46b
o3bobo$50bo2$47b2o$48b2o$47bo61$8b2o32bo$8bo34bo$9bo31b3o9bo$10bo41bo$
9b2o41b3o2$50bo$49b2o$42b3o4bobo$44bo$43bo61$8b2o33bobo9bo$9bo34b2o7b
2o$9bobo32bo9b2o$10bobo$11bo2$46b3o5b3o$48bo7bo$47bo7bo61$8b2o52bo$8bo
bo51bobo$11bobo48b2o$12b2o4$44bobo$45b2o8bo$45bo9bobo$55b2o3$55b2o$54b
2o$56bo61$8b2o48bo$8bobo47bobo$11bo46b2o$12bo30bobo$11b2o31b2o$44bo2$
54bobo$54b2o$55bo3$55b2o$56b2o$55bo61$8bo33bobo14bo$8b3o32b2o12b2o$11b
o31bo14b2o$10bo$10b2o3$50b3o3bo$52bo2b2o$51bo3bobo61$8b2o32bo$8bobo32b
2o$9bobo30b2o$10b2o$54bo$53b2o6bo$49bo3bobo4bo$49b2o9b3o$48bobo61$8b2o
31bobo$8bobo31b2o6bobo$10bo31bo7b2o$9bo41bo$9b2o2$44b3o3b2o$46bo2b2o$
45bo5bo61$8b2o75bo$9bo76bo$9bob2o36bo34b3o$10bobo35bo$11bo36b3o37b3o$
43bobo42bo$44b2o37b2o4bo$44bo37bobo$82bo$81b2o61$8b2o34bo$9bo35bo$9bob
o31b3o$10bobo35bobo$11b2o35b2o$49bo$54b3o$54bo$55bo2$51b2o$50b2o$52bo
61$9bo44bo$8bobo42bo$9bo2b2o39b3o$10b2obo$49b3o$44bobo2bo$45b2o3bo$45b
o$49bo$49b2o$48bobo61$8b2o2b2o31bo$8bobo2bo32bo$11b2o31b3o3$58bo$57bo$
52bobo2b3o$52b2o$53bo3$53b2o$52b2o$54bo61$8b2o33bobo$8bobo33b2o4bo$10b
o33bo3b2o$10bobo36b2o$11b2o3$45b2o6b3o$44b2o7bo$46bo7bo61$12b2o30bo$
13bo31b2o$12bo31b2o$11bo$8bobo43b2o$8b2o39bo3b2o$49b2o4bo$48bobo2$60b
2o$59b2o$61bo61$10b2o30bo$11bo31b2o$9bo32b2o$9b2o$10bo55bo$8bo55b2o$8b
2o55b2o2$68b2o$68bobo$68bo20$84b3o$84bo$85bo61$9b2o31bo5bo$10bo32bo2b
2o$9bo31b3o3b2o$9b2o$10bo39b2o$8bo41bobo$8b2o40bo6b2o$57bobo$57bo61$9b
2o37bo$9bobo30bobo2bo$11bo31b2o2b3o$10bo32bo$9bo$8bo$8b2o2$59b3o$59bo$
60bo$48b3o$50bo$49bo61$8b2o45bo$9bo43b2o$9bob2o31bobo7b2o$10bo2bo31b2o
$12b2o31bo3$46b2o$47b2o3b2o$46bo4b2o$53bo61$8b2o34bo$9bo2bo32b2o$9bobo
bo30b2o$10bobo$11bo$45b2o$45bobo3bo$45bo4b2o$50bobo9$72b2o$72bobo$72bo
61$8b2o34bo$9bo35b2o$9bob2o31b2o$10bo2bo$11b2o3$64bo$58b3o2b2o$60bo2bo
bo$59bo7$64b3o$64bo$65bo61$8bob2o46bo$8b2o2bo32bo3bobo5bo$11bobo32bo2b
2o6b3o$12b2o30b3o3bo8$48b2o$47bobo$49bo61$8bo2bo39bo$8b4o37b2o$50b2o$
10b2o42bobo$10b2o42b2o$55bo$44bo$42bobo$43b2o$47b2o$46bobo$48bo61$8b2o
43bo$8bo2b2o39bo$9b2o2bo38b3o$12b2o$44bo$45b2o$44b2o3$45b2o$46b2o$45bo
3$62b3o$62bo$63bo61$8b2o41bo$8bo40b2o$9bo2b2o30bobo3b2o$10bo2bo31b2o$
11b2o32bo$52bo$51b2o$51bobo5$55b2o$54b2o$56bo61$8b2o35bo$8bobo32bobo3b
obo$9bobo32b2o3b2o5bo$10bobo37bo3b2o$11b2o42b2o2$44b2o$45b2o$44bo61$9b
obo30bo$8bob2o31b2o$8bo33b2o$9b3o$11bo37bo$48bo$48b3o2$53b2o$52b2o$45b
3o6bo$47bo$46bo61$12bo39bo$11bobo32bo4bo$10bobo31bobo4b3o$10bo34b2o$8b
obo$8b2o$52bo4b2o$52b2o2b2o$51bobo4bo61$12bo31bobo$11bobo31b2o$11b2o
32bo$9b2o44bobo$8bobo44b2o$9bo46bo2$49b2o$50b2o3b2o$49bo4b2o$56bo61$
12bo33bo$11bobo30bobo$10bobo32b2o$11bo37b3o3bo$8b3o40bo2bo$8bo41bo3b3o
3$49b2o$48bobo$50bo61$13b2o30bobo$14bo31b2o5bo$13bo32bo6bobo$12bo40b2o
$11bo$8bobo$8b2o45b2o$54b2o$56bo4$58b2o$57b2o$59bo61$12bo54bo$11bobo
52bo$11b2o53b3o$9b2o$10bo$8bo$8b2o5$51bo$51bobo$51b2o2$45bo$46bo6b2o$
44b3o5b2o$54bo61$8b2o37bo$9bo2b2o31bobo8b3o$9bobo2bo31b2o8bo$10bo2b2o
37b2o3bo$51bobo$53bo5$48b2o$49b2o$48bo61$8b2ob2o50bo$9bobobo48bo$9bo2b
o49b3o$10b2o6$44bobo$45b2o$45bo3bobo$49b2o$50bo6$61b2o$61bobo$61bo61$
8b2ob2o71bo$9bobo70b2o$9bo2bo70b2o$10bobo$11bo2$43bobo$44b2o$44bo19$
67bo$61b3o2b2o$63bo2bobo$62bo61$8b2o78bo$9bo2bo75bobo$9bobobo36bo37b2o
$10bo2bo35bo$11b2o36b3o39b3o$44bobo44bo$45b2o37b2o6bo$45bo37bobo$83bo$
82b2o61$9b2ob2o40bo$8bobobo39b2o$9bo2bo40b2o$12b2o4$54b2o$44bobo7bobo$
45b2o2bobo2bo$45bo3b2o$50bo61$9bo42bo$8bobob2o36b2o$9b2obo38b2o$12bo$
12b2o3$49b3o$44bobo2bo5b2o$45b2o3bo3b2o$45bo10bo61$9bo67bobo$8bobo66b
2o$9b2o67bo$11b2obo$11bob2o5$47bo$45bobo$46b2o12$60bo$59bo$59b3o3$56b
2o$55bobo$57bo61$12b2o32bo$8b2obobo30bobo$9bobo33b2o6bo$9bobo40bo$10bo
41b3o2$48b3o$50bo$49bo2$61b3o$61bo$62bo61$8b2o2bo54bobo$8bo2bobo53b2o$
10b2o2bo53bo$13b2o4$59bo$45bobo11bobo$46b2o2bobo6b2o$46bo3b2o$51bo61$
8b2o35bo$8bobo35b2o2bobo$10bo2b2o30b2o3b2o$10bobobo36bo$11bo6$47b2o$
48b2o$47bo6$66b2o$65b2o$67bo61$8bob2o35bo$8b2ob3o31bobo$14bo31b2o$13b
2o40b3o$55bo$56bo2$46bo$47bob3o$45b3obo$50bo61$8b2o35bo$8bo2b2obo31b2o
$9bobob2o30b2o$10bo$68b2o$67b2o$69bo$64bo$64b2o$63bobo$68b3o$68bo$69bo
61$8b2o37bo$8bo4bo31bobo$9bo2bobo31b2o$10bo2bo37bo$11b2o36b2o6bo$50b2o
4bo$56b3o4$49b3o$51bo$50bo61$9b2o33bo$8bo2bo33bo$8bobobo30b3o14bo$9bo
2bo39b3o4bo$10b2o42bo4b3o$53bo2$55b3o$55bo$56bo61$12b2o33bobo$11bobo
33b2o$10bobo35bo$10bo$8bobo35bo$8b2o34bobo$45b2o3$54bobo$44bo9b2o$45b
2o8bo$44b2o61$12b2o36bo$13bo35bo$10b3o36b3o$10bo33bobo$8bobo34b2o43b2o
$8b2o35bo43bobo$83bo5bo$84bo3b2o$82b3o4$84b2o$85b2o$84bo61$12bo49bo$
11bobo48bobo$10bobo31bobo15b2o$9bobo33b2o8bo$8bobo34bo9bobo$8b2o45b2o
3$55b2o$54b2o$56bo61$12bo46bo$11bobo32bo3bobo4b2o$11b2o31bobo3b2o6b2o$
9b2o34b2o4bo$8bobo$8b2o2$46b3o$46bo$47bo61$12b2o30bobo$11bobo31b2o$10b
obo32bo$11bo$8b3o$8bo2$50bo$48b2o$49b2o2$52b2o$52bobo$52bo4b3o$57bo$
58bo61$11b2o43bo$10bo2bo32bo7b2o$10bobo31bobo8b2o$11bo33b2o$8b3o$8bo
42bo3b2o$50b2o3bobo$50bobo2bo61$13bo37bo$12bobo35b2o$11bobo31bobo2bobo
$10bobo33b2o8b2o$9bobo34bo9bobo$8bobo45bo$9bo7$64bo$63b2o$63bobo61$13b
o33bo$12bobo30bobo$12b2o32b2o$10b2o$9bobo38b3o$8bobo39bo$9bo41bo5$47b
2o$47bobo$47bo19b2o$67bobo$67bo61$12bo80bo$11bobo78bo$11bobo30bobo45b
3o$12bo32b2o$9b3o33bo$8bo$8b2o26$64bo$65bo2bobo$63b3o2b2o$69bo61$13bo
37bo$12bobo35bo$11bobo36b3o$11bo33bobo36bo$9b3o34b2o37bo4b2o$8bo37bo
36b3o3bobo$8b2o79bo$88b2o2$84b2o$85b2o$84bo61$8b2ob2o30bo$9bob2o31b2o$
9bo33b2o$10b3o$12bo7$64bo$53bo8b2o$53bobo7b2o$53b2o3$54b2o$53b2o$55bo
61$8b2o3b2o30bo$9bo4bo31b2o8b2o$9bob3o31b2o9bobo$10b2o44bo3$53b3o$55bo
$54bo7$61b2o$61bobo$61bo61$9bo66bobo$8bobo2b2o61b2o$9b2o3bo62bo$11b3o$
11bo10$51bo$45bobo2bo$46b2o2b3o$46bo12$74b2o$74bobo$74bo61$12b2o48bo$
8b2obobo48bobo$9bobo50b2o$9bo2bo$10b2o47bo$57b2o$58b2o5$44bobo$45b2o$
45bo3bobo$49b2o$50bo61$12bo33bo$8b2obobo30bobo7bo$9bobobo31b2o5b2o$9bo
2bo40b2o$10b2o4$46bo4bo$46b2o2b2o$45bobo2bobo61$8b2o54bo$8bobob2o48b2o
$10bobo50b2o$10bo2bo$11b2o33bo$44bobo$45b2o2$55b2o$55bobo$55bo3$52b3o$
54bo$53bo61$8bo2bo32bobo$8b4o33b2o$12b2o31bo$10bo2bo$10b2o2$50bo$48b2o
$49b2o2$52b2o9b3o$52bobo8bo$52bo11bo61$8b2ob2o44bo$8b2obobo30bobo8b2o$
11bobo31b2o9b2o$11b2o32bo2$54bo$54b2o$53bobo2$46b2o$45bobo$47bo61$8b2o
b2o31bobo$8b2obo33b2o$11bo33bo$11bobo48bo$12b2o47bo$61b3o3$48b3o$50bo
3bo$49bo3b2o$53bobo61$8b2o44bo$8bobob2o39bo$10bob2o31bo7b3o$10bo35bo$
9b2o33b3o4$50bo$44bobo2bo$45b2o2b3o$45bo61$10b2o34bo$8bo2bo32bobo$8b2o
2b2o31b2o$13bo$11bo$11b2o5$47b3o$49bo3bo$48bo3b2o$52bobo3$60b3o$60bo$
61bo61$9b2ob2o32bo$8bobobo31bobo$8b2o2bo32b2o$12b2o$54bo$52b2o$53b2o3$
53b2o$53bobo$53bo6$66b2o$66bobo$66bo61$9bo46bo$8bobob2o41bo$8bobobo42b
3o$9bo2bo33bo$12b2o30bobo$45b2o$49b2o$48bobo$50bo2$61b2o$60b2o$62bo61$
9bo46bo$8bobo43b2o$8bo2bo43b2o$9bobo38bo$10bo38bo$11b3o35b3o$13bo30bob
o$45b2o$45bo2$57b2o$56b2o$58bo61$12b2o32bo3bobo4b2o$11bobo30bobo3b2o5b
obo$11b2o32b2o4bo5bo$9b2o$8bobo$8b2o$46b3o$46bo$47bo61$11b2o31bo8bo$
10bo2bo31b2o6bobo$9bob2o31b2o7b2o$8bobo$8bobo$9bo45b2o$54b2o$56bo5$57b
o$56b2o$56bobo61$8bo2bo41bo$8b4o30bobo7bo$43b2o7b3o$8b4o31bo$8bo2bo2$
44b2o$45b2o$44bo$51b2o$50b2o$52bo61$15b2o31bo8bo$14bobo32bo7bobo$13bo
33b3o3b2o2b2o$12bo39b2o$11bo42bo$10bo$9bo$8bo$8b2o12$82bo$81b2o$81bobo
61$12bo32bo$11bobo32b2o$11bobo31b2o4bo$9b2obo37bo$10bo39b3o$8bobo$8b2o
34b3o$44bo$45bo2$58b2o$57b2o$59bo61$13b2o36bo39bo$12bobo35bo38b2o$11bo
bo36b3o37b2o$10bobo32bobo$9bobo34b2o37b2o$9bo36bo37bobo3b2o$8b2o74bo4b
obo$83b2o6bo61$12b2o31bobo$11bo2bo31b2o$11bobo32bo3bobo$12bo37b2o$9b3o
39bo$8bo47bo$8b2o45b2o$55bobo2$49b3o$51bo$50bo61$13b2o30bobo$12bobo31b
2o$11bobo32bo$11bo$9b3o$8bo$8b2o38b2o$47bobo3bobo$49bo3b2o$54bo7$66bo$
65b2o$65bobo61$9b2ob2o44bo$8bobobobo42bo$9bo2bobo42b3o$12b2o4$45bobo2b
obo$46b2o2b2o$46bo4bo4$52bo$51b2o$51bobo61$9b2ob2o36bobo4bo$8bobobo37b
2o5bobo$9bo2bo38bo5b2o$12bobo$13b2o$45bo5bo$46b2o2b2o$45b2o3bobo61$9bo
36bo$8bobob2o33bo$9b2obobo30b3o$12bobo37bo$12b2o37bo$51b3o3$56b3o$51b
3o2bo$53bo3bo$52bo61$9b2o44bobo$8bo2bob2o35bo4b2o$9bobobo36bobo3bo$10b
o2bo36b2o$13b2o31bo$47bo$45b3o2b2o$51b2o$50bo61$12b2o42bo$8b2obobo40b
2o$9bobo33bo9b2o$9bo2bo33bo$10bobo31b3o$11bo43b2o$55bobo$55bo6$59b3o$
59bo$60bo61$8b2o3b2o44bobo$8bobobobo30bo8bo4b2o$10bobo33b2o4b2o6bo$10b
obo32b2o6b2o$11bo2$52bo$52b2o$51bobo61$8b2o35bobo$8bobob2o32b2o$10bobo
bo31bo$10bo2bo$11b2o$61bo$61bobo$61b2o4$58b2o$59b2o$58bo4b2o$63bobo$
63bo61$8b2o38bo$8bo2b2o35bobo$10b2obo34b2o$13bo39bo$10b3o33bo5bo$10bo
33bobo5b3o$45b2o2$49bo$48b2o$48bobo61$8bob2o33bobo$8b2obo34b2o$11bob2o
31bo$11bo2bo$12b2o$71bo$69b2o$70b2o3$68b2o$67b2o$69bo9bo$78bo$78b3o61$
8bo2b2o33bo$8b4obo30bobo4bo$13bo31b2o4b2o4bo$10b3o37bobo2b2o$10bo45b2o
3$60b3o$60bo$61bo61$8b2o2b2o32bo$8bo2bobo30bobo$9b3o33b2o$12bo$11b2o3$
51bo$49b2o$50b2o3$46b3o$48bo$47bo5$70b2o$70bobo$70bo61$8b2o44bo$8bobo
2b2o37b2o$9b2o3bo38b2o$11b3o33bo$11bo33bobo$46b2o2$49b3o$51bo8b3o$50bo
9bo$61bo61$8b2o35bobo$8bobob2o32b2o$10bobobo31bo$10bo2bo$9b2o54bo$64bo
$64b3o$54b2o$55b2o$54bo7b2o$62bobo$62bo61$10bo34bo$9bobob2o31b2o$8bo2b
obo31b2o$9b2o2bo$13b2o13$87bo$78bo6b2o$77bo8b2o$77b3o$82b2o$81b2o$83bo
61$11bo32bo$9b3o33b2o$8bo35b2o$9b3o$11bo$11bobo73bo$12b2o72bo$86b3o21$
68bo$68b2o2b3o$67bobo2bo$73bo61$9bo49bo$8bobob2o44bo$8bobobo45b3o$9b2o
2bo$12b2o39bo$53bobo$53b2o3$55b2o$46bo7b2o$44bobo9bo$45b2o61$8b2o34bob
o9bo$9bo35b2o9bobo$8bo36bo10b2o$8bobo$9b2o$11b2o39b3o$11bobo40bo$12bo
40bo8$64b2o$64bobo$64bo61$12bo70bo$11bobo69bobo$11bobo69b2o$9b2obo$8bo
2bo$8bobo$9bo6$44bo$45b2o$44b2o9$64bo$64bobo$64b2o3$64b2o$63b2o$65bo
61$12bo51bo$11bobo49bo$11bobo49b3o$9bob2o$8bobo$8bobo$9bo5$44bo$45b2o$
44b2o$54bo$48b2o3b2o$49b2o2bobo$48bo61$13b2o34bo$12bobo33bo$12bo35b3o$
13bo$10b3o33bo$9bo37bo$8bobo34b3o$9bo52bobo$62b2o$52bo10bo$50b2o$51b2o
61$13bo31bobo$12bobo31b2o3bo$12bobo31bo4bobo$9b2ob2o37b2o$10bo$8bobo$
8b2o43b2o$47b3o2b2o$49bo4bo$48bo61$12b2o59bobo$11bo2bo30bobo25b2o$11bo
bo32b2o26bo$9b2obo33bo$10bo$8bobo$8b2o6$46bobo$47b2o$47bo3bobo$51b2o$
52bo61$13bo32bobo$12bobo32b2o$11bo2bo32bo$10bo3b2o$9bo$8bo$9b3o$11bo3$
50b3o$52bo3bo$51bo3b2o$55bobo4$64b2o$63b2o$65bo61$12b2o33bo$12bobo30bo
bo$14bo31b2o$10b4o$9bobo$9bo51bo$8b2o49b2o$60b2o2$63b2o$63bobo$63bo14$
77b2o$76b2o$78bo61$10b2o36bo$10b2o36bobo2bo$48b2o3bobo$10b4o30bo8b2o$
9bo3bo31b2o$8bobo33b2o$9b2o$50b2o$49b2o$51bo61$8b2ob2o45bo$9bobo46bobo
$9bo2bo33bo11b2o$10bobo31bobo15b2o$9b2ob2o31b2o15bobo$49b2o11bo$48bobo
$50bo61$8b2o3b2o31bo10bo$8bobobobo32b2o7bo$10bobo33b2o8b3o$10bo2bo$11b
2o$47bo4bo$45bobo3b2o$46b2o3bobo61$8b2o3bo47bo$8bobobobo45bo$10bobobo
45b3o$10bo2bo$11b2o3$50bo$50bobo$46bo3b2o$47bo$45b3o2$58b2o$57b2o$59bo
61$8bo2bo39b2o$8b4o40b2o$12b2o37bo$10bo3bo30bobo$10b2ob2o31b2o6b3o$46b
o7bo$55bo5$50b2o$49b2o$51bo61$8b2o35bobo$8bobob2o32b2o$9b2obobo31bo$
12bobo$12b2o2$80bo$70b2o6b2o$69b2o8b2o$65b2o4bo$64bobo$66bo61$8b2o3b2o
32bo13bo$8bobobobo30bobo13bobo$10bobo33b2o13b2o$9b2ob2o$49b2o7b2o$50b
2o5b2o$49bo9bo61$8b2o3bo43bo$8bobobobo40b2o$10bobobo41b2o$9b2ob2o2$47b
o5bo$45bobo4b2o$46b2o4bobo3$46b2o$47b2o$46bo61$8b2o36bo$8bobob2o33bo$
10bobobo30b3o18bo$9b2obobo51bobo$13bo52b2o2$56bo$55bo$55b3o2$51b2o$50b
obo$52bo61$8b2o3bo32bo$8bobobobo32bo$10bobobo30b3o$10bo2bo$9b2o47bo$
57b2o$53bo3bobo$53b2o$52bobo7$61b3o$61bo$62bo61$8b2o37bo10bo$8bobo34bo
bo9bo$10bo2b2o31b2o9b3o$10bobobo47b3o$9b2ob2o40b2o6bo$54bobo6bo$54bo
61$10bo34bobo$9bobo34b2o$8bo2bo34bo$9b2ob2o$11bo2bo$11bobo$12bo39bo$
52bobo$52b2o3$54b2o$53b2o$55bo3$62b2o$61b2o$63bo61$9bo36bobo$8bobob2o
33b2o$8bobobobo32bo$9bo2bobo$12b2o3$46bo4bo$47bo2b2o5bo$45b3o2bobo3b2o
$56bobo61$9b2ob2o32bo$8bobobobo32bo$8bobobobo30b3o$9bo3bo40bobo$54b2o$
55bo2$57b3o$57bo$58bo$45b3o$47bo$46bo61$9bo35bobo$8bobo35b2o$8bo2bob2o
31bo$9b2o3bo$11b3o$11bo48bo$60bobo$60b2o$64b2o3b2o$64bobob2o$64bo5bo
61$9b2o42bo$8bobo2b2o30bo7bobo$8bo5bo31b2o5b2o$9b5o31b2o$11bo3$56b3o$
56bo$57bo$53b2o$52bobo$54bo61$9bo41bo$8bobob2o33bo3bobo$8bobobobo30bob
o3b2o$9b2obobo31b2o$13bo$53b2o$48b2o3bobo$47bobo3bo$49bo61$9b2ob2o38bo
bo$8bobobo39b2o$8bobobo40bo$9b2ob2o32bo$44bobo$45b2o3bobo$50b2o$51bo6$
62b2o$61b2o$63bo61$9b2o35bo$8bo2bo32bobo4bo$8bobobo32b2o3bo$9bobobo36b
3o$10bo2bo$11b2o34b2o$47bobo$47bo$52b3o$52bo$53bo61$12b2o31bo$8b2o2bo
33b2o$8bobobobo30b2o$10bo2b2o$9b2o38bo$48bo$48b3o6b3o$57bo$58bo2$46b2o
$47b2o$46bo61$10b2o61bobo$9bobo61b2o$9bo64bo$8b2o$10b2o$10bobo$12bo$
12b2o9$44bo$45b2o$44b2o$49bo$48bo$48b3o4$48b2o$49b2o$48bo61$12b2o30bo$
11bobo31b2o$8bo3bo31b2o$8b4o2$8b2o$8b2o2$48b3o3bo$50bo2b2o$49bo3bobo2$
60bo$59b2o$59bobo61$12b2o39bo$12bo38b2o$9b2obobo37b2o$10bo2b2o$8bobo$
8b2o2$49bo$49bobo$49b2o9$45bobo$46b2o2bobo$46bo3b2o$51bo61$11b2o31bobo
$11bobo31b2o$13bo31bo8bo$9b4o40bo$8bo44b3o$8bobo$9b2o2$49bo4bo$49b2o2b
2o$48bobo2bobo61$13bo32bo12bobo$12bobo32bo11b2o$12bobo30b3o12bo$9b2ob
2o$8bobo$8bobo$9bo43bo$51b2o$52b2o3$53bo$52b2o$52bobo61$12bo33bo$11bob
o33bo$11bo2bo30b3o$9b2ob2o$8bobo$8bobo$9bo47b3o$47bo9bo$47b2o9bo$46bob
o$51b2o$51bobo$51bo61$8b2o34bo5bo$8bobob2o31b2ob2o$10bob2o30b2o3b2o$
10bo$8bobo$8b2o34b2o5b3o$45b2o4bo$44bo7bo61$8b2o2b2o32bo$8bobo2bo30bob
o$10b2o33b2o$10bo41bo$8bobo41b2o$8b2o41bobo2$55b3o$55bo$56bo2$62b2o$
62bobo$62bo61$12b2o31bo$8b2obobo32bo$8b2obo32b3o$11bo37bobo$8b3o38b2o$
8bo41bo4$51b2o4b3o$50bobo4bo$52bo5bo61$11b2o36bo5bo$10bo2bo34bo5bo$9bo
bobo34b3o3b3o$8bo2bob2o$8bobo35bo$9bo37bo$45b3o3b3o$51bo$52bo61$12b2o
32bo$12bo34bo$9b2obobo30b3o$8bobo2b2o$8bobo$9bo$91bo$90bo$90b3o6$72bo$
71b2o$67bo3bobo$67b2o$66bobo61$14b2o32bo$15bo30bobo$12b3o32b2o$12bo$
10b2o$10bo38b2o$8bobo39b2o$8b2o39bo2$54bo$54b2o$53bobo$58b3o$58bo$59bo
61$12b2o44bobo$11bo2bo43b2o$11bo2bo34bo9bo$9b2ob2o35bobo$10bo38b2o$8bo
bo35bo$8b2o37bo$45b3o2$50b2o$51b2o$50bo61$10b2o44bo$9bo2bo42bo$10bo2bo
41b3o$9b2ob2o$10bo33bo$8bobo34b2o$8b2o34b2o2$52bo$46bo4bo$46b2o3b3o$
45bobo61$11bo34bo$10bobo31bobo$10bo2bo31b2o$11bobo$9bob2o46bo$8bobo47b
2o$8bobo47bobo$9bo43b3o$55bo$54bo6bo$60b2o$60bobo61$13bo32bo$12bobo32b
o$11bo2bo30b3o$11b3o$9b2o$8bo2bo$9bobo$10bo51bo$61bo$61b3o3$60bo$59b2o
4b3o$59bobo3bo$66bo61$12b2o30bobo$11bobo31b2o5bo$11bo33bo5bo$12bo38b3o
$9b4o$8bo$8bobo$9b2o3$46bo3bobo$47bo2b2o$45b3o3bo61$11bo33bo$10bobo33b
o$11bobo30b3o$13bo$9b4o$8bo$8bobo$9b2o44bo$54b2o$54bobo2$50b3o$52bo$
51bo10$67b3o$67bo$68bo61$9b2o42bo5bo$9bobob2o37bo4b2o$11bob2o37b3o3b2o
$11bo$9bobo$8bobo34bobo$9bo36b2o4b2o$46bo6b2o$52bo61$8b2obo33bobo$9bob
3o32b2o$9bo4bo31bo4b3o$10b3obo38bo$12b2o38bo2$52bo4b2o$52b2o3bobo$51bo
bo3bo61$9b2o3b2o30bo$8bo2bobobo31b2o4b2o$9bobobo32b2o6b2o$10bo2bo39bo
4b2o$13b2o43bobo$58bo8$67b3o$67bo$68bo61$9b2o41bo$8bo2bob2o35bobo$9bob
obobo35b2o$10bo2bobo$13b2o39b2o$55b2o$54bo2$48bo$46bobo$47b2o5$51b3o$
53bo$52bo61$9b2o3b2o30bobo$8bo2bobobo31b2o33bo$9bobobo33bo32b2o$10b2ob
2o66b2o21$62bo$56bobo2bo$57b2o2b3o$57bo61$9b2o3bo33bo$8bo2bobobo30bobo
$9bobobobo31b2o9bo$10b2ob2o42bo$57b3o$49b2o$50b2o$49bo4b2o$53bobo$55bo
61$9b2o36bo$8bo2bob2o33bo$9bobobobo30b3o$10b2obobo$14bo3$63bo$62bo$62b
3o4$50b2o4bo$49bobo3b2o$51bo3bobo61$9b2o35bobo$8bo2bob2o32b2o$9bobobo
33bo21bo$10b2obobo51b2o$14b2o52b2o4$55bo3b3o$55b2o2bo$54bobo3bo61$8b2o
b2o34bo11bo$8b2obo33bobo10bo$11bo34b2o10b3o$11bob2o$10b2ob2o$48b3o2bob
o$50bo2b2o$49bo4bo61$8b2o5b2o30bo$8bo7bo31b2o$9b3ob3o31b2o11bo$11bobo
45bo$12bo46b3o4$60b2o$59b2o$61bo37$104b2o$104bobo$104bo61$8b2o2b2o72bo
$8bo4bo71bo$9b4o72b3o2$9b2o$8bobo$9bo21$71bo$71bobo$71b2o7$44bobo$45b
2o$45bo3bobo$49b2o$50bo61$8b2o2bo31bobo$8bo2bobo31b2o$9b3obo31bo6bo$
12bo39bobo$9b3o40b2o$9bo2$48bo$48b2o3b2o$47bobo3bobo$53bo61$10b2o32bob
o$9bobo33b2o$8bo36bo21bo$9b5o51b2o$13bo52b2o$9b2o$9b2o$56b2o$57b2o$56b
o4b2o$61bobo$61bo61$10b2o36bo$9bob3o34bobo$8bo5bo33b2o$9b4obo$11bobo$
45bo10bobo$46b2o8b2o$45b2o10bo$49b3o$51bo$50bo61$9b2obo34bo$8bo2b4o33b
o$8b2o5bo30b3o$13bobo$13b2o2$59bo$57b2o$58b2o$53b3o$53bo$54bo4$68b2o$
67b2o$69bo61$9b2o42bo$8bo2bo40bo$8b4o32bobo5b3o$45b2o$10b2o33bo$11bo$
11bobo$12b2o2$51bo$51b2o$50bobo$55b3o$55bo$56bo61$9bo34bobo$8bobo34b2o
$8bo2bo33bo$9b3o2$11b3o$10bo2bo$10b2o3$68b3o$70bo11b2o$69bo3b2o7bobo$
73bobo6bo$73bo61$9bo35bobo8bo$8bobo35b2o7bo$8bo2bo34bo8b3o$9b3o49bo$
60bo$11b3o46b3o$11bo2bo$12b2o44bo$57b2o$57bobo61$9bo35bobo$8bobo35b2o$
8bo2bo34bo$9b2obo$11bo$11bobo$12bobo$13b2o$55bo3bobo$55b2o2b2o$54bobo
3bo2$59bo$59b2o$58bobo61$9b2ob2o44bobo$8bobobo45b2o$8bo4bo45bo$9b3obo
31bo$11b2o33bo$44b3o9bo$54b2o$49b2o4b2o$49bobo$49bo61$8b2o52bo$8bo2b2o
48bo$9bobobo47b3o$8b2o3bo$10b3o$10bo47bo$57bo$46bo10b3o$44bobo$45b2o3$
45b2o$46b2o$45bo61$12b2o40bo11bobo$11bo2bo38bo12b2o$11bo2bo38b3o11bo$
9b2ob2o$8bobo$8bobo$9bo5$51b2o$45bobo2b2o$46b2o4bo$46bo61$8b2o40b3o$8b
obob2o31bobo2bo$10bobobo31b2o3bo$10bo2bo32bo$8bobo44b2o$8b2o44b2o$47b
2o7bo$46bobo$48bo61$11b2o32bo$11bobo32bo$9b2o2bo30b3o$8bobobo$8bobob2o
$9bo4$64bo$63b2o$63bobo2$57bo$57b2o$56bobo$61b2o$61bobo$61bo61$13b2o
37bo$12bobo37bobo$12bo39b2o$9b2obobo$10bo2b2o$8bobo43b3o$8b2o44bo$45bo
9bo$46b2o$45b2o$61b3o$61bo$62bo61$12b2o45bo$11bobo38bo5bo$11bo38b2o6b
3o$9b2o2bo31bo5b2o$10bob2o32bo$10bo33b3o$8bobo40b2o$8b2o40bobo$52bo61$
11b2o32bo$10bo2bo32bo$9bo2bo31b3o$9b3o38b2o$50bobo$9b3o38bo$8bo2bo$9b
2o37bo$48b2o8b2o$47bobo8bobo$58bo61$13bo32bo$12bobo32b2o$12bo2bo30b2o$
10b2ob2o$9bobo$8bo2bo$8bobo$9bo5$50bo$48b2o$49b2o3$48b2o$47b2o$49bo5$
72b2o$72bobo$72bo61$9b2o34bobo$8bo2bo34b2o$9bo2bo33bo$10b3o51bo$64bobo
$12b3o49b2o$11bo2bo$11b2o3$61bo$61bobo$61b2o2$58b2o$57b2o$59bo61$9b2o
3b2o50bo$8bo2bobo2bo48bo$9bobobobo49b3o$10b2ob2o$47bo$48b2o$47b2o3$57b
o$57bobo$57b2o3$58b2o$57b2o$59bo61$9b2o42bo$8bo2bo33bo6b2o$9b2o2bo32bo
5bobo$11b3o30b3o$9b2o$8bo2bo36b2o$9b2o36bobo$49bo$61b2o$60b2o$62bo61$
8b2o3b2o77bo$8bobobobo76bo$10bobo78b3o$9b2obobo$13b2o16$45bobo10bo$46b
2o9b2o$46bo6bo3bobo$53b2o$52bobo61$8b2o3b2o45bo$8bobobobo43b2o$10bobo
46b2o$10bobo$9b2ob2o2$47bo$45bobo9b2o$46b2o4bo4bobo$52b2o3bo$51bobo61$
8b2o2b2o35bobo$8bo4bo35b2o$9b4o31bobo3bo$45b2o$9b2o34bo$8bobo$8b2o$47b
2o$46b2o12b2o$48bo10b2o$61bo61$10b2o35bo$9bobo2b2o32b2o$8bo2bobo2bo30b
2o$9b2o2bobo35b3o4bo$13b2o38bo3bo$52bo4b3o$62b2o$61b2o$63bo61$9b2o37bo
$8bo2bob2o31bobo$8bo2bobobo31b2o4b2o$9b2o2bobo38b2o$13b2o38bo6bo$58b2o
$59b2o3$57b2o$57bobo$57bo61$9b2ob2o33bo$8bobobobo30bobo$8bo5bo31b2o$9b
5o41bo$11bo43bobo$55b2o3$47bo7b2o$47b2o5b2o$46bobo7bo61$9bo3b2o32bo8bo
$8bobobobo30bobo8bobo$8bobobo33b2o8b2o$9b2obobo36b3o$13b2o38bo$52bo2$
55b2o$54b2o$56bo61$9bo35bo$8bobob2o32b2o$8bobobobo30b2o$9b2o3bo$11b3o
43bo$11bo44b2o$56bobo$51b3o$53bo$52bo2$58bo$57b2o$57bobo61$9b2ob2o31bo
bo2bobo6bo$8bobobobo31b2o2b2o5b2o$8bobobobo31bo4bo6b2o$9b2ob2o3$51b2o$
52b2o$51bo61$9bo3b2o32bo$8bobo2bo34bo2bobo$8bo2bobobo30b3o2b2o$9bobo2b
2o36bo$10b2o3$58b2o$57b2o$54bo4bo$53b2o$53bobo61$9bo36bobo$8bobo3b2o
31b2o$8bo2bobobo31bo$9bobobo$10b2ob2o51bo$65bo$65b3o$70bo$69b2o$69bobo
$63b3o$65bo$64bo61$9b2ob2o30bo$8bobob2o31b2o$8bobo33b2o$9bo2b2o$10b2ob
o4$49bo$49b2o$48bobo3bo$54b2o$53bobo$58b3o$58bo$59bo61$13bo35bo$12bobo
33bo$8b2o2bobo33b3o$8bobob2o$10bo35bo$8bobo36bo$8b2o35b3o3$48bo7bobo$
49b2o5b2o$48b2o7bo61$8b2ob2o39bobo$9bobobo38b2o$9bo3bo30bobo6bo$10b3o
32b2o$8bobo34bo$8b2o45bo$55bobo$50b3o2b2o$50bo$51bo61$8b2o3bo48bo$8bob
obobo32bo13bo$10bobobo30bobo13b3o$10bo2bo32b2o$8bobo$8b2o$55bo$55bobo$
55b2o3$57b3o$57bo$58bo61$8b2o46bobo$8bobob2o42b2o$10bobobo30bobo9bo$
10bo2b2o31b2o4bobo$8bobo35bo5b2o$8b2o43bo3$51b2o$52b2o$51bo61$9b2o36bo
$9bo2b2o31bobo$10b2o2bo31b2o12bo$13bo45bo$10b3o46b3o$10bo37b2o$8bobo
38b2o$8b2o38bo2$52b2o$53b2o$52bo61$10bo34bo$9bobo34bo$9b2obo31b3o$12bo
43bo$9b2ob2o41bo$8bo2bo43b3o$8bo2bo36b2o$9b2o37bobo$48bo2$44b3o$46bo$
45bo61$12bo87bo$8b2obobob2o83bobo$9bobobobo84b2o$9bobobobo$10bo3bo32bo
$48b2o$47b2o18$83bo$81b2o$82b2o2$85b2o$85bobo$85bo61$12b2o41bobo$8b2ob
o2bo33bobo4b2o$9bobob2o33b2o6bo$9bobobo35bo$10bo2bo$11b2o34bo$45bobo$
46b2o2$67b3o$67bo$68bo61$8b2o36bo$8bobob2o30bobo$10bobo32b2o$9b2obo$
10bob2o$10bo$9b2o13$66bo$64b2o$65b2o3$65b2o$65bobo$65bo12$87b3o$87bo$
88bo61$8b2o2b2o30bobo$8bo4bo31b2o$9b4o32bo2$9b2o$8bo2bo$9bobo$10bo48bo
$53b3o2b2o$55bo2bobo$54bo$45bo$45b2o$44bobo61$8b2o2b2o52bobo$8bo4bo52b
2o$9b4o54bo2$9b2o$8bo2bo32bobo$8bobo34b2o$9bo35bo$52bo$52bobo$48bo3b2o
$49bo$47b3o61$9b2o52bo$9bobo50bo$10bobo49b3o$11bobo$13bo$9b4o$8bo$8bob
o$9b2o2$44bo$45b2o7bo$44b2o8bobo$54b2o3$54b2o$53b2o$55bo61$12b2o33bo$
12bobo30bobo$9bo4bo31b2o$9b5o2$9b3o$8bo2bo$9b2o39$101bo$99b2o$100b2o3$
98b2o$97b2o$99bo2$94b3o$94bo$95bo61$12bo45bo6bo$8b2obobo42b2o5b2o$9bob
o2bo42b2o5b2o$9bo2b2o$10b2o34bo$11bo35bo9b2o$11bobo31b3o9bobo$12b2o43b
o61$8b2o2b2o30bobo$8bo4bo31b2o$9b4o32bo2$9b2o$8bo2bo$8bo2bo$9b2o20$67b
o$66b2o$62bo3bobo$62b2o$61bobo4$82b3o$82bo$83bo61$9b2o45bo$8bob3o41b2o
$8bo4bo41b2o$9b4o2$9b2o$8bobo40bo$8b2o39b2o$50b2o2$44bobo$45b2o4bo$45b
o4b2o$50bobo61$9bo5bo35bo$8bobo3bobo33bo$8bo2bobo2bo33b3o$9bobobobo$
10b2ob2o33bo$49bo$47b3o16$48bo3bo$49bobo$47b3ob3o61$10b2o43bo$9bo2bo
33bo8bobo$9bob2o34bo7b2o$8b2o35b3o11b2o$10b3o46bobo$10bo2bo45bo$11bo2b
o$12b2o$56bo$55b2o$55bobo61$13b2o34bo$12bobo33bo$8b2o2bo35b3o$8bobobob
o$10bo2b2o31bo$8bobo36bo$8b2o35b3o4$54bo$52b2o$53b2o2$50bo$48bobo$49b
2o61$9b2ob2o42bo$9b2obobo35bo3b2o$14bo35bobo2b2o$9b5o31bo4b2o$8bo2bo
34b2o$8b2o35b2o4$52bo$52b2o$51bobo61$12b2o31bo$10b3obo31b2o$9bo4bo30b
2o15bo$9bo2b2o46b2o$8b2obo49b2o$8bo2bo$9b2o39bo$50b2o$49bobo2$53b3o$
53bo$54bo61$8b2o3b2o34bo$8bobobobo33bo$10bobo35b3o$8bobobobo$8b2o3b2o
31bo$47bo$45b3o4$52bo$50b2o$51b2o2$48bo$46bobo$47b2o61$10b2o35bobo$9bo
2bo34b2o$9b2obo35bo$12b2o45bobo$9b2o2bo32bo12b2o$8bo2b2o31bobo13bo$8bo
bo34b2o$9b2o$49b2o$48bobo$50bo61$8b2ob2o2bo32bobo$9bobo2bobo32b2o$9bo
2bobo2bo31bo$10bobo2b2o$11b2o6$77bo$75b2o$76b2o3$65bo$63b2o$64b2o3$63b
2o$63bobo$63bo61$9b2ob2o32bobo$8bobobobo32b2o$8bo3bo2bo31bo10bo$9b3obo
bo41bo$11bob2o42b3o2$53b3o$47b3o5bo$49bo4bo$48bo61$12bo38bo$8b2obobo
35bobo$8bob2o2bo35b2o$12b2o$9b3o45bo$8bo2bo44bo$8bobo39bo5b3o$9bo40bob
o$46bo3b2o$47bo$45b3o61$9b2o3bo48bo$8bo2bobobo46b2o$8b2obobobo41bo4bob
o$11bob2o37bo3b2o$8b3o41b2o2bobo$8bo37bobo2bobo$47b2o$47bo61$9b2o35bo$
8bo2bob2o32b2o3bo$8b2obobobo30b2o3b2o$11bobobo35bobo$8b3o3bo$8bo61b2o$
69b2o$71bo3$59bo$58b2o$58bobo61$10b2o34bo$9bo2bo34bo$10bobo32b3o$11bo$
57bo$9b5o43bobo$8bo5bo42b2o$8b2o2bobo$12b2o34bobo$49b2o$49bo3bobo$53b
2o$54bo61$9b2o35bobo$8bo2bob2o32b2o$9bobobobo31bo$10bo4bo$11b4o2$11b2o
$11b2o20$92b2o$92bobo$92bo$69bo$69b2o$68bobo2$72b3o$72bo$73bo61$12b2o
2bo30bobo$8b2obob4o31b2o11bobo$9bobo36bo12b2o$9bobob2o47bo$10b2ob2o38b
2o$52bobo$54bo3$55b3o$55bo$56bo61$9b2o50bobo$8bo2bo34bo14b2o$9b2o33bob
o15bo$45b2o$9b4o41bo$8bo4bo38b2o$9b4o40b2o2$11b2o$11b2o38b2o$50b2o$52b
o61$8b2o2b2o30bobo2bobo$8bo4bo31b2o2b2o$9b4o32bo4bo2$9b4o32bo4bo$8bo4b
o31b2o2b2o$8b2o2b2o30bobo2bobo61$9b2ob2o31bobo$8bobobobo31b2o$8bobo3bo
31bo$9bob3o$11bo$9bobo$9b2o22$72bo$70b2o$71b2o2$95b2o$70bo23b2o$70b2o
24bo$69bobo61$9b2o34bobo$8bob3o33b2o$8bo4bo32bo$9b4obo$14bo$11b3o$10bo
$10b2o2$58b2o$57bobo$59bo9b2o$68b2o$61bo8bo$60b2o$60bobo61$10b2o34bo$
9bob3o33bo$8bo5bo30b3o$8b5obo$12b2o$8b2o38b2o$8b2o39b2o$48bo6b3o$55bo$
56bo$46b3o$48bo$47bo61$9b2o34bo$8bobo35bo5bo$8bo4bo30b3o5bobo$9b5o38b
2o$48bo$9b5o34b2o$8bo4bo33bobo$8bobo50b3o$9b2o50bo$62bo61$9b2o34bobo
13bo$8bo2bo34b2o13bobo$9bo2bo33bo14b2o$10b3o2$10b5o$9bo4bo46bo$8bobobo
46b2o$8bobob2o46b2o$9bo$63b2o$63bobo$63bo61$11b2o33bo$9b3obo30bobo$8bo
4bo31b2o$9b4o2$9b4o$8bo4bo$9b3obo$11b2o18$105bo$104bo$104b3o10$90bo$
89b2o$85bo3bobo$85b2o$84bobo40$14b2o$14bobo43bo$16bo44bo$16bob2o39b3o
5b2o$13b2obob2o46b2o$12bo2bo46bo5bo$11bo2bo47b2o$12b2o47bobo5$56bo$56b
2o$55bobo47$76bobo$76b2o$77bo5$73bo$72b2o$72bobo3$67b3o$69bo$68bo2$5b
2o$5bobo$6bo2bo$7b3o2$7b3o$7bo2bo$8b2o2$55b2o$56b2o$55bo45$85bo$83b2o$
84b2o14$58b2o2b2o$57bobo2bobo$59bo2bo$4b2o$2o2bo$obobo53b2o$2bob2o53b
2o$2bo2bo52bo$3b2o36$68bo$69b2o$68b2o3$65bobo$66b2o$66bo$68b2o$5b2o61b
obo$4bobo61bo$4bo$2b2obo58b3o$bo2bo59bo$bobo61bo$2bo46$78b2o$78bobo$
78bo$70b3o$72bo$71bo$66b2o$65bobo$17bo49bo$16bobo$15bobo$14bobo$13bobo
$12bobo64bo$12b2o64b2o$78bobo52$85bo$86b2o$85b2o3$87bobo$87b2o$29b2o
57bo$29bobo51bobo$31bo51b2o$31b2o51bo$32bo$29b3o$28bo$28b2o$75b2o$76b
2o$75bo73$78bo$79b2o$78b2o2$95bo$93bobo2b2o$94b2ob2o$99bo2$91bobo$92b
2o$92bo7$40b2o$40bobo$42bo$38b4o$38bo$39b3o$41bo51$86bobo$87b2o$87bo$
84bo$82bobo3b2o$83b2o3bobo$88bo$28bo$27bobo$26bo2bo54b2o$26b3o55bobo$
24b2o58bo$23bo2bo$23bo2bo$24b2o61$108bo$108bobo$108b2o6$94bo$94bobo$
94b2o$30b2o$29bobo54bo$29bo57b2o$30b4o52b2o$34bo46b3o$30b4o49bo$29bo
52bo$29bobo$30b2o54$114bo$114bobo$114b2o6$96bo$95bo$95b3o2$97bo$96b2o$
43b2o51bobo$44bo43bo$41bo46b2o$41b2o44bobo2$41b4o$40bo4bo$40b2o2b2o47$
91bo$89bobo$90b2o7$114bo$112b2o$113b2o$57b2o71bo$52bo3bo2bo56b2o11b2o$
51bobobob2o57bobo10bobo$51bobobo60bo$52bo2bo$53b2o57$94bo$95bo$93b3o3b
o$98b2o$98bobo3$95b2o$94bobo$96bo$41b2o$40bobo2$38bobo$38b2o71b2o$110b
2o$112bo51$92bobo$93b2o$93bo11$111bo$109b2o$110b2o3$110b2o$110bobo$
110bo$56b2o$55bo2bo$55b2obo$58b2o$55b2o$56bob2o$56bo2bo$57b2o12$134b3o
$134bo$135bo54$96bo$97bo$95b3o19$113bo$114bo12bobo$112b3o12b2o$128bo
10$60b2o$61bo2b2o$59bobobo2bo$59b2o2bobo$63b2o11$97b2o$96bobo$98bo!
"One picture is worth 1000 words; but one thousand words, carefully crafted, can paint an infinite number of pictures."
- autonomic writing
forFUN : http://viropet.com
Art Gallery : http://cgolart.com
Video WebSite : http://conway.life

carsoncheng
Posts: 470
Joined: June 11th, 2022, 11:24 pm

Re: 4 glider syntheses

Post by carsoncheng » August 26th, 2022, 12:21 am

#235: xs13_354264ko, found in moog_stdin:

Code: Select all

x = 33, y = 32, rule = B3/S23
30bobo$30b2o$31bo5$30bo$29b2o$29bobo3$17b2o$16bobo$18bo15$2o$b2o$o!

carsoncheng
Posts: 470
Joined: June 11th, 2022, 11:24 pm

Re: 4 glider syntheses

Post by carsoncheng » February 18th, 2023, 11:03 pm

simeks wrote:
August 16th, 2017, 4:32 am
It's a very simple search that ducks the complications of enumerating collisions correctly: It just places 4 gliders, each within one of the boxes below picked at random, at random coordinates and phases, but each headed towards the center.

The sizes shown below are the actual sizes of the boxes used for this search - 64 lanes wide and 160 generations deep:

Then it just runs the pattern until it stabilizes and checks if the result is a single strict still-life. It also imports a list of previously known still-lifes that don't need to be reported as results.

The search that found 47 new still-lifes repeated this about 130 billion times, which took 10 CPU days (150000 patterns/second).
It was also able to find 179 of the 186 still-lifes previously known to be synthesizable with 4 or less gliders.
I attempted to replicate your efforts to get more CPU time in your amazing search program. Unfortunately, I don't know how to use your GoLGrid library, even after some attempts at reverse-engineering, as it's undocumented and neglected for years. I tried to do this task with other libraries such as lifelib or LifeAPI, but they could not attain the performance level you described (150000 soups/second). Could you provide details on how to use the GoLGrid library, or better yet, post the source code of this project on GitHub?

The progress that I have made so far is attached below. For now, compile this program with
g++ -o 4g simeks_4g.cpp -O3 -Ofast -flto -std=c++11 -march=native
and then pipe it into apgsearch
(e.g., 4g -n 1000000 -i 5 | ./apgluxe --symmetry 4Glider_stdin -n 1000000 -i 5).
Attachments
simeks_4g.cpp
(6.33 KiB) Downloaded 27 times

simeks
Posts: 401
Joined: March 11th, 2015, 12:03 pm
Location: Sweden

Re: 4 glider syntheses

Post by simeks » February 19th, 2023, 5:54 pm

carsoncheng wrote:
February 18th, 2023, 11:03 pm
I attempted to replicate your efforts to get more CPU time in your amazing search program. Unfortunately, I don't know how to use your GoLGrid library, even after some attempts at reverse-engineering, as it's undocumented and neglected for years. I tried to do this task with other libraries such as lifelib or LifeAPI, but they could not attain the performance level you described (150000 soups/second). Could you provide details on how to use the GoLGrid library, or better yet, post the source code of this project on GitHub?

The progress that I have made so far is attached below. For now, compile this program with
g++ -o 4g simeks_4g.cpp -O3 -Ofast -flto -std=c++11 -march=native
and then pipe it into apgsearch
(e.g., 4g -n 1000000 -i 5 | ./apgluxe --symmetry 4Glider_stdin -n 1000000 -i 5).
I have attaches source code and Windows executables. It should compile on linux too using mk_linux.
Run using:
coll_avx2 db.rle >out.txt

db.rle is a database with still lifes that we already know can be synthesized with 4 gliders.
The included db.rle only has 6 objects and should be updated with other known results.
Results from the database will still be reported, but the result will say that it was already known.
Each new still life will be reported only the first time it is found.

Edit:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Edit 2:
For Linux you should probably add "fflush (stdout);" in coll.c between line 505 and 506.
Attachments
glidercoll_release_2023-02-19.zip
(151.86 KiB) Downloaded 34 times

carsoncheng
Posts: 470
Joined: June 11th, 2022, 11:24 pm

Re: 4 glider syntheses

Post by carsoncheng » February 20th, 2023, 9:18 am

simeks wrote:
February 19th, 2023, 5:54 pm
carsoncheng wrote:
February 18th, 2023, 11:03 pm
I attempted to replicate your efforts to get more CPU time in your amazing search program. Unfortunately, I don't know how to use your GoLGrid library, even after some attempts at reverse-engineering, as it's undocumented and neglected for years. I tried to do this task with other libraries such as lifelib or LifeAPI, but they could not attain the performance level you described (150000 soups/second). Could you provide details on how to use the GoLGrid library, or better yet, post the source code of this project on GitHub?

The progress that I have made so far is attached below. For now, compile this program with
g++ -o 4g simeks_4g.cpp -O3 -Ofast -flto -std=c++11 -march=native
and then pipe it into apgsearch
(e.g., 4g -n 1000000 -i 5 | ./apgluxe --symmetry 4Glider_stdin -n 1000000 -i 5).
I have attaches source code and Windows executables. It should compile on linux too using mk_linux.
Run using:
coll_avx2 db.rle >out.txt

db.rle is a database with still lifes that we already know can be synthesized with 4 gliders.
The included db.rle only has 6 objects and should be updated with other known results.
Results from the database will still be reported, but the result will say that it was already known.
Each new still life will be reported only the first time it is found.

Edit:
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Edit 2:
For Linux you should probably add "fflush (stdout);" in coll.c between line 505 and 506.
Thanks! I have been running this for about 14 hours now with a speed of ~470000 soups/second (because I have 7 separate searchers up). Hasn't been finding anything new, though it found some syntheses that were not known in 2017 (e.g., xs19_69b88gz69d11, xs17_02llicz696), when you first ran the program. Is it possible to add support for finding oscillators (i.e., periodicity detection for some LCMs of common periods, such as 8, instead of period 1 for still lifes)? I think the key lies in the while-true loop in the run_seed function, but I'm not so sure about how to do it.

EDIT: I added a for-loop around lines 469-471. It doesn't look like it's the right way to do it, though; it didn't even detect the blinker, whose period is a factor of 8.

Code: Select all

	while (TRUE)
	{
		GoLGrid *temp = m2;
		m2 = m1;
		m1 = m0;
		m0 = temp;
        for(int i=0; i<8; i++){
            GoLGrid_evolve_inline (m1, m0);
            gen++;
        }
		
		if (GoLGrid_is_equal_inline (m0, m2))
		{
			if (GoLGrid_is_empty (m0))
				break;
			
			if (!GoLGrid_is_equal (m0, m1))
				break;
			
			if (!is_strict_still_life (m0))
				break;

simeks
Posts: 401
Joined: March 11th, 2015, 12:03 pm
Location: Sweden

Re: 4 glider syntheses

Post by simeks » February 20th, 2023, 2:52 pm

carsoncheng wrote:
February 20th, 2023, 9:18 am
Thanks! I have been running this for about 14 hours now with a speed of ~470000 soups/second (because I have 7 separate searchers up). Hasn't been finding anything new, though it found some syntheses that were not known in 2017 (e.g., xs19_69b88gz69d11, xs17_02llicz696), when you first ran the program. Is it possible to add support for finding oscillators (i.e., periodicity detection for some LCMs of common periods, such as 8, instead of period 1 for still lifes)? I think the key lies in the while-true loop in the run_seed function, but I'm not so sure about how to do it.

EDIT: I added a for-loop around lines 469-471. It doesn't look like it's the right way to do it, though; it didn't even detect the blinker, whose period is a factor of 8.

Code: Select all

	while (TRUE)
	{
		GoLGrid *temp = m2;
		m2 = m1;
		m1 = m0;
		m0 = temp;
        for(int i=0; i<8; i++){
            GoLGrid_evolve_inline (m1, m0);
            gen++;
        }
		
		if (GoLGrid_is_equal_inline (m0, m2))
		{
			if (GoLGrid_is_empty (m0))
				break;
			
			if (!GoLGrid_is_equal (m0, m1))
				break;
			
			if (!is_strict_still_life (m0))
				break;
Adding support for oscillators is of course possible, there are two things to consider:
- What is a good definition of a "strict" oscillator? Or maybe we don't need to care, but there might be thousands of copies of a blinker with a block at some random distance from it.
- We need to find a canonical hash value of an oscillator. That should be easy enough to do, but I have no easy-to-plug-in solution for that right now.

GoLGrid_evolve_inline evolves a grid from a source grid to a destination grid. Doing that 8 times in a row is the same as doing it once, so that won't help much. "m" should be interpreted as "minus". So "m2" means "current generation minus 2".

I think you've notices, but if anyone else is trying it out: On line 562 there is a seed value for the pseudo random generator. It is a good idea to modify this so you don't run the exact same search as someone else has done already.
Other things that could be useful to modify are MAX_GENS on line 22, lane_cnt on line 593 and prog_cnt on line 594. "prog" is short for progression, which basically means how many possible generations each glider may at most have progressed from a starting baseline towards the center of events.

carsoncheng
Posts: 470
Joined: June 11th, 2022, 11:24 pm

Re: 4 glider syntheses

Post by carsoncheng » February 20th, 2023, 7:10 pm

simeks wrote:
February 20th, 2023, 2:52 pm
carsoncheng wrote:
February 20th, 2023, 9:18 am
Thanks! I have been running this for about 14 hours now with a speed of ~470000 soups/second (because I have 7 separate searchers up). Hasn't been finding anything new, though it found some syntheses that were not known in 2017 (e.g., xs19_69b88gz69d11, xs17_02llicz696), when you first ran the program. Is it possible to add support for finding oscillators (i.e., periodicity detection for some LCMs of common periods, such as 8, instead of period 1 for still lifes)? I think the key lies in the while-true loop in the run_seed function, but I'm not so sure about how to do it.

EDIT: I added a for-loop around lines 469-471. It doesn't look like it's the right way to do it, though; it didn't even detect the blinker, whose period is a factor of 8.
Adding support for oscillators is of course possible, there are two things to consider:
- What is a good definition of a "strict" oscillator? Or maybe we don't need to care, but there might be thousands of copies of a blinker with a block at some random distance from it.
- We need to find a canonical hash value of an oscillator. That should be easy enough to do, but I have no easy-to-plug-in solution for that right now.

GoLGrid_evolve_inline evolves a grid from a source grid to a destination grid. Doing that 8 times in a row is the same as doing it once, so that won't help much. "m" should be interpreted as "minus". So "m2" means "current generation minus 2".

I think you've notices, but if anyone else is trying it out: On line 562 there is a seed value for the pseudo random generator. It is a good idea to modify this so you don't run the exact same search as someone else has done already.
Other things that could be useful to modify are MAX_GENS on line 22, lane_cnt on line 593 and prog_cnt on line 594. "prog" is short for progression, which basically means how many possible generations each glider may at most have progressed from a starting baseline towards the center of events.
Oh, I probably understand why I'm not finding anything new (and why it still found some smaller glider_stdin syntheses). Your original search was 64 lanes wide and 160 generations deep, but the version you posted was 32 lanes wide and 80 generations deep (if I understand correctly).

For the case of oscillators, maybe we should just assign different hashes to different phases. I have written a parsing program that analyzes the output of each file, and it's apgcode-based, meaning that those different phases are assigned to the same apgcode and the same pattern regardless. But if I need to separate "strict" oscillators, I would probably first opt to use golgrid's still life separator (it's probably based on detecting islands), and if anything goes wrong, maybe I should pipe those soups with oscillators (instead of still lifes) to apgsearch!

EDIT: I have managed to find a way to add periodic object detection; replace the run_seed function in coll.c with this:

Code: Select all

static never_inline void run_seed (SearchState *st)
{
    static int static_init = FALSE;
    static GoLGrid *m9;
    static GoLGrid *m8;
    static GoLGrid *m7;
    static GoLGrid *m6;
    static GoLGrid *m5;
    static GoLGrid *m4;
    static GoLGrid *m3;
    static GoLGrid *m2;
    static GoLGrid *m1;
    static GoLGrid *m0;
    static GoLGrid *temp_1;
    static GoLGrid *temp_2;
    static GoLGrid *can_m0;
    
    if (!static_init)
    {
        static_init = TRUE;
        m9 = alloc_evolve_grid ();
        m8 = alloc_evolve_grid ();
        m7 = alloc_evolve_grid ();
        m6 = alloc_evolve_grid ();
        m5 = alloc_evolve_grid ();
        m4 = alloc_evolve_grid ();
        m3 = alloc_evolve_grid ();
        m2 = alloc_evolve_grid ();
        m1 = alloc_evolve_grid ();
        m0 = alloc_evolve_grid ();
        temp_1 = alloc_evolve_grid ();
        temp_2 = alloc_evolve_grid ();
        can_m0 = alloc_evolve_grid ();
    }
    
    GoLGrid_copy (st->seed, m0);
    
    int allow_out_of_bounds = FALSE;
    u32 gen = 0;
    while (TRUE)
    {
        GoLGrid *temp = m9;
        m9 = m8;
        m8 = m7;
        m7 = m6;
        m6 = m5;
        m5 = m4;
        m4 = m3;
        m3 = m2;
        m2 = m1;
        m1 = m0;
        m0 = temp;
        /*GoLGrid_evolve_inline (m9, m8);
        GoLGrid_evolve_inline (m8, m7);
        GoLGrid_evolve_inline (m7, m6);
        GoLGrid_evolve_inline (m6, m5);
        GoLGrid_evolve_inline (m5, m4);
        GoLGrid_evolve_inline (m4, m3);*/
        //GoLGrid_evolve_inline (m3, m2);
        //GoLGrid_evolve_inline (m2, m1);
        GoLGrid_evolve_inline (m1, m0);
        gen++;
        
        if (GoLGrid_is_equal_inline (m0, m8) || GoLGrid_is_equal_inline(m0, m6) || GoLGrid_is_equal_inline (m0, m5))
        {
            if (GoLGrid_is_empty (m0))
                break;
            
            if (!GoLGrid_is_equal (m0, m8) && !GoLGrid_is_equal(m0, m6) && !GoLGrid_is_equal (m0, m5))
                break;
            
            if (!is_strict_still_life (m0))
                break;
            
            u64 hash = GoLGrid_make_canonical (m0, &st->rda, temp_1, temp_2, can_m0);
            
            int is_previously_known = HashTable_void_is_marked (&st->known_hashtable, hash);
            int is_reported = HashTable_void_is_marked (&st->new_hashtable, hash);
            
            if (is_reported)
                break;
            
            HashTable_void_mark (&st->new_hashtable, hash, NULL);
            
            if (is_previously_known)
            {
                st->prev_cnt++;
                printf ("Previously known still-life %d:\n", st->prev_cnt);
            }
            else
            {
                st->new_cnt++;
                printf ("First occurence of new still-life %d, hash = %" PRIu64 "\n", st->new_cnt, hash);
            }
            
            GoLGrid_print (m0);
            GoLGrid_print_life_history (st->seed);
            fflush (stdout);
            break;
        }
        
        if (gen % 16 == 0)
            if (has_escaping_corner_glider (st, m0))
                break;
        
        Rect bb;
        GoLGrid_get_bounding_box (m0, &bb);
        
        if (!Rect_is_subset (&bb, &st->field_stop))
            break;
        
        int is_within_bounds = Rect_is_subset (&bb, &st->field);
        
        if (allow_out_of_bounds && !is_within_bounds)
            break;
        
        if (!allow_out_of_bounds && is_within_bounds)
            allow_out_of_bounds = TRUE;
        
        if (gen >= MAX_GENS)
            break;
    }
}
The still life separator does a surprisingly good job at separating oscillators, though in some cases it fails to do so, such as when a length-2 surface attaches to a beacon, for example the "beehive on beacon" pseudo-oscillator shown below:

Code: Select all

x = 5, y = 8, rule = B3/S23
b2o$o2bo$b2o2$b2o$b2o$3b2o$3b2o!
EDIT on Feb 23: That minor flaw turned out to be very useful, as it helped improve some syntheses of some pseudo-oscillators. I don't want to clutter this post up, so I have posted them in the Synthesising Oscillators thread (https://conwaylife.com/forums/viewtopic.php?p=158119#p158119)

carsoncheng
Posts: 470
Joined: June 11th, 2022, 11:24 pm

Re: 4 glider syntheses

Post by carsoncheng » March 14th, 2023, 4:29 am

#236: xs14_08o69a4z321

Code: Select all

x = 48, y = 50, rule = B3/S23
obo$b2o$bo31$34bo$32b2o$33b2o3$35b2o$34b2o$36bo7$45b2o$45bobo$45bo!

carsoncheng
Posts: 470
Joined: June 11th, 2022, 11:24 pm

Re: 4 glider syntheses

Post by carsoncheng » April 1st, 2023, 4:48 am

Near-miss: xs11_31e853

Code: Select all

x = 27, y = 30, rule = B3/S23
obo$b2o$bo4$5bobo$6b2o$6bo2$10bo$8b2o$9b2o15$25bo$24b2o$24bobo!														[[ PASTEMODE OR PASTET 21 PASTE 3o! 9 14  PASTEMODE XOR PASTET 21 PASTE o! 10 13 PASTEMODE XOR PASTET 21 PASTE o! 10 15 ]] 
#C April fools troll pattern

Post Reply