Script request thread

For scripts to aid with computation or simulation in cellular automata.
User avatar
confocaloid
Posts: 6697
Joined: February 8th, 2022, 3:15 pm
Location: learn to protect yourself against stray gliders and sparks and self-destruct mechanisms

Re: Script request thread

Post by confocaloid »

HerscheltheHerschel wrote: February 12th, 2024, 8:06 amI need apgsearch for windows precompiled to search xfactorio/C1, xfactorio/D8_1, B3S23/D8_1, and B3S23/Pseudo-C1.
confocaloid wrote: February 9th, 2024, 2:02 am I'd say it would be better to investigate the problem to understand why you cannot compile apgsearch for yourself, instead of having to distribute lots of binaries for different rulesym combinations.
confocaloid wrote: February 9th, 2024, 5:59 amDid you look through Tutorials/Contributing to Catagolue / try the steps listed there?
127:1 B3/S234c User:Confocal/R (isotropic CA, incomplete)
Unlikely events happen.
My silence does not imply agreement, nor indifference. If I disagreed with something in the past, then please do not construe my silence as something that could change that.
wildmyron
Posts: 1571
Joined: August 9th, 2013, 12:45 am
Location: Western Australia

Re: Script request thread

Post by wildmyron »

HerscheltheHerschel wrote: February 12th, 2024, 8:06 am (This is unrelated to the python script request above)
I need apgsearch for windows precompiled to search xfactorio/C1, xfactorio/D8_1, B3S23/D8_1, and B3S23/Pseudo-C1.
I built Windows executables of apgluxe for B3/S23 for all standard symmetries some years ago, but they should still work well. You can find them here.

For the other requests:
a) what is Pseudo-C1?
b) I no longer have the environment I used to build them, so I can't help your other requests
c) I agree with confocaloid - If you're interested in running CA search programs then you would be a lot better off investing a bit of time in setting up your own build environment. I find WSL a very convenient way to do this on Windows. It does take a while to get used to the Linux command line but it's well worth it. I posted a minimal set of instructions for someone else (RE ikpx2 which requires Lifelib) which you can use to get up and searching.
Last edited by wildmyron on February 19th, 2024, 6:51 am, edited 1 time in total.
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.
User avatar
yujh
Posts: 3153
Joined: February 27th, 2020, 11:23 pm
Location: I'm not sure where I am, so please tell me if you know
Contact:

Re: Script request thread

Post by yujh »

If pseudo_C1 was referring to this, then it requires the python script apgsearch(requires python 2 and golly 3.3 or before). You should be able to find it on the forums. Then I’m pretty sure you can modify a settings that contains the substring “pseudo” in it; there’s a few places where you will need to modify the script so that it allows the symmetry specified, and that’s it.
Edit: maybe this can be done in newer versions with another approach, I am not sure.
hotdogPi
Moderator
Posts: 2262
Joined: August 12th, 2020, 8:22 pm

Re: Script request thread

Post by hotdogPi »

A script that analyzes an image that a newcomer posts from the playgameoflife website and converts it to RLE.
User:HotdogPi/My discoveries

Periods discovered:

All evens ≤128 except 52,58,78,82,92,94,98,104,118,122

5-15,㉕-㉛,㉟㊺,51,63,65,73,75
1㊳㊵㊹㊼㊽,54,56,72,74,80,90,92
217,240,300,486,576

Guns: 20,21,32,54,55,57,114,117,124,126
SKOPs: 32,74,76,102,196
User avatar
muzik
Posts: 6604
Joined: January 28th, 2016, 2:47 pm
Location: Scotland

Re: Script request thread

Post by muzik »

How about a script that can "identify" one-dimensional replicators, much like oscar.lua? We have a big enough sample size in the form of the 1D replicator collection zip, and it'd come in handy for some recent automated search jobs that have provided far too many results to be raked through manually.
Parity Replicator Collection v1.6 is now live - please send all relevant discoveries here.
hotdogPi
Moderator
Posts: 2262
Joined: August 12th, 2020, 8:22 pm

Re: Script request thread

Post by hotdogPi »

Go through the Catagolue gun census. For 4-digit periods that are a 3-smooth number times a number under 1000, automatically add semi/tremi/quadri-snarks to the 3-digit periods to create the 4-digit period if it would result in a reduction. If there is currently no gun for the specified 4-digit number, don't do anything; this is for fixing sub-optimal guns that don't normally get checked, not for adding new entries to the database.
User:HotdogPi/My discoveries

Periods discovered:

All evens ≤128 except 52,58,78,82,92,94,98,104,118,122

5-15,㉕-㉛,㉟㊺,51,63,65,73,75
1㊳㊵㊹㊼㊽,54,56,72,74,80,90,92
217,240,300,486,576

Guns: 20,21,32,54,55,57,114,117,124,126
SKOPs: 32,74,76,102,196
User avatar
dvgrn
Moderator
Posts: 12023
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Script request thread

Post by dvgrn »

hotdogPi wrote: May 8th, 2024, 8:41 am For 4-digit periods that are a 3-smooth number times a number under 1000, automatically add semi/tremi/quadri-snarks to the 3-digit periods to create the 4-digit period if it would result in a reduction...
"Automatically" is going to be kind of a tall order, isn't it? Or rather, we could automatically build working guns, but they mostly won't be optimal -- custom welding tricks will sometimes help, or sometimes the base gun will have a Herschel factory that can be period-multiplied at a lower cost than using *i-Snarks -- or sometimes a different glider output from the one that the base gun uses will turn out to work better, etc., etc.

When Chris Cain was keeping track of the gun collection, there was a category at the bottom called "tentative guns" -- something along the lines of "calculations say that building this using such-and-such gun family might improve on what we have, at least if the welds and glider crossings and so on happen to work out just right". When one of those guns got built, it would get removed from the "tentative" list, and would get added to the "confirmed" list if it did in fact break a record.

