apgsearch v1.0

For general discussion about Conway's Game of Life.
Post Reply
User avatar
calcyman
Moderator
Posts: 2936
Joined: June 1st, 2009, 4:32 pm

Re: apgsearch v1.0

Post by calcyman » March 18th, 2015, 6:48 pm

Now that Calcyman has added a feature to display long lists of objects on multiple pages, perhaps we can have a list of all objects of a particular rule and symmetry in order of frequency finally?
http://catagolue.appspot.com/textcensus/b3s23/C1
What do you do with ill crystallographers? Take them to the mono-clinic!

User avatar
gameoflifeboy
Posts: 474
Joined: January 15th, 2015, 2:08 am

Re: apgsearch v1.0

Post by gameoflifeboy » March 18th, 2015, 6:55 pm

Thanks, this was just what I was looking for!

flipper77
Posts: 197
Joined: October 24th, 2010, 3:25 am
Location: Spokane, WA

Re: apgsearch v1.0

Post by flipper77 » March 19th, 2015, 2:42 am

This is a fantastic change, it makes things so much easier when writing a script to get this information since it's all on one page. My previous post has a newly modified version of Andrew's script edited in, so go there if you still want to check for new unique objects.

User avatar
Andrew
Moderator
Posts: 927
Joined: June 2nd, 2009, 2:08 am
Location: Melbourne, Australia
Contact:

Re: apgsearch v1.0

Post by Andrew » March 19th, 2015, 6:01 pm

Excellent -- thanks Adam, and thanks to flipper77 for the script improvements. Now that it's so fast, it should be easy to find all new objects for a particular rule (ignoring symmetry), maybe by entering "b3s23/*" or simply just "b3s23".
Use Glu to explore CA rules on non-periodic tilings: DominoLife and HatLife

flipper77
Posts: 197
Joined: October 24th, 2010, 3:25 am
Location: Spokane, WA

Re: apgsearch v1.0

Post by flipper77 » March 20th, 2015, 4:23 am

Andrew wrote: Now that it's so fast, it should be easy to find all new objects for a particular rule (ignoring symmetry), maybe by entering "b3s23/*" or simply just "b3s23".
Here's yet another modified version that does precisely that, just enter the rule by itself(i.e. b3s23) to ignore symmetry:

Code: Select all

# Scan pages at http://catagolue.appspot.com to determine the number of
# unique objects found for a specified rule and symmetry.

# NB. Doesn't detect new zz_LINEAR objects.

import golly as g
import urllib2
import re

symmetries = ["8x32",\
              "C1",\
              "C2_1", "C2_2", "C2_4",\
              "C4_1", "C4_4",\
              "D2_+1", "D2_+2", "D2_x",\
              "D4_+1", "D4_+2", "D4_+4", "D4_x1", "D4_x4",\
              "D8_1", "D8_4"]

census_prefix = 'http://catagolue.appspot.com/textcensus/'
object_prefix = 'http://catagolue.appspot.com/object?apgcode='

def obj_sort(obj):
    alpha = 'abcdefghijklmnopqrstuvwxyz'
    numeric = '0123546789'
    sort_order = ['ov', 'xs', 'xp', 'xq',\
                  'yl', 'zz', 'PATHOLOGICAL']

    cat, ch, details = obj.partition('_')
    main = sort_order.index(cat.rstrip(numeric))
    prenum = cat.lstrip(alpha)
    try:
        int(prenum)
        middle = prenum.zfill(4) + ch
    except:
        middle = ''

    return (alpha[main] + middle + details)

# prompt for rule and symmetry
inifile = g.getdir('data') + 'scan-catagolue.ini'
rule_sym = 'b3s23/C1'
try:
    f = open(inifile, 'r')
    rule_sym = f.readline()
    f.close()
except:
    # should only happen 1st time (inifile doesn't exist)
    pass

rule_sym = g.getstring('Enter the desired rule and symmetry\n' +
                       '(eg. b3s23/C1):', rule_sym, 'Enter rule/symmetry')
if len(rule_sym) == 0:
    g.exit()
if (('/' in rule_sym) & (rule_sym.partition('/')[2] not in symmetries)):
    g.exit()

# remember specified rule/symmetry for next time
try:
    f = open(inifile, 'w')
    f.write(rule_sym)
    f.close()
except:
    g.warn('Unable to save rule and symmetry in file:\n' + inifile)

objfile = g.getdir('data') + 'catagolue-' + rule_sym.replace('/','-') + '.txt'
old_objects = []

