Page 1 of 1

2xn spaceship project

Posted: July 12th, 2017, 1:46 pm
by Bullet51
The whole project is inspired by Calcyman's 1xn spaceship project .
Assuming the existence of 1xn spaceships, the existence of 2xn spaceships is trivial.
But 2xn spaceships are interesting for practical reasons, mainly on its length, as they could be much shorter.
It's mostly because of non-destructive reading, i.e. using a bunch of *WSSes to read a 2xn tape of blocks while moving them without destruction:

Code: Select all

x = 54, y = 23, rule = LifeHistory
.6A$A5.A$6.A$A4.A$2.2A2$41.6A$40.A5.A$46.A$40.A4.A$42.2A2$52.2C$52.2C
3$10.A$8.A3.A30.5A$13.A22.A5.A4.A$8.A4.A20.A3.A8.A$9.5A25.A2.A3.A$34.
A4.A4.A$35.5A!
The tape could be ignited by 50% less gliders than the 1xn case.

Code: Select all

x = 21, y = 3, rule = B3/S23
2bo$obo3b3o2b2o6b2o$b2o8b2o6b2o!
#C [[ STOP 11 ]]
It's obvious that 2xn tapes could emit *WSSes. 2xn tapes that emit *WSSes with less junk are favorable, such as the MWSS-emitter below.

Code: Select all

x = 187, y = 91, rule = B3/S23
2o$2b3ob3ob3ob3ob3o2b3o3b2ob2o2b3o22b2o3b2ob2o2b2o3b3o4b2o2b2o7b3o3b2o
3b2o3b2o3b2o2b3o3b2o3b3o3b2o7b2o9b3o2b2o3b2o12b3o$2o27b2ob2o6b3o2b3ob
3o2b3o4b2o3b2ob2o2b2o10b2o2b2o3b3o7b2o3b2o3b2o3b2o8b2o9b2o2b3o2b2o3b3o
8b2o3b2o3b3o2b3o86$2o$2b3ob3ob3ob3ob3o2b2o9b2ob2o2b2o7b2ob2o11b3o13b2o
3b3o2b2o2b2ob2o3b2o3b3o8b2o2b2o14b2o10b2o3b3o2b2o3b2ob2o3b2o$2o21b2o4b
3o2b2ob2o2b2o2b3o2b2ob2o2b3ob3o7b3ob3o4b2o8b2o2b2ob2o3b2o7b3o4b2o2b2o
2b3o3b3o3b2o3b3o4b2o8b2o3b2ob2o3b2o!
Problems essential to the project:
1. Which design can take full advantage of the doubled thickness? Notice that the whole spaceship don't have to move in the direction that it points, it could even travel obliquely.
2. Must the *WSS generators be transparent? In other words, is it possible to employ non-transparent generators?
3. How much construction power does a slow salvo of *WSS have? The signal types in it may be severely restricted (e.g. the whole salvo consists only the two types of signals above).
4. How can a bunch of spaceships read a tape, while returning *WSSes with full construction power, which is encoded on the tape?

Minor questions:
1. Could snakes play any role in the tape? So far, my *WSS emitter search is restricted on blinkers and blocks.
2. Develop 2xn clean fuses which can burn at any given speed, used for timing.

EDIT: Found a new emitter:

Code: Select all

x = 181, y = 3, rule = B3/S23
2o$2b3ob3ob3ob3ob3o2b3o3b2o3b2o3b3o6b2o7b2o9b2o2b2o2b2o11b3o3b2o13b2o
8b2o2b2o3b3o14b2o2b2ob2o8b2ob2o3b2o3b2ob2o$2o27b2o3b2o7b3o2b2o2b3o2b2o
3b3o3b2o2b2o2b2o3b3ob3o7b2o4b3ob3o2b2o3b3o2b2o2b2o7b3o3b3o4b2o2b2ob2o
3b3o2b2ob2o3b2o3b2ob2o!

Code: Select all

x = 180, y = 3, rule = B3/S23
2o$2b3ob3ob3ob3ob3o2b3o8b2o2b2ob2o3b3o2b2o2b2o8b3o8b2o8b3o2b2o7b2o21b
2o2b3ob3o2b2ob2o3b2o2b2o12b2o7b2o4b3o$2o25b3o4b2o2b2ob2o8b2o2b2o4b3o5b
3o4b2o2b3o8b2o2b3o2b2o2b3ob3o2b3o2b3o2b2o11b2ob2o3b2o2b2o2b3ob3o3b2o2b
3o2b2o!