Maybe this hypothetical script should just attempt a survey along these lines, rather than actually trying to build the "tentative guns" in question? Could just provide the raw materials -- the current optimized base gun, and relevant options for period multipliers. We've probably got enough gun-building experts these days that we could collectively make short work of a checklist of hopeful candidates, once we know where to look for sub-optimal stuff.

Also is there a reason not to go after 5-smooth numbers while we're at it?
User avatar
NimbleRogue
Posts: 757
Joined: January 11th, 2021, 11:48 pm

Re: Script request thread

Post by NimbleRogue »

I want a symmetry for searching for LUCA synthesise. The min period looks like this

Code: Select all

x = 2, y = 3, rule = B2cei3-eijr4ceirtw5ciqy6-e7c/S1c2-c3-aiqy4ikntw5nqr6-a
bo$o$bo!
I want, LUCA to have an x and y position of between -50 to 50 and be over 35 in one direction have LUCAs set to a gen between 1 and 800 or so. I also want the soups to be in C1, with ships being able to appear from all 4 directions. There is only the need for 3 ships in synthesis soups given the period of LUCA. I tried to base what I was doing off of 5GliderStdin, but the code is poorly commented, and it seemed to use store positions as a 2^9 number. I have not made any custom symmetries before, so can someone more knowledgeable about apgmera help?
Last edited by NimbleRogue on May 21st, 2024, 4:48 pm, edited 1 time in total.
There you are
User avatar
confocaloid
Posts: 6697
Joined: February 8th, 2022, 3:15 pm
Location: learn to protect yourself against stray gliders and sparks and self-destruct mechanisms

Re: Script request thread

Post by confocaloid »

NimbleRogue wrote: May 20th, 2024, 10:30 pm I want a symmetry for searching for LUCA synthesise. [...]
Can you please explain what "LUCA" means? Is it a type of a synthesis, or some property of a synthesis, or some type of a glider, or something else?
127:1 B3/S234c User:Confocal/R (isotropic CA, incomplete)
Unlikely events happen.
My silence does not imply agreement, nor indifference. If I disagreed with something in the past, then please do not construe my silence as something that could change that.
User avatar
NimbleRogue
Posts: 757
Joined: January 11th, 2021, 11:48 pm

Re: Script request thread

Post by NimbleRogue »

confocaloid wrote: May 21st, 2024, 1:23 am Can you please explain what "LUCA" means? Is it a type of a synthesis, or some property of a synthesis, or some type of a glider, or something else?
Sorry, I should have been more clear. LUCA is the name of this ship

Code: Select all

x = 2, y = 3, rule = B2cei3-eijr4ceirtw5ciqy6-e7c/S1c2-c3-aiqy4ikntw5nqr6-a
bo$o$bo!
LUCA stands for Last universal common ancestor. It is named that way because it is the foundation of 48 speeds of ship in the rule. I am looking for something that will function like a gliderStdin symmetry.
Edit:
I modified Nbsearch2a to do it, although it only works for synths without dust.
For some reason
g.setstep(stab_step)
g.step()
That was used in the original version broke it, so I had to change it to
g.run(stab_step)
Here is the updated code

Code: Select all

import golly as g
import math
from random import *
from timeit import default_timer as timer
from glife.text import make_text
from glife import getminbox, rect

autoRAB=True #automatically detect rule, algorithm and border
group_by_period=True
auto_exclude=5 #maximal number of oscillators of specific period (if group_by_period)
show_periods=True #print list of periods (if group_by_period)
auto_stop=True #stop if no more oscillators can be added (if group_by_period)
max_period=1000
result_spacing=200
stab_step=3000
#x=1
#main_fill=50
count_update=1000

if autoRAB:
    rule=g.getrule()
    algo=g.getalgo()
    if ":" in rule:
        rule,bound=rule.split(":")
        bound=":"+bound
    else: bound=""
else:
    rule=g.getstring("Rule:","B3/S23")
    algo=g.getstring("Algorithm:","QuickLife")
    bound=g.getstring("Bound:","T32,32")
if not (bound=="" or bound.startswith(":")): bound=":"+bound
s=g.getstring("Symmetry","All")

symm=0
if s!="All":
    symm=s

#symm can be either C1, C2_1, C2_2, C2_4, D2_x, D2_+1, D2_+2, C4_1, C4_4, D4_x1, D4_x4, D4_+1, D4_+2, D4_+4, D8_1, D8_4, All, Rot

max_period+=1
oc=[0]*max_period

exclude_periods=[]

def all_periods(q):
    if not show_periods: return ""
    gmin = gmax = 0
    text = "["
    for i in q+[0]:
        if i==0: text += str(gmin) + ("-"+str(gmax)+"]" if gmax>gmin else "]")
        elif gmin==0: gmin = gmax = i
        elif i-gmax==1: gmax = i
        else:
            text += str(gmin) + ("-"+str(gmax)+"," if gmax>gmin else ",")
            gmin = gmax = i
    return text

def osc_test():
    global exclude_periods
    if g.empty():
        return False
    testcells=g.getcells(g.getrect())
    testpop=g.getpop() # String representation
    testhash=g.hash(g.getrect())
    for i in range(1,max_period):
        g.run(1)
        if g.empty():
            return False
        if g.getpop()==testpop and g.hash(g.getrect())==testhash:
            if g.getcells(g.getrect())!=testcells:
                if i not in exclude_periods:
                    if auto_exclude==1: exclude_periods+=[i]
                    return i
                return 0
    return 0