# loads previous objects
try:
    f = open(objfile, 'r')
    contents = f.readlines()
    f.close()
    g.show('Reading previous file...')
    for line in contents:
        old_objects.append(line.partition('\n')[0])
except:
    # should only happen 1st time
    pass

htmlfile = g.getdir('temp') + 'obj.html'
f = open(htmlfile, 'w')
f.write('<html>\n<title>' + rule_sym + '</title>\n<body>\n')
f.write('<p>Object prefixes and counts...<br>\n')

obj_names = []
new_objects = []

# scans text census page
types = {}
if ('/' not in rule_sym):
    symlist = map(lambda arg: '/' + arg, symmetries)
else:
    symlist = ['']

for sym in symlist:
    g.show('Scanning %s census data...' % (rule_sym + sym))
    page = census_prefix + rule_sym + sym
    url = urllib2.urlopen(page)
    obj_data = url.readlines()
    for line in obj_data:
        obj_name, num = map(lambda arg: arg.strip('"'), line.split(','))

        # ignores first line as well as the same object
        if ((obj_name == 'apgcode') | (obj_name in obj_names)):
            continue
        type = obj_name.split('_')[0]
        if types.has_key(type):
            types[type] += 1
        else:
            types[type] = 1
        obj_names.append(obj_name)
        if obj_name not in old_objects:
            new_objects.append(obj_name)

for type in sorted(types.keys(), key=obj_sort):
    f.write(type + ' : ')
    f.write(str(types[type]) + '<br>\n')

# save all object names in a text file
ofile = open(objfile, 'w')
g.show("Writing objects to file...")
for obj in sorted(obj_names, key=obj_sort):
    ofile.write(obj + '\n')
ofile.close()

g.show("Linking new objects...")
f.write('</p><p>Total number of objects: ' + str(len(obj_names)))

if len(new_objects) > 0:
    f.write('</p><p>New objects have been found since last scan:<br>')
    rule = rule_sym.partition('/')[0]
    for obj in sorted(new_objects, key=obj_sort):
        # show link to object in Catagolue
        f.write('<a href="' + object_prefix + obj + '&rule=' + rule + '">' + obj + '</a><br>\n')
elif len(old_objects) > 0:
    f.write('</p><p>(No new objects found since last scan.)')

f.write('</p><p>All object names are saved in <a href="edit:' + objfile + '">' + objfile + '</a>')
f.write('</p></body>\n</html>\n')
f.close()

g.show('Done')

g.open(htmlfile)
The way it works is by using a list of available symmetries to go through if you enter what I just specified. I just entered in the mainstream symmetries into these since these will have the most soups searched. With this kind of script, it'll be much easier to keep tabs on a particular rule instead of manually sifting through the individual census pages.

EDIT: These scripts relating to apgsearch like this script and my find-object script are really useful, I really enjoy using these helper scripts that manage objects and such, things have sped up a lot in the past month since catagolue went live. Since then, 10 billion soups in the b3s23/C1 census have been searched, with an average of 4200 soups per second. At this rate, we will match Okrasinski's object count before July.

EDIT by Andrew: The count for total number of objects was too high (included duplicates) so I removed the ocount stuff and simply inserted "len(obj_names)" for the count. Not sure why I didn't use that in the 1st script!

User avatar
calcyman
Moderator
Posts: 2936
Joined: June 1st, 2009, 4:32 pm

Re: apgsearch v1.0

Post by calcyman » March 20th, 2015, 7:07 am

Since then, 10 billion soups in the b3s23/C1 census have been searched, with an average of 4200 soups per second. At this rate, we will match Okrasinski's object count before July.
The time-average so far is 7979 million objects per day, so we should match Okrasinski's object count within 60 days of the start of Catagolue. That is to say, 21st April.

We should have 10^12 objects before the start of July, and 4*10^12 by the end of this year. Unless we can procure more interest (by which I mean computing power) by posting this on Hacker News or something. I should probably improve the documentation on the website (to describe the symmetry notation etc.) first.
What do you do with ill crystallographers? Take them to the mono-clinic!

User avatar
Scorbie
Posts: 1692
Joined: December 7th, 2013, 1:05 am

Re: apgsearch v1.0

Post by Scorbie » March 21st, 2015, 11:52 pm

Just one comment:
There might be different oscillators working in different rules with the same apgcode.
I'm not talking about the moral pentadecathlon, but the "clock" in this rule:
http://catagolue.appspot.com/census/b34s2/C1/xp2