Re: 2xn spaceship project

Posted: July 13th, 2017, 6:16 am
by simsim314
With this approach you could also do it 1xN and use blinkers tape. Why do you prefer 2xN?

Re: 2xn spaceship project

Posted: July 13th, 2017, 10:17 am
by Bullet51
simsim314 wrote:With this approach you could also do it 1xN and use blinkers tape. Why do you prefer 2xN?
I'm not sure whether 1xN non-destructive reading is possible. If it is, it would largely reduce the size of the (hypothetical) 1xN spaceship.

EDIT: I am convinced that 1xN non-destructive reading is possible, at least theoretically.

Re: 2xn spaceship project

Posted: July 13th, 2017, 1:36 pm
by gameoflifemaniac
What's the thinnest known orthogonal spaceship?

Re: 2xn spaceship project

Posted: July 14th, 2017, 12:20 am
by wildmyron
gameoflifemaniac wrote:What's the thinnest known orthogonal spaceship?
I've never seen a table of ships catalogued by the width of their narrowest phase, but I think you'd be hard pressed to find a known ship with a narrowest phase which is three cells wide (LWSS is 4 cells wide in all phases).
If you mean narrowest across all phases then codeholic's Spaceship Search Status Page shows that the LWSS is the narrowest (width of 5) and there are no known ships at that width of any other speed up to a*c/p for 2<=p<=11 and any allowed a.

Re: 2xn spaceship project

Posted: July 16th, 2017, 6:27 am
by Rhombic
Potentially useful reactions:

Code: Select all

x = 177, y = 36, rule = LifeHistory
.D$2D$D.D4$156.D$42.D12.D100.2D$9.A2.A2.A.2A22.D.D2.A2.A4.CAC.A87.2A
2.3A4.DC3.A$10.3A3.A.A.A21.D4.3A5.D.3A86.2A2.A2.A3.D5A$156.D23$174.3A
$174.A$175.A!

Re: 2xn spaceship project

Posted: July 16th, 2017, 9:28 am
by BlinkerSpawn
Rhombic wrote:Potentially useful reactions:

Code: Select all

x = 177, y = 36, rule = LifeHistory
.D$2D$D.D4$156.D$42.D12.D100.2D$9.A2.A2.A.2A22.D.D2.A2.A4.CAC.A87.2A
2.3A4.DC3.A$10.3A3.A.A.A21.D4.3A5.D.3A86.2A2.A2.A3.D5A$156.D23$174.3A
$174.A$175.A!
The problem being that you would be required to recreate those reactions exactly after one period of the spaceship.
Blocks and blinkers are the way we have to do it.

Re: 2xn spaceship project

Posted: August 1st, 2017, 7:51 am
by Rhombic
I'd still like to work on this, so I hope interest hasn't faded that much.
What approaches should we look for at the moment? Or, rather, what kind of searches or scripts would we need?

Creating a 2xN spaceship

Posted: May 28th, 2025, 2:05 pm
by PK22
EDIT: Whoops, didn't see that thread. Posting there would have been necroposting, though. Can a moderator please move this?
(Edit by Sokwe: Moved. Also, rule 3(b) only prohibits necroposting without good reason. This post certainly qualifies as good enough to warrant a necropost.)

Recently, there has been speculation about a spaceship that fits into a 2xN bounding box:
hth3 wrote:
March 27th, 2025, 7:35 am
Conjecture: There is a two cell thick spaceship.
Resu wrote:
May 27th, 2025, 4:35 am
Are there spaceships that are only 2 cells thick?
There is already a thread for the creation of a spaceship with a 1xN bounding box, but I believe creating one with a 2xN bounding box will be slightly easier, as it does not need to be symmetric. This leads to more freedom for the direction of travel and more reactions avaliable.

Here is a Python script to find 2-cell thick soups which produce sideways xWSSes, which could then be used to synthesise a universal constructor:

Code: Select all

import golly as g
length = int(g.getstring('This program is for finding sideways xWSS outputs from 2xN soups. Enter a value for N.', '16'))
soupstosearch = int(g.getstring('How many soups do you want to search?', '1000'))
g.new('2x'+str(length)+' soups')
g.setrule('B3/S23')
g.setgen('0')
interestingsoups = []
def searchsoup():
    g.reset()
    if g.getpop() != '0':
        g.select(g.getrect())
        g.clear(0)
    g.select([0, 0, length, 2])
    g.randfill(50)
    g.run(2000)
    if g.getpop() != '0':
        bbox = g.getrect()
        width = bbox[2]
        height = bbox[3]
        if int(width) > 400 and int(height) < 100: #Checking for width > 400 ensures there is a sideways xWSS, and checking height < 100 ensures there are no excess gliders.
            g.reset()
            g.select(g.getrect())
            g.copy()
            interestingsoups.append(g.getclipstr())