def put_symm(cell_list,x0=0,y0=0,axx=1,axy=0,ayx=0,ayy=1,mode="or"):
    global symm
   
    if s=="All":
        symm=["C1", "C2_1", "C2_2", "C2_4", "D2_x", "D2_+1", "D2_+2", "C4_1", "C4_4", "D4_x1", "D4_x4", "D4_+1", "D4_+2", "D4_+4", "D8_1", "D8_4"][randrange(16)]

    if s=="Shipnod":
        symm=["C1", "D2_+1", "D2_+2"][randrange(3)]

    if s=="Ship+":
        symm=["D2_+1", "D2_+2"][randrange(2)]


    # g.putcells(cell_list,x0,y0,axx,axy,ayx,ayy,mode)
    if symm=="C2_1" or symm=="C4_1" or symm=="D4_+1" or symm=="D8_1" or symm=="D4_x1":
        g.putcells(cell_list,-x0,-y0,-axx,-axy,-ayx,-ayy,mode)
   
    if symm=="C4_1" or symm=="D8_1":
        g.putcells(cell_list,y0,-x0,ayx,ayy,-axx,-axy,mode)
        g.putcells(cell_list,-y0,x0,-ayx,-ayy,axx,axy,mode)
   
    if symm=="C2_2" or symm=="D4_+2":
        g.putcells(cell_list,-x0-1,-y0,-axx,-axy,-ayx,-ayy,mode)
   
    if symm=="C2_4" or symm=="C4_4" or symm=="D4_+4" or symm=="D8_4" or symm=="D4_x4":
        g.putcells(cell_list,-x0-1,-y0-1,-axx,-axy,-ayx,-ayy,mode)
   
    if symm=="D2_+1" or symm=="D8_1" or symm=="D4_+1":
        g.putcells(cell_list,-x0,y0,-axx,-axy,ayx,ayy,mode)
   
    if symm=="D4_+1" or symm=="D8_1" or symm=="D4_+2":
        g.putcells(cell_list,x0,-y0,axx,axy,-ayx,-ayy,mode)
   
    if symm=="D2_+2" or symm=="D4_+2" or symm=="D4_+4" or symm=="D8_4":
        g.putcells(cell_list,-x0-1,y0,-axx,-axy,ayx,ayy,mode)
   
    if symm=="D4_+4" or symm=="D8_4":
        g.putcells(cell_list,x0,-y0-1,axx,axy,-ayx,-ayy,mode)
   
    if symm=="C4_4" or symm=="D8_4":
        g.putcells(cell_list,y0,-x0-1,ayx,ayy,-axx,-axy,mode)
        g.putcells(cell_list,-y0-1,x0,-ayx,-ayy,axx,axy,mode)
   
    if symm=="D8_4":
        g.putcells(cell_list,-y0-1,-x0-1,-ayx,-ayy,-axx,-axy,mode)
   
    if symm=="D2_x" or symm=="D8_1" or symm=="D8_4" or symm=="D4_x1" or symm=="D4_x4":
        g.putcells(cell_list,y0,x0,ayx,ayy,axx,axy,mode)
   
    if symm=="D4_x1" or symm=="D8_1":
        g.putcells(cell_list,-y0,-x0,-ayx,-ayy,-axx,-axy,mode)
   
    if symm=="D4_x4" or symm=="D8_4":
        g.putcells(cell_list,-y0-1,-x0-1,-ayx,-ayy,-axx,-axy,mode)

def clear_layer():
    r = g.getrect()
    if r:
        g.select(r)
        g.clear(0)
    return

ship1 = g.parse("""
bo$obo!
""")

ship2 = g.parse("""
obo$bo!
""")

shipa=[]
shipb=[]

clear_layer()
g.putcells(ship2,0,0)
for i in range(800):
    shipb.append(g.getcells(g.getrect()))
    g.run(1)

def main():
    global oc
    g.new("RandOsc")
    g.setrule(rule+bound)
    g.setalgo(algo)
    g.setbase(2)
    
    test_layer=g.getlayer()
    if g.numlayers()<g.maxlayers():
        results_layer=g.addlayer()
        g.setname('OscResults')
        g.setrule(rule)
        for i in range(max_period-1):
                t = make_text(str(i+1), "mono")
                t.put((i+1)*result_spacing,0)
        g.setlayer(test_layer)
    else:
        resultslayer=-1
    results=0
   
    count=0
    prevcount=0
    t_start=timer()
    t_prev=t_start
    vr=0
    ad=-20
    while True:
        clear_layer()
        #g.select([0,0,x,x])
        #g.randfill(main_fill)
        g.putcells(ship1,0,0)
        g.putcells(shipb[randrange(800)],randint(0,40),randint(35,70))
        cell_list=g.getcells(g.getrect())
        put_symm(cell_list)
        g.run(stab_step)
       	test=osc_test()
        if test>0:
            osc = g.getcells(g.getrect())
            if group_by_period:
                if oc[test]==0: results+=1
                if oc[test]<auto_exclude:
                    if results_layer>=0:
                        oc[test]+=1
                        g.setlayer(results_layer)
                        g.putcells(cell_list, result_spacing*test, result_spacing*oc[test])
                        g.setname('OscResults (%d)' % results)
                        g.fit()
                        g.update()
                        g.setlayer(test_layer)
                        g.setname('RandOsc (%d)' % results)
                    else:
                        return True
            else:
                results+=1
                if results_layer>=0:
                    g.setlayer(results_layer)
                    g.putcells(cell_list, result_spacing*results, 0)
                    g.setname('OscResults (%d)' % results)
                    g.fit()
                    g.update()
                    g.setlayer(test_layer)
                    g.setname('RandOsc (%d)' % results)
                else:
                    return True
       
        count+=1
        if count%count_update==0:
            t_end=timer()
            g.show("%d results found after %d soups tested (%d/sec current, %d/sec overall)" % (results, count, (count-prevcount)/(t_end-t_prev), (count)/(t_end-t_start))+" "+all_periods([i for i in range(max_period) if oc[i]>0]))
            g.select([])
            g.update()
            g.new("")
            g.setbase(2)
            t_prev=t_end
            prevcount=count
            if auto_stop and auto_exclude>0:
                if sum(oc)==(max_period-1-len([i for i in exclude_periods if i<max_period]))*auto_exclude: break