And a question:
On the top of every object page I see it says "There is currently no description assigned to this pattern."
Is it for future purposes?

User avatar
gameoflifeboy
Posts: 474
Joined: January 15th, 2015, 2:08 am

Re: apgsearch v1.0

Post by gameoflifeboy » March 22nd, 2015, 12:12 am

Scorbie wrote:Just one comment:
There might be different oscillators working in different rules with the same apgcode.
I'm not talking about the moral pentadecathlon, but the "clock" in this rule:
http://catagolue.appspot.com/census/b34s2/C1/xp2

And a question:
On the top of every object page I see it says "There is currently no description assigned to this pattern."
Is it for future purposes?
Yes, I noticed that clock variation before too! And now that we're talking about the names given to patterns, some of them could really be cleaned up. For example, the ones from Okrasinski's census should have their underscores taken out of them, and the ones where the name is nothing more than a hexadecimal number (like 01101aab1aab02a802a80110 here) should have their name removed or a new name given to them.

User avatar
gameoflifeboy
Posts: 474
Joined: January 15th, 2015, 2:08 am

Re: apgsearch v1.0

Post by gameoflifeboy » March 22nd, 2015, 7:14 pm

Some more suggestions for pattern names:
  • xs14_j1u413z11 can be "dock siamese carrier"
  • xs13_354djo can be "house siamese shillelagh"
  • xs15_0gilicz346 can be "big S with tub" (from this post)
  • xs12_651i4ozx11 I once heard called "double claw"
  • xs14_1no3tg is the exact same pattern as Sidewalk from LifeWiki. Not to mention "Bookends" is the name of another pattern in the Catagolue as well.

User avatar
calcyman
Moderator
Posts: 2936
Joined: June 1st, 2009, 4:32 pm

Re: apgsearch v1.0

Post by calcyman » March 23rd, 2015, 12:45 pm

I've implemented your naming suggestions (albeit renaming 'sidewalk' to 'pavement').
What do you do with ill crystallographers? Take them to the mono-clinic!

User avatar
praosylen
Posts: 2443
Joined: September 13th, 2014, 5:36 pm
Location: Pembina University, Home of the Gliders
Contact:

Re: apgsearch v1.0

Post by praosylen » March 23rd, 2015, 1:37 pm

Another naming suggestion: xs31_69b88bbgz69d11dd needs a different name (given that many members of this forum are rather young), although I do concede the current name is accurate.
former username: A for Awesome
praosylen#5847 (Discord)

The only decision I made was made
of flowers, to jump universes to one of springtime in
a land of former winter, where no invisible walls stood,
or could stand for more than a few hours at most...

User avatar
gameoflifeboy
Posts: 474
Joined: January 15th, 2015, 2:08 am

Re: apgsearch v1.0

Post by gameoflifeboy » March 24th, 2015, 5:56 pm

So far, we have found almost every interesting pattern in Okrasinski's census (my standard reference for Life objects frequency since Dec. 2012), except for by flops (00140008006b0008002a0008), cis-mold on dock (031802a400aa009702870300), two pulsar quadrants (007000000108011401270040003000100010), and cloverleaf siamese long beehive (063009480b68194e0771194e0b6809480630), so expect those to be appearing in the next few months.

User avatar
Andrew
Moderator
Posts: 927
Joined: June 2nd, 2009, 2:08 am
Location: Melbourne, Australia
Contact:

Re: apgsearch v1.0

Post by Andrew » March 27th, 2015, 12:18 am

We've just seen the 1st example of a 47-cell still life:

http://catagolue.appspot.com/census/b3s23/D4_+1/xs47

That completes a full set from xs4 to xs50. No odd-numbered examples above xs50.
Use Glu to explore CA rules on non-periodic tilings: DominoLife and HatLife

User avatar
codeholic
Moderator
Posts: 1147
Joined: September 13th, 2011, 8:23 am
Location: Hamburg, Germany

Re: apgsearch v1.0

Post by codeholic » March 27th, 2015, 4:16 am

A for awesome wrote:Another naming suggestion: xs31_69b88bbgz69d11dd needs a different name (given that many members of this forum are rather young)
So what? There is even no obscenity. Don't be a hypocrite.
Ivan Fomichev

User avatar
praosylen
Posts: 2443
Joined: September 13th, 2014, 5:36 pm
Location: Pembina University, Home of the Gliders
Contact:

Re: apgsearch v1.0

Post by praosylen » March 27th, 2015, 8:50 am