for x in range(soupstosearch//100):
    for y in range(100):
        searchsoup()
    g.show(str((x+1)*100)+' soups completed, of which '+str(len(interestingsoups))+' were deemed interesting.')
g.new('Results')
for x in range(len(interestingsoups)):
    g.setclipstr(interestingsoups[x])
    g.paste(x*(200+length), 0, 'or')       
Unfortunately, I am unable to test it, so there may be syntax or logic errors.

In terms of a tape, a long line of blocks along with a rake could work. Using the (2,1) block pull to move the tape means that only one rake is needed to read the tape, but it also means that the completed spaceship can be a knightship. We do need a simple, glider-constructible spaceship to convert the escaping gliders into xWSSes, which can then be sent back to the universal constructor, as well as a way for the universal constructor to interpret a p48 binary xWSS stream.

Code: Select all

x = 62, y = 30, rule = B3/S23
47b2o$43b4ob2o$43b6o$44b4o2$59b2o$57b2ob2o$53bo3b4o$48b2o2bobo3b2o$37b
o9bo2b2o3bo$36bo11b2o2bobo3b2o$36b3o14bo3b4o$57b2ob2o$44b2o13b2o$42bo
4bo$19bo28bo$18bo23bo5bo$18b3o22b6o4$bo$o$3o5$2o10b2o10b2o10b2o22b2o$
2o10b2o10b2o10b2o22b2o!
The Schick Engine based rake should be constructible. I tried using the reduced version of Backrake 2, but there was no way for the gliders to escape and be converted to xWSSes.

Re: Creating a 2xN spaceship

Posted: May 28th, 2025, 10:26 pm
by Bullet51
I have already started a thread about 2xn spaceships, so it's recommended to merge the discussions in this thread to the 2xn thread.

Re: 2xn spaceship project

Posted: May 29th, 2025, 12:59 pm
by Resu
How is it known that all the used 2xN patterns are synthesisable?

Re: 2xn spaceship project

Posted: May 29th, 2025, 1:54 pm
by PK22
Resu wrote:
May 29th, 2025, 12:59 pm
How is it known that all the used 2xN patterns are synthesisable?
If we use a long line of blocks and blinkers to generate the xWSSes used to build the universal constructor, this reaction from the first post can be used:

Code: Select all

x = 21, y = 3, rule = B3/S23
2bo$obo3b3o2b2o6b2o$b2o8b2o6b2o!
At generation 11, the pattern fits into a 2xN bounding box. Since the tape used is made up of well-seperated blocks and blinkers, it is certainly glider constructible. My idea for the other tape (which will send xWSSes back to the constructor) uses blocks which are 12 cells apart, and this is also certainly glider constructible.

For creating the xWSSes, I've written another Python script:

Code: Select all

from random import randint
import golly as g
#This is a script to find potential 'tapes', or arrangements of a traffic light predecessor, blocks, and blinkers, that evolve into xWSSes that can be used
#to build a universal constructor and a spaceship/rake salvo to read data from a long line of blocks.
soups = int(g.getstring('How many potential tapes do you want to search?', '10000'))
def maketape(objects):
    #This function assembles an rle for a potential tape.
    row1 = 'bbobb'
    row2 = 'ooooo'
    #row1 and row2 use a 2x5 traffic light predecessor that can be formed by a collision between a blinker and glider.
    #This ensures that the tape can be 'activated' into a 2xN form.
    for x in range(objects):
        spacing = randint(2,3)
        #Randomising the spacing means there are more results to find.
        row1 = row1 + 'b'*spacing
        row2 = row2 + 'b'*spacing
        objectused = randint(1,4)
        #objectused is used to randomly place objects in a 2xN bounding box. 1 and 2 represent a block, while 3 and 4 represent the two possible blinker positions.
        if objectused == 1 or objectused == 2:
            row1 = row1 + 'oo'
            row2 = row2 + 'oo'
        elif objectused == 3:
            row1 = row1 + 'ooo'
            row2 = row2 + 'bbb'
        else:
            row1 = row1 + 'bbb'
            row2 = row2 + 'ooo'
    rle = 'x = 0, y = 0, rule = B3/S23\n'+row1+'$'+row2+'!'
    return rle
fullrle = ''
rles = []
for x in range(soups):
    rles.append(maketape(randint(5,20)))
for x in rles:
    fullrle = fullrle + x
f = open('tapes.txt', 'w')
#Saving the tapes to a file ensures that they can be looked through later, either by apgsearch or a custom program.
f.write(fullrle)
f.close()
interestingrles = []
g.new('Potential tapes')
def searchsoup(rle):
    global interestingrles
    g.reset()
    if g.getpop() != '0':
        g.select(g.getrect())
        g.clear(0)
    g.setclipstr(rle)
    g.paste(0, 0, 'xor')
    g.run(2000)
    if g.getpop() != '0':
        bbox = g.getrect()
        width = bbox[2]
        height = bbox[3]
        if int(width) > 700 and int(height) < 100 and int(g.getpop()) < 250
        #Checking for width > 700 ensures there is a sideways xWSS that forms within 600 generations, since sideways xWSSes will be used to create a universal constructor.
        #Checking for height < 100 ensures there are no excess gliders, as if any escape, the 'spaceship' will become a rake instead.
        #Checking for population < 150 ensures that the result will be fairly small, since the ash will likely be cleaned up with xWSS salvos.
            g.reset()
            g.select(g.getrect())
            g.copy()
            interestingrles.append(g.getclipstr())
for x in range(soups//100):
    for y in range(100):
        searchsoup(rles[100*x+y])
    g.show(str((x+1)*100)+' potential tapes have been examined, of which '+str(len(interestingrles))+' have been deemed interesting.')
for x in range(len(interestingrles)):
    g.setclipstr(interestingrles[x])
    g.paste(300*x, 0, 'or')
g.show('Done. Look out for results with no ash blocking the xWSS lane and/or a traffic light produced on the right.')
Again, I am currently unable to test it, but I should be able to within 24 hours. Ideally, you want to look for results which:
  • Are transparent - there should be no ash blocking the output xWSS's lane.
  • Are chainable - a traffic light or other suitable reaction should be produced at the end to ensure chainability, so that we only need to trigger the reaction with gliders once.
  • Are easily cleanable - to minimise rake usage, the ash should ideally be made up of patterns that can be destroyed by MWSSes and HWSSes.
The rake I proposed can be constructed in 17 gliders, but building a seed for it, along with designing and synthesising a universal constructor which can interpret a p48 binary xWSS stream, is probably far too difficult.

Code: Select all

x = 215, y = 186, rule = B3/S23
213bo$212bo$212b3o10$200bobo$200b2o$201bo3$53bo$51bobo$52b2o37$95bo$
93b2o$94b2o7$147bo$147bobo$147b2o11$82bobo$82b2o$83bo8$59bo$60bo$58b3o
2$52bo$53b2o$52b2o2$65bo$66bo$64b3o8$68b3o$70bo$69bo5$54b2o$55b2o$54bo
29$3o$2bo5b3o$bo8bo$9bo6$200bo$199b2o$199bobo12$34b2o$35b2o$34bo3$148b
2o$148bobo$148bo9$161bo$160b2o$160bobo!
However, the reaction from the start of this thread seems much more promising. Creating two MWSSes close together might be slightly difficult, but the construction efficiency with the secondary tape will be worth it. Assuming we can convert the gliders released into xWSSes, we can create xWSS streams with gaps of any multiple of 4 greater than or equal to 32.

Code: Select all

x = 86, y = 23, rule = B3/S23
b6o$o5bo$6bo$o4bo$2b2o2$41b6o$40bo5bo$46bo$40bo4bo$42b2o2$52b2o6b2o6b
2o6b2o6b2o$52b2o6b2o6b2o6b2o6b2o3$10bo$8bo3bo30b5o$13bo22bo5bo4bo$8bo
4bo20bo3bo8bo$9b5o25bo2bo3bo$34bo4bo4bo$35b5o!
I strongly suspect that a single channel glider stream with the same restrictions might be capable of universal construction. There is no need to duplicate the recipe, so if glider streams with gaps of 4N+32 (or maybe slightly higher) are proven universal and we find a simple xWSS-based c/2 G-to-MWSS converter, then the constructor could simply be a 135-degree MWSS-to-G and elbow block, which should be easy to construct and destruct.
Alternatively, if that turns out to be impossible, then we could make a constructor which works with a binary p120 stream, which should be easier than p48 to design and synthesise as we can use p30 technology and Simkin glider guns.