main()
This only looks for 2 ship 180 degree synths, and even though this covers most all possible configurations, it may be useful to reduce the number of gens of ship2 to pick from and reduce the possible x offset
There you are
User avatar
squareroot12621
Posts: 706
Joined: March 23rd, 2022, 4:53 pm

Re: Script request thread

Post by squareroot12621 »

hotdogPi wrote: March 27th, 2024, 8:46 am A script that analyzes an image that a newcomer posts from the playgameoflife website and converts it to RLE.
Done (though it requires installation of the Pillow module and at least Python 3.6):

Code: Select all

from PIL import Image

filename = input('Insert the filename of a playgameoflife.com screenshot '
                 'to convert it to RLE format:\n')
if filename in ['', None]: # No input
    raise ValueError('Program needs filename to run')

with open(filename, 'rb') as rawImage:
    image = Image.open(filename)
    width, height = image.size

    # Convert image to plaintext (glider = ooo$bbo$bob)
    plaintext = ''

    # readyForNextRow and readyForNextCell make sure that a zoomed-in
    # screenshot of a playgameoflife.com pattern won't cause cells
    # to become 20-by-20 blocks
    readyForNextRow = True
    readyForNextCell = True
    for y in range(height):
        if (image.getpixel((0, y))[:3] == (153, 153, 153)
            and image.getpixel((1, y))[:3] == (153, 153, 153)):
            readyForNextRow = True
            continue
        if not readyForNextRow:
            continue
        
        for x in range(width):
            pixel = image.getpixel((x, y))[:3] # Get rid of the alpha channel
            if pixel == (255, 255, 0): # Live cell
                if readyForNextCell:
                    plaintext += 'o'
                readyForNextCell = False
            elif pixel == (126, 126, 126): # Dead cell
                if readyForNextCell:
                    plaintext += 'b'
                readyForNextCell = False
            elif pixel == (153, 153, 153): # Not a cell
                readyForNextCell = True
        
        plaintext += '$'
        readyForNextCell = True
        readyForNextRow = False

    # Get rid of empty space around pattern
    plaintext = [list(row) for row in plaintext.lstrip('$').split('$')][:-1]
    
    # Remove top rows
    # (the bottom rows will be taken care of by the RLE-ifier anyway)
    topRow = min([r for r in range(len(plaintext)) if 'o' in plaintext[r]])
    del plaintext[:topRow]
    
    # Remove left and right columns
    aliveColumns = [c for c in range(len(plaintext[0])) if 'o' in
                    [plaintext[r][c] for r in range(len(plaintext))]]
    firstColumn, *_, lastColumn = aliveColumns
    plainlist = [''.join(r[firstColumn : lastColumn+1]).rstrip('b')
                 for r in plaintext]
    plaintext = '$'.join(plainlist) + '$'

    # Get the dimensions of the RLE while we're at it
    rleWidth = lastColumn + 1 - firstColumn
    rleHeight = len(plaintext.rstrip('$').split('$'))

    # Convert plaintext to RLE
    rle = f'x = {rleWidth}, y = {rleHeight}, rule = B3/S23\n'
    current = ''
    streak = 1
    for cell in plaintext:
        if cell == current:
            streak += 1
        else:
            if streak == 1:
                rle += current
            else:
                rle += str(streak) + current
            current = cell
            streak = 1
    rle += '!'
    print(rle)
Edit: Or if you want it cooked code golf–style:

Code: Select all

from PIL import Image
with open(input(),'rb')as Q:
    I=Image.open(Q);w,h=I.size;p=u='';R=C=s=1;r=range;g=I.getpixel;l=len;B,d='b$'
    for y in r(h):
        if g((0,y))[:3]==g((1,y))[:3]==(153,)*3:R=1;continue
        if 1-R:continue
        for x in r(w):
            if(P:=g((x,y))[:3])==(255,255,0):p+='o'*C;C=0
            elif(126,)*3==P:p+=B*C;C=0
            elif(153,)*3==P:C=1
        p+=d;C=1;R=0
    p=(p:=[list(a)for a in p.lstrip(d).split(d)])[min([b for b in r(l(p))if'o'in p[b]]):-1];m,*_,n=[c for c in r(l(p[0]))if'o'in[p[a][c]for a in r(l(p))]];p=d.join([u.join(a[m:n+1]).rstrip(B)for a in p])+d;F=f'x = {n+1-m}, y = {l(p.rstrip(d).split(d))}, rule = B3/S23\n'
    for c in p:
        if c==u:s+=1
        else:F+=str(s)*(s>1)+u;u=c;s=1
    print(F+'!')
User avatar
Aleph
Posts: 2276
Joined: February 18th, 2021, 11:18 am

Re: Script request thread

Post by Aleph »

dvgrn wrote: May 30th, 2024, 3:51 pm
wwei47 wrote: May 30th, 2024, 1:15 pm In general, if the next glider is n lanes below the current glider, you will need to add 7(n-4) mod 27 extra rephasers to get the next rake to shoot the next glider on the correct lane. This also makes me wonder if slsparse is the correct program for this, because slsparse does not understand that the number of gliders in the slow salvo is not nearly as important as the lanes on which those gliders are shot.
Yup, this is all very familiar territory from the chapter about the Silverfish from the Life textbook. It's true that you can't really conveniently get slsparse to give a genuinely optimized answer to this kind of thing -- you can only pick the cheapest option out of whatever options that it presents... but if that cheapest option is anywhere near the actual best choice, it will only be by sheer luck.