codeholic wrote:
A for awesome wrote:Another naming suggestion: xs31_69b88bbgz69d11dd needs a different name (given that many members of this forum are rather young)
So what? There is even no obscenity. Don't be a hypocrite.
Young as in around 12 or younger.
former username: A for Awesome
praosylen#5847 (Discord)

The only decision I made was made
of flowers, to jump universes to one of springtime in
a land of former winter, where no invisible walls stood,
or could stand for more than a few hours at most...

User avatar
biggiemac
Posts: 515
Joined: September 17th, 2014, 12:21 am
Location: California, USA

Re: apgsearch v1.0

Post by biggiemac » March 27th, 2015, 3:10 pm

codeholic wrote:
A for awesome wrote:Another naming suggestion: xs31_69b88bbgz69d11dd needs a different name (given that many members of this forum are rather young)
So what? There is even no obscenity. Don't be a hypocrite.
I agree with A for Awesome, for a different reason - if a suggestion is likely to make middle-school age boys giggle but middle-school age girls feel slightly uncomfortable, then it doesn't deserve a place in official nomenclature. I'm a fan of gender equality in sciences, and I feel like that age in particular is one where any semblance of "This field of study is controlled by boys/men" is likely to deter curious girls. Just my two cents.
Physics: sophistication from simplicity.

User avatar
Alexey_Nigin
Posts: 326
Joined: August 4th, 2014, 12:33 pm
Location: Ann Arbor, MI
Contact:

Re: apgsearch v1.0

Post by Alexey_Nigin » March 27th, 2015, 4:20 pm

Aidan F. Pierce wrote:Another naming suggestion: xs31_69b88bbgz69d11dd needs a different name (given that many members of this forum are rather young), although I do concede the current name is accurate.
I totally agree. Personally, I find this name very odd, even though I am a boy and I am older than many other members. In my opinion, that single word makes a good site seem a bit silly. This will probably dissuade some visitors from coming to the site regularly. At least I don't want to seek a synthesis of a still life with such title.

Edit: Oh, and there is also xs33_69b8bb88gz69d1dd11... If you leave the name of the 31-cell still life as it is, then this still life should be called "long ...". I hope you will consider it a good reason for removing that controversial title.
There are 10 types of people in the world: those who understand binary and those who don't.

User avatar
Kazyan
Posts: 1247
Joined: February 6th, 2014, 11:02 pm

Re: apgsearch v1.0

Post by Kazyan » March 27th, 2015, 4:40 pm

One option is "Aries betwixt two blocks", after the relevant symbol:
♈
Tanner Jacobi
Coldlander, a novel, available in paperback and as an ebook. Now on Amazon.

User avatar
calcyman
Moderator
Posts: 2936
Joined: June 1st, 2009, 4:32 pm

Re: apgsearch v1.0

Post by calcyman » March 27th, 2015, 11:32 pm

All still-lifes with $\geq 31$ cells found in C1/b3s23 now have non-empty non-controversial names.

However, it certainly appears that giving a still-life a controversial name seems to encourage people to discover a glider synthesis. Since it features in Kazyan's 'syringe', I propose calling xs41_8e1eo0kcwo4oz33034al913kp the 'MMR vaccine'.

http://catagolue.appspot.com/object/xs4 ... 13kp/b3s23
http://en.wikipedia.org/wiki/MMR_vaccine_controversy
What do you do with ill crystallographers? Take them to the mono-clinic!

User avatar
Freywa
Posts: 877
Joined: June 23rd, 2011, 3:20 am
Location: Singapore
Contact:

Re: apgsearch v1.0

Post by Freywa » March 28th, 2015, 1:42 am

I have another idea for naming what we now call "Aries betwixt two blocks". That still life and its relatives all feature two blocks sandwiching what appears to me as a C-clef:

Code: Select all

x = 35, y = 21, rule = B3/S23
2b2ob2o5b2ob2o$2b2obobo3bobob2o$7bo3bo$2b5o5b7o$bo17bo$2b5o5b7o$7bo3bo
16bobob2o$2b2obobo3bobob2o11bobobobo$2b2ob2o5b2ob2o11bobo3bo$28bobob2o
$28bob2o$28bobob2o$b2o2b2o5b2o2b2o10bobo3bo$b2o2bobo3bobo2b2o10bobobob
o$7bo3bo16bobob2o$b6o5b8o$o19bo$b6o5b8o$7bo3bo$b2o2bobo3bobo2b2o$b2o2b
2o5b2o2b2o!
Therefore the still lifes should be called narrow clef (top left), wide clef (bottom left), narrow clef with handle (top right) and wide clef with handle (bottom right).