What you really want is some custom code that builds an exhaustive search tree of slow salvo recipes, listing the salvos that can be made with each number of rephasers and rakes -- 1R, 2R, 3R ... until the first forward LWSS recipes start appearing.

If I remember right, that kind of search was done for the old 31c/240 Centipede. I think there was a more recent project that did something similar, but can't bring it to mind immediately. Can anyone point to any likely search code that might be adapted to run a search along these lines?
I do not know how to bell this cat.
User avatar
PHPBB12345
Posts: 1150
Joined: August 5th, 2015, 11:55 pm
Contact:

Re: Script request thread

Post by PHPBB12345 »

toInvestigator.lua:

Code: Select all

local g = golly()

local rule = g.getrule()
local algo = g.getalgo()

local ruletext = [[@RULE SuperToInvestigator
@TABLE
n_states:26
neighborhood:oneDimensional
symmetries:none
var a={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}
var b={a}
var c={2,4,8,10,12,14,16,18,20,22,24}
var d={3,5,7,9,11,13,15,17,19,21,23,25}
c,a,b,0
d,a,b,1
6,a,b,3]]

local function CreateRule()
    local fname = g.getdir("rules").."SuperToInvestigator.rule"
    local f=io.open(fname,"r")
    if f~=nil then
        io.close(f)  -- rule already exists
    else 
        local f = io.open(fname, "w")
        if f then
            f:write(ruletext)
            f:close()
        else
            g.warn("Can't save SuperToInvestigator rule in filename:\n"..filename)
        end
    end
end

-- deal with bounded-universe syntax appropriately
local suffix = ""
local baserule = rule
local ind = string.find(rule, ":")
if ind then
    suffix = rule:sub(ind)
    baserule = rule:sub(1,ind-1)
end

local step = g.getstep()

-- No effect if the current rule ends with "Investigator"
if algo == "Super" then
    if baserule:sub(-12) == "Investigator" then
        g.exit("The current rule is already a [Rule]Investigator rule.")
    else
        if baserule:sub(-5) == "Super" then
            baserule = baserule:sub(1, #baserule-5)
        elseif baserule:sub(-7) == "History" then
            baserule = baserule:sub(1, #baserule-7)
        end
        CreateRule()
        g.setrule("SuperToInvestigator")
        g.run(1)
        g.setgen("-1")
    end
end

-- attempt to set the new Investigator rule to see if it is valid
local function tryrule()
    g.setrule(baserule.."Investigator"..suffix)
end
local status, err = pcall(tryrule)
if err then
    g.note("Conversion failed. This '"..baserule.."' rule is not supported by the Super algo.\n"
           .. "To revert to the original rule, please click OK, then press Z to undo the rule change.")
    g.exit("Press Z to revert to the original rule.")
end

g.setstep(step)
Last edited by PHPBB12345 on June 24th, 2024, 11:01 am, edited 4 times in total.
User avatar
dvgrn
Moderator
Posts: 12023
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Script request thread

Post by dvgrn »

PHPBB12345 wrote: June 24th, 2024, 6:02 am toInvestigator.lua...
Can you explain what this version of toInvestigator.lua is intended for? Golly 4.3 contains a version with a lot of the same code. But the Golly version starts with these comments:

Code: Select all

-- Fast [Rule] to [Rule]Investigator converter,
-- intended to be mapped to a keyboard shortcut, e.g., Alt+I
-- v1.0, 11 May 2024: initial version
The Golly version doesn't attempt to do a Super-to-Investigator conversion, whereas this version does. So this version really needs comments at the top that say exactly what was added.

Is this a response to the following request from the [Rule]Investigator thread?
dvgrn wrote: March 25th, 2024, 2:00 pm Then if anyone is hiding in the woodwork who thinks that that would be highly irritating behavior because there's an obvious direct conversion from [Rule]Investigator to [Rule]Super or [Rule]History, or vice versa, maybe that will encourage them to pop up here and explain the details of how those conversions should work.
I think you've implemented a suggestion/request that I saw somewhere, about which states in [Rule]Super should map to which states in [Rule]Investigator. But I can't seem to find that request at the moment. If you are working from a request like that, can you please post a link to it? Any amount of context or explanation would be really helpful here.
User avatar
d/dx
Posts: 705
Joined: March 22nd, 2024, 2:41 pm
Location: in your walls

Re: Script request thread

Post by d/dx »

not a python script, but could someone please precompile apgluxe to search b3s23/c4_1 and b34aerwzs12eik3aijk6-k7/c1 ?
my shtuffs

xkcd.com/626/


DieciFseis when?

,
User avatar
Vort
Posts: 247
Joined: May 14th, 2024, 6:35 am

Re: Script request thread

Post by Vort »

d/dx wrote: July 23rd, 2024, 9:37 am not a python script, but could someone please precompile apgluxe to search b3s23/c4_1 and b34aerwzs12eik3aijk6-k7/c1 ?
Here are binaries for Windows 7 x64:
apgluxe-b3s23-C4_1.zip
(1.59 MiB) Downloaded 150 times
apgluxe-b34aerwzs12eik3aijk6-k7-C1.zip
(1.52 MiB) Downloaded 133 times
User avatar
d/dx
Posts: 705
Joined: March 22nd, 2024, 2:41 pm
Location: in your walls

Re: Script request thread

Post by d/dx »

Thank you!!
my shtuffs

xkcd.com/626/


DieciFseis when?

,
User avatar
muzik
Posts: 6604
Joined: January 28th, 2016, 2:47 pm
Location: Scotland

Re: Script request thread

Post by muzik »

Are there any scripts that generate a MAP string for a given input isotropic non-totalistic hexagonal rulestring? Golly still doesn't natively support these, so I'd find it useful, and it could even be bundled with Golly by default until it ends up supporting said rulestrings.
Parity Replicator Collection v1.6 is now live - please send all relevant discoveries here.
User avatar
confocaloid
Posts: 6697
Joined: February 8th, 2022, 3:15 pm
Location: learn to protect yourself against stray gliders and sparks and self-destruct mechanisms

Re: Script request thread

Post by confocaloid »

muzik wrote: August 19th, 2024, 5:14 pm Are there any scripts that generate a MAP string for a given input isotropic non-totalistic hexagonal rulestring? Golly still doesn't natively support these, so I'd find it useful, and it could even be bundled with Golly by default until it ends up supporting said rulestrings.
Related discussion:
viewtopic.php?p=185406#p185406
viewtopic.php?p=176808#p176808
127:1 B3/S234c User:Confocal/R (isotropic CA, incomplete)
Unlikely events happen.
My silence does not imply agreement, nor indifference. If I disagreed with something in the past, then please do not construe my silence as something that could change that.
User avatar
breaker's glider gun
Posts: 730
Joined: May 23rd, 2021, 10:26 am
Location: the inside of a stuffed anaconda or maybe [click to not expand]

Re: Script request thread

Post by breaker's glider gun »

Can someone make a png to rle converter, or point me in the direction of a good one? I've been trying to find one that works(makes a pastable rle), but I never find one. I'm fine with a two-state one, or one with an arbitrary number of states with different colors standing for different states.
:?: :?: . . . :!:
Give me a suggestion of something interesting to draw here!
User avatar
Vort
Posts: 247
Joined: May 14th, 2024, 6:35 am

Re: Script request thread

Post by Vort »

breaker's glider gun wrote: August 21st, 2024, 5:17 pmCan someone make a png to rle converter, or point me in the direction of a good one?
You can paste images into Golly. Isn't that enough?
Example: open MS Paint, draw something with black brush or pencil, copy it (Ctrl+A, Ctrl+C), open Golly, paste it (Ctrl+V).
User avatar
breaker's glider gun
Posts: 730
Joined: May 23rd, 2021, 10:26 am
Location: the inside of a stuffed anaconda or maybe [click to not expand]

Re: Script request thread

Post by breaker's glider gun »

Vort wrote: August 22nd, 2024, 12:38 am You can paste images into Golly. Isn't that enough?
Yay! I did not know that.
Question resolved.
:?: :?: . . . :!:
Give me a suggestion of something interesting to draw here!
hotdogPi
Moderator
Posts: 2262
Joined: August 12th, 2020, 8:22 pm

Re: Script request thread

Post by hotdogPi »

Sometimes someone will post a stamp collection of a few objects. My idea: a script that will try different spacings and keep the one with the rarest objects (even though the objects aren't supposed to interact).

For example, mvr just posted this in Discord. Nothing unusual forms, but by changing the number of cells between the two halves, something rarer could be formed (although I'm not finding anything in a manual search).

Code: Select all

x = 24, y = 14, rule = B3/S23
20bo$20b3o$b2o20bo$b2o19b2o7$o20bo$obo18bobo$3o18b3o$2bo20bo!
User:HotdogPi/My discoveries

Periods discovered:

All evens ≤128 except 52,58,78,82,92,94,98,104,118,122

5-15,㉕-㉛,㉟㊺,51,63,65,73,75
1㊳㊵㊹㊼㊽,54,56,72,74,80,90,92
217,240,300,486,576

Guns: 20,21,32,54,55,57,114,117,124,126
SKOPs: 32,74,76,102,196
User avatar
H. H. P. M. P. Cole
Posts: 481
Joined: July 15th, 2023, 9:36 pm

Re: Script request thread

Post by H. H. P. M. P. Cole »

I would like a script to compute the number of 16-cell nontrivial stable objects (SL/osc/ship) in R7,C2,S6-7,B6-7,N+ and put them in a stamp collection. To illustrate just how many there are, here is what seems to be the complete collection of 16-cell strict SLs in this rule:

Code: Select all

x = 404, y = 404, rule = R7,C2,S6-7,B6-7,N+
4o12b3obo12b2ob2o12b3o2bo12b2obobo12b2o2b2o12bob2obo12b3o3bo12b2obo2b
o12b2o2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo
12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$4o12b3o
bo12b2ob2o12b3o2bo12b2obobo12b2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o2b
obo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bo
bo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$4o12b3obo12b2o
b2o12b3o2bo12b2obobo12b2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o2bobo12b
2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o
4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$4o12b3obo12b2ob2o12b3o
2bo12b2obobo12b2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12b
ob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bo
b2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo13$16b3obo12b2ob2o12b3o2bo12b2o
bobo12b2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo
12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12b
obobo2bo12bobo2bobo12bo2b2o2bo$16b3obo12b2ob2o12b3o2bo12b2obobo12b2o2b
2o12bob2obo12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bobobobo12b
3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12b
obo2bobo12bo2b2o2bo$16b3obo12b2ob2o12b3o2bo12b2obobo12b2o2b2o12bob2ob
o12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b
2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo
12bo2b2o2bo2$16b3obo12b2ob2o12b3o2bo12b2obobo12b2o2b2o12bob2obo12b3o3b
o12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b
2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2b
o13$33b2ob2o12b3o2bo12b2obobo12b2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o
2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3b
obo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$33b2ob2o12b3o
2bo12b2obobo12b2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12b
ob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bo
b2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo2$33b2ob2o12b3o2bo12b2obobo12b
2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bobob
obo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo
2bo12bobo2bobo12bo2b2o2bo$33b2ob2o12b3o2bo12b2obobo12b2o2b2o12bob2obo
12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2o
bo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12b
o2b2o2bo13$50b3o2bo12b2obobo12b2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o
2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3b
obo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$50b3o2bo12b2o
bobo12b2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo
12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12b
obobo2bo12bobo2bobo12bo2b2o2bo$50b3o2bo12b2obobo12b2o2b2o12bob2obo12b
3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo
3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo
2b2o2bo3$50b3o2bo12b2obobo12b2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o2b
obo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bo
bo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo13$68b2obobo12b
2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bobob
obo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo
2bo12bobo2bobo12bo2b2o2bo$68b2obobo12b2o2b2o12bob2obo12b3o3bo12b2obo2b
o12b2o2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo
12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo2$68b2o
bobo12b2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo
12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12b
obobo2bo12bobo2bobo12bo2b2o2bo2$68b2obobo12b2o2b2o12bob2obo12b3o3bo12b
2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o
2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo13$
86b2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bo
bobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bob
obo2bo12bobo2bobo12bo2b2o2bo$86b2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o
2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3b
obo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo3$86b2o2b2o12b
ob2obo12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4b
o12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2b
obo12bo2b2o2bo$86b2o2b2o12bob2obo12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o
12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12b
ob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo13$104bob2obo12b3o3bo12b2obo2b
o12b2o2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo
12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo2$104bo
b2obo12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4b
o12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2b
obo12bo2b2o2bo$104bob2obo12b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o
2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3b
o12bobobo2bo12bobo2bobo12bo2b2o2bo2$104bob2obo12b3o3bo12b2obo2bo12b2o
2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3b
obo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo13$122b3o3bo12b
2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o
2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$
122b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b
2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo
12bo2b2o2bo$122b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o2bo12bobobob
o12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2b
o12bobo2bobo12bo2b2o2bo4$122b3o3bo12b2obo2bo12b2o2bobo12b2o3b2o12bob2o
2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3b
o12bobobo2bo12bobo2bobo12bo2b2o2bo13$141b2obo2bo12b2o2bobo12b2o3b2o12b
ob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bo
b2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$141b2obo2bo12b2o2bobo12b2o3b2o
12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12b
ob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo2$141b2obo2bo12b2o2bobo12b2o3b
2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o
12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo3$141b2obo2bo12b2o2bobo12b
2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o
4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo13$160b2o2bobo12b2o3b2o
12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12b
ob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$160b2o2bobo12b2o3b2o12bob2o2b
o12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo
12bobobo2bo12bobo2bobo12bo2b2o2bo3$160b2o2bobo12b2o3b2o12bob2o2bo12bo
bobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bob
obo2bo12bobo2bobo12bo2b2o2bo2$160b2o2bobo12b2o3b2o12bob2o2bo12bobobob
o12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2b
o12bobo2bobo12bo2b2o2bo13$179b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2o
bo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12b
o2b2o2bo$179b2o3b2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b
2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo4$179b2o3b
2o12bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o
12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$179b2o3b2o12bob2o2bo12bob
obobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobo
bo2bo12bobo2bobo12bo2b2o2bo13$198bob2o2bo12bobobobo12b3o4bo12b2obo3bo
12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o
2bo2$198bob2o2bo12bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o
4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$198bob2o2bo12bobobobo
12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo
12bobo2bobo12bo2b2o2bo$396bo2b2o2bo2$198bob2o2bo12bobobobo12b3o4bo12b
2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo
13$217bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o
3bo12bobobo2bo12bobo2bobo12bo2b2o2bo2$217bobobobo12b3o4bo12b2obo3bo12b
2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2b
o2$217bobobobo12b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o
3bo12bobobo2bo12bobo2bobo12bo2b2o2bo2$217bobobobo12b3o4bo12b2obo3bo12b
2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2b
o13$236b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobo
bo2bo12bobo2bobo12bo2b2o2bo$236b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b
2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$236b3o4bo12b2obo3bo
12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o
2bo5$236b3o4bo12b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bob
obo2bo12bobo2bobo12bo2b2o2bo13$256b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b
2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$256b2obo3bo12b2o2bo2bo12b
2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo2$256b2obo
3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo
2b2o2bo4$256b2obo3bo12b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12bobobo2b
o12bobo2bobo12bo2b2o2bo13$276b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o3bo12b
obobo2bo12bobo2bobo12bo2b2o2bo$276b2o2bo2bo12b2o3bobo12b2o4b2o12bob2o
3bo12bobobo2bo12bobo2bobo12bo2b2o2bo3$276b2o2bo2bo12b2o3bobo12b2o4b2o
12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo3$276b2o2bo2bo12b2o3bobo12b
2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo13$296b2o3bobo12b2o4b
2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$296b2o3bobo12b2o4b2o12b
ob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo4$296b2o3bobo12b2o4b2o12bob2o
3bo12bobobo2bo12bobo2bobo12bo2b2o2bo2$296b2o3bobo12b2o4b2o12bob2o3bo12b
obobo2bo12bobo2bobo12bo2b2o2bo13$316b2o4b2o12bob2o3bo12bobobo2bo12bob
o2bobo12bo2b2o2bo$316b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2b
o5$316b2o4b2o12bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$316b2o4b2o12b
ob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo13$336bob2o3bo12bobobo2bo12bo
bo2bobo12bo2b2o2bo2$336bob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo$336b
ob2o3bo12bobobo2bo12bobo2bobo12bo2b2o2bo4$336bob2o3bo12bobobo2bo12bob
o2bobo12bo2b2o2bo13$356bobobo2bo12bobo2bobo12bo2b2o2bo2$356bobobo2bo12b
obo2bobo12bo2b2o2bo2$356bobobo2bo12bobo2bobo12bo2b2o2bo3$356bobobo2bo
12bobo2bobo12bo2b2o2bo13$376bobo2bobo12bo2b2o2bo2$376bobo2bobo12bo2b2o
2bo3$376bobo2bobo12bo2b2o2bo2$376bobo2bobo12bo2b2o2bo13$396bo2b2o2bo3$
396bo2b2o2bo$396bo2b2o2bo3$396bo2b2o2bo!
Small samples of p2 objects:

Code: Select all

x = 277, y = 34, rule = R7,C2,S6-7,B6-7,N+
4o10b4o11b4o12b4o24b4o10b4o11b4o12b4o29b4o10b4o11b4o12b4o24b4o10b4o11b
4o12b4o$3obo9b3o2bo9b3o3bo9b3o4bo20b2ob2o9b2obobo9b2obo2bo9b2obo3bo25b
ob3o9bob2obo9bob2o2bo9bob2o3bo21b4o10b3obo10b3o2bo10b3o3bo$3obo9b3o2b
o9b3o3bo9b3o4bo20b2ob2o9b2obobo9b2obo2bo9b2obo3bo25bob3o9bob2obo9bob2o
2bo9bob2o3bo21b4o10b3obo10b3o2bo10b3o3bo$4o10b4o11b4o12b4o24b4o10b4o11b
4o12b4o29b4o10b4o11b4o12b4o24b4o10b4o11b4o12b4o12$4o10b4o11b4o12b4o24b
4o10b4o11b4o12b4o29b4o10b4o11b4o12b4o24b4o10b4o11b4o12b4o$3obo9b3o2bo
9b3o3bo9b3o4bo20b2ob2o9b2obobo9b2obo2bo9b2obo3bo25bob3o9bob2obo9bob2o
2bo9bob2o3bo21b4o10b3obo10b3o2bo10b3o3bo$4o10b4o11b4o12b4o24b4o10b4o11b
4o12b4o29b4o10b4o11b4o12b4o24b4o10b4o11b4o12b4o$3obo9b3o2bo9b3o3bo9b3o
4bo20b2ob2o9b2obobo9b2obo2bo9b2obo3bo25bob3o9bob2obo9bob2o2bo9bob2o3b
o21b4o10b3obo10b3o2bo10b3o3bo12$4o10b4o11b4o12b4o24b4o10b4o11b4o12b4o
29b4o10b4o11b4o12b4o24b4o10b4o11b4o12b4o$4o10b4o11b4o12b4o24b4o10b4o11b
4o12b4o29b4o10b4o11b4o12b4o24b4o10b4o11b4o12b4o$3obo9b3o2bo9b3o3bo9b3o
4bo20b2ob2o9b2obobo9b2obo2bo9b2obo3bo25bob3o9bob2obo9bob2o2bo9bob2o3b
o21b4o10b3obo10b3o2bo10b3o3bo$3obo9b3o2bo9b3o3bo9b3o4bo20b2ob2o9b2obo
bo9b2obo2bo9b2obo3bo25bob3o9bob2obo9bob2o2bo9bob2o3bo21b4o10b3obo10b3o
2bo10b3o3bo!

Code: Select all

x = 86, y = 18, rule = R7,C2,S6-7,B6-7,N+
2b4o16b4o16b4o16b4o16b4o$2b4o16b4o16b4o16b4o16b4o$2o4b2o12b2o3b2o13b2o
2b2o15b2o2b2o14b2ob2o$2o4b2o12b2o3b2o13b2o2b2o15b2o2b2o14b2ob2o11$2b2o
2b2o14b2ob2o15b2ob2o$2b2o2b2o14b2ob2o15b2ob2o$2o2b2o14b2o2b2o15b2ob2o
$2o2b2o14b2o2b2o15b2ob2o!

Code: Select all

x = 67, y = 25, rule = R7,C2,S6-7,B6-7,N+
2b4o11b4o10b4o11b4o11b4o$2b4o11b4o10b4o11b4o11b4o$2o4b2o$2o4b2o7b2o4b
2o$15b2o4b2o6b2o4b2o$29b2o4b2o7b2o4b2o$44b2o4b2o7b2o4b2o$59b2o4b2o14$
2b3obo9bob2obo$2b3obo9bob2obo$2o3bobo7bobo2bobo$2o3bobo7bobo2bobo!
... and many more. With this variety of objects it might be more practical to create sub-programs that enumerate objects of a given type.

A lower bound on the number of phoenices in this rule that fit within an 8x4 bounding box is 3×23 = 69, where 23 is the number of 8-bit binary strings with four ON bits under the equivalence class that two strings are classed as equivalent under reversal, inversion, or both:

Code: Select all

00001111
00010111
00011011
00011101
00011110
00101011
00101101
00101110
00110011
00110101
00110110
00111001
00111010
00111100
01001101
01001110
01010101
01010110
01011001
01011010
01100110
01101001
01110001
To convert such a string to the RLEs of its three corresponding phoenices:
for number 1, replace 0 with '2b2o$' and replace 1 with '2o$', then replace the last '$' with '!'.
for number 2, replace 0 with 'bobo$' and replace 1 with 'obo$', then replace the last '$' with '!'.
for number 3, replace 0 with 'b2ob$' and replace 1 with 'o2bo$', then replace the last '$' with '!'.
User avatar
LuveelVoom
Posts: 520
Joined: April 27th, 2022, 7:59 pm

Re: Script request thread

Post by LuveelVoom »

A script to emulate these types of rules: viewtopic.php?f=11&t=2030&start=1100#p200086
Post Reply