(Good luck Sarah Brightman; see you singing on the ISS later in 2015!)
calcyman wrote:I propose calling xs41_8e1eo0kcwo4oz33034al913kp the 'MMR vaccine'.
In actuality it's a weld of an eater 2 and the long-hook-with-tail variant of eater 5. No need to rename it so colourfully.

Other names I propose:
  • xs14_178f1e8 = dollar sign
    xs15_33gv1oo = Z-hexomino with two blocks
    xs15_2ege1ego = 7/4 hats
Princess of Science, Parcly Taxel

Code: Select all

x = 31, y = 5, rule = B2-a/S12
3bo23bo$2obo4bo13bo4bob2o$3bo4bo13bo4bo$2bo4bobo11bobo4bo$2bo25bo!

User avatar
Scorbie
Posts: 1692
Joined: December 7th, 2013, 1:05 am

Re: apgsearch v1.0

Post by Scorbie » March 30th, 2015, 3:50 am

flipper77 wrote:Also, this D2_x soup is marked as PATHOLOGICAL, but the only interesting thing it does is create a linear growth pattern named yl384_1_116_7c9400afe0d7060deabfcdeb490084cc, which has been recorded one other time:
CODE: SELECT ALL / SHOW IN VIEWER
x = 16, y = 16, rule = B3/S23
3o2b2ob3o4bo$obobobo3b3obo$2obo3bo2b3o2bo$2b2o2b2o2b6o$bo6bobo3bo$o6bo
b4ob2o$2obo2b6obobo$2b2ob3ob5obo$o3bobo2b5obo$o4b5o2bobo$9o5b2o$b3ob4o
2b3o$b3obob3ob2ob2o$3bo2b3o2bobobo$bob3o3b2obo$ob2ob4obob2obo!
The phenomenon is more drastic in b38s23, d8_4 symmetry. All yls(even not a multiple of 589), zzs(including 5 zz_replicators) , and Pathologicals are merely instances of the p589 puffer.http://catagolue.appspot.com/census/b38s23/D8_4

User avatar
gameoflifeboy
Posts: 474
Joined: January 15th, 2015, 2:08 am

Re: apgsearch v1.0

Post by gameoflifeboy » March 30th, 2015, 9:20 pm

Freywa wrote:xs15_2ege1ego = 7/4 hats
So xs11_2ege13 ("hungry hat") is 5/4 hats?

User avatar
gameoflifeboy
Posts: 474
Joined: January 15th, 2015, 2:08 am

Re: apgsearch v1.0

Post by gameoflifeboy » April 2nd, 2015, 6:36 pm

Code: Select all

x = 7, y = 2, rule = B3/S23
6ob$o2bo2bo$5b2o!
This induction coil can be called a shoe.

Similarly this could be called a long shoe:

Code: Select all

x = 8, y = 2, rule = B3/S23
7ob$o2bo3bo$6b2o!

User avatar
Alexey_Nigin
Posts: 326
Joined: August 4th, 2014, 12:33 pm
Location: Ann Arbor, MI
Contact:

Re: apgsearch v1.0

Post by Alexey_Nigin » April 8th, 2015, 2:15 pm

I do not understand why the program calls this "ov_p7":

http://catagolue.appspot.com/object/ov_p7/b36s23

It is actually a transcendental pattern without any p7's in the ash after 2^18 gens.
There are 10 types of people in the world: those who understand binary and those who don't.

wildmyron
Posts: 1544
Joined: August 9th, 2013, 12:45 am
Location: Western Australia

Re: apgsearch v1.0

Post by wildmyron » April 9th, 2015, 1:12 am

Alexey_Nigin wrote:I do not understand why the program calls this "ov_p7":

http://catagolue.appspot.com/object/ov_p7/b36s23

It is actually a transcendental pattern without any p7's in the ash after 2^18 gens.
This is an (un)lucky coincidence. The soup triggers the error detection phase (which is for some reason no longer disabled in HighLife?) and so object detection begins for a second time at gen 456,320. The p7 objects appear just after this point, so they are considered as one object along with the remaining ash from the active region which spawned them. They are knocked off by a pair of backwards escaping gliders around gen 465,000.
The 5S project (Smallest Spaceships Supporting Specific Speeds) is now maintained by AforAmpere. The latest collection is hosted on GitHub and contains well over 1,000,000 spaceships.

Semi-active here - recovering from a severe case of LWTDS.

Post Reply