Gustavo Ramos Rehermann's patterns

A forum where anything goes. Introduce yourselves to other members of the forums, discuss how your name evolves when written out in the Game of Life, or just tell us how you found it. This is the forum for "non-academic" content.
User avatar
dvgrn
Moderator
Posts: 6504
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Gustavo Ramos Rehermann's patterns

Post by dvgrn » January 23rd, 2016, 1:45 am

Scorbie wrote:@dvgrn By the way, does g.evolve(clist, 0) sort all the coordinates?
I'm slightly embarrassed to say that I actually haven't looked at the relevant Golly source code to see if there might somehow be exceptional cases. But yes, that's what it does -- drops all the cells into a temporary new universe, ready to evolve. If you've joined multiple cell lists together and there are some overlaps, this also takes care of those.

When the evolving is done (instantly, in this case), then Golly reads the pattern back out again starting from the top left.

User avatar
Gustavo6046
Posts: 646
Joined: December 7th, 2013, 6:26 pm
Location: South of Brazil.

Re: Gustavo Ramos Rehermann's patterns

Post by Gustavo6046 » January 23rd, 2016, 7:19 am

Scorbie wrote:
Gustavo6046 wrote:It works fine for a few cycles, then crashes because of a line 141 IndexError:
Hmm, it's the same function call again and I'm not sure what's the problem... Good luck. Crashes leave stack traces, so I guess that would be easier to fix than subtle bugs.
Anyway, as I said before,
I would recommend posting the whole error message (unless it's too long) so that people would have a better idea of the problem.
If a Golly python script crashes, I think it gives the um... call trace(?) with a popup window. Copy that message and paste it here next time.
Since I am too lazy to copy it one by one from the window I can't select text, :3 I decided to just annex a screenshot:
Attachments
Traceback, call stack
Traceback, call stack
pyerror2.png (13.64 KiB) Viewed 7458 times
*yawn* What a nothing-to-do day! Let's be the only person in the world to do CGOL during boring times. :)

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

Re: Gustavo Ramos Rehermann's patterns

Post by Scorbie » January 23rd, 2016, 9:19 am

Gustavo6046 wrote:Since I am too lazy to copy it one by one from the window I can't select text, :3 I decided to just annex a screenshot:
Err... Okay... I can't figure out what causes the problem. For a non-evident bug or crash, I usually leave ques. For instance, you could get out of the crash with the following:

Code: Select all

try:
    a_potentially_crashable_statement_or_function()
except:
    # do your error handling here
So you could g.show g.getcells(g.getrect()) and herschels[sli] or you could analyze what's going on in the field by the following:

Code: Select all

# do your error handling here
# Waits for the user to put a key/click somewhere. Analyze what's happening on the field.
while not g.getevent():  # g.getevent() returns '' if the user does not do anything.
    pass
On second thoughts, I think the problem might be on herschels[sli].
But I think you would be able to debug some other problems with the "dirty" method I explained above. (Well the formal method seems to be using pdb, but I never got myself used to pdb...)
Best wishes to you, Scorbie

User avatar
Gustavo6046
Posts: 646
Joined: December 7th, 2013, 6:26 pm
Location: South of Brazil.

Re: Gustavo Ramos Rehermann's patterns

Post by Gustavo6046 » January 23rd, 2016, 9:47 am

I fixed it with:

Code: Select all

		try:
			if celleq(g.getcells(g.getrect()), herschels[sli]):
				found = True
				break
		except IndexError:
			break
And now it's workinn again!

I tried a search with these parameters in the ini file:

Code: Select all

# hrf_test1.ini

[General]
DebugMode=false
LogFilename=hrf.log
OutputDir=hrfOutput

[Input]
Generations=450
Results=3o$2bo$3o!,3o$o$3o!,3o$obo$obo!,obo$obo$3o!,b3o$bo$3o!,3o$bo$b3o!,2b3o$3bo$b3o!,2bo$bobo$obo$2o!
Baits=2o$2o!,o$3o$3bo$2b2o!,bo$obo$obo$bo!,b2o$o2bo$b2o!,2b2o$bobo$bo$2o!,bo$obo$2o!,bo$obo$b2o!,2o$obo$bo!,b2o$obo$bo!,b2o$obo$2o!,2o$obo$b2o!,b2o$o2bo$obo$bo!,b2o$o2bo$bobo$2bo!,bo$obo$bo!
Why don't you run it now that it WORKS??
*yawn* What a nothing-to-do day! Let's be the only person in the world to do CGOL during boring times. :)

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

Re: Gustavo Ramos Rehermann's patterns

Post by Scorbie » January 23rd, 2016, 10:46 am

Gustavo6046 wrote:I fixed it with:

Code: Select all

		try:
			if celleq(g.getcells(g.getrect()), herschels[sli]):
				found = True
				break
		except IndexError:
			break
And now it's workinn again!
Well if you meant working by not crashing, yes, it is working, but merely breaking out of the error doesn't really count as working properly.
Gustavo6046 wrote:Why don't you run it now that it WORKS??
I hope the script suits your needs, but personally, I currently am not in need for colliding patterns with gliders to make Herschels. Maybe I'll use gencols + my custom script if I need to.
Best wishes to you, Scorbie

User avatar
dvgrn
Moderator
Posts: 6504
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Gustavo Ramos Rehermann's patterns

Post by dvgrn » January 23rd, 2016, 11:17 am

Gustavo6046 wrote:Since I am too lazy to copy it one by one from the window I can't select text, :3 I decided to just annex a screenshot...
Secret little-known tip: even though you can't select text in Golly error messages (and almost all other pop-up error windows in Windows) you can still hit Ctrl+C and you'll get the text -- e.g.

Code: Select all

---------------------------
Python error:
---------------------------
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\Dave\Desktop\GustavoSearch.py", line 116
    os.chmod(f)
              ^
IndentationError: unindent does not match any outer indentation level

---------------------------
OK   
---------------------------
Windows makes an error noise as if it's unable to do the copy -- but then it copies the text perfectly. Silly Windows.
Gustavo6046 wrote:I fixed it with:

Code: Select all

...
And now it's workinn again!... Why don't you run it now that it WORKS??
Well, people probably won't run it simply because you didn't post anything that they can run easily.

It seems kind of silly for me to have to take that code snippet you posted, hunt back through the last page of this thread until I find your most recent broken code, locate and replace the correct lines, fix the indentation error on line 116, solve the problem with calling os.chmod() with the wrong number of arguments -- and then hope you haven't made any other incidental changes that you have forgotten to mention, so that I'm really running the same script that you are.

Instead of posting what you fixed, why couldn't you just post the whole script again -- or a ZIP file containing the hrf_test1.ini file and the script? That way people don't have to wonder what to call the INI file. The fewer arbitrary unnecessary hoops you make people jump through to look at your work, the more people will look at it.

However, don't get your hopes up too much -- most people have their own projects in mind, and won't be too interested in yours, until you start getting actual useful results from your program. As Scorbie says, it's really pretty worrisome that you "fixed" a problem just by wrapping the celleq() function call in a try/except block, when the problem is really just that one cell list or the other is empty.

If you're going to be passing in empty lists to celleq() sometimes, then add a test for those cases inside celleq() -- and think hard about what you really want to happen in those cases. Right now it kind of looks like you're breaking out of the loop and reporting a match, whenever you get an error due to an empty cell list. Isn't that really just another kind of mismatch, unless both lists are empty?

The INI file is a really huge improvement, by the way! If you set it up right, it will give everyone a concrete example of the type of search that you're trying to run.

However, when I try to run the script, I still seem to have to draw something manually and select something manually, before it will work. The INI file doesn't really contain all the parameters of your search, so that's some more detail that you'll need to explain much more carefully than you've done so far, if you want people to pay attention.

It might be better to include the Herschel position and the initial selection in the INI file, so that there's no guessing involved and people can really run your script "out of the box".

Also, please do more thorough testing of your code releases! You're working out answers to your problems and fixing your bugs yourself -- which is good, because that's your job, not anyone else's.

Wait until you've tested your script, fixed all the bugs you can find, and gotten useful results out -- and then post the useful results and the final script. Nobody needs to see all the earlier stages. Multiple postings with broken bits of Python and random error messages are discouraging to readers, and will tend to make people stop reading.
Attachments
GustavoSearch.zip
current state (I think) of GustavoSearch.py
(1.99 KiB) Downloaded 143 times

User avatar
Gustavo6046
Posts: 646
Joined: December 7th, 2013, 6:26 pm
Location: South of Brazil.

Re: Gustavo Ramos Rehermann's patterns

Post by Gustavo6046 » January 23rd, 2016, 12:27 pm

O.K! Here is version v0.3 with improved a lot of stuff:

Code: Select all

import golly as g
from sys import exit
from time import sleep
import ConfigParser as cp
import os, glob
import glife as g2

g.addlayer()
g.setname("HRF Searching Area")

herschels = []
stillLifes = []

def celleq(self, other):
	if self != [] or other != []:
		ssort, osort = g.evolve(self, 0), g.evolve(other, 0)
		return g.transform(ssort,-ssort[0],-ssort[1]) == g.transform(osort,-osort[0],-osort[1])
	elif self == other:
		return true
	else:
		return false

assert celleq([0, 1, 0, 2], [0, 2, 0, 3])

def chunks(l, n):
    for i in range(0, len(l), n):
        yield l[i:i+n]
	
def parseRLEs(*args):
	tmp = []
	for x in args:
		tmp.append(g.parse(x))
	return tmp
	
def chunks(l, n):
    for i in range(0, len(l), n):
        yield l[i:i+n]

def giveRLE(clist):
   clist_chunks = list (chunks (clist, 2))
   mcc = min(clist_chunks)
   rl_list = [[x[0]-mcc[0],x[1]-mcc[1]] for x in clist_chunks]
   rle_res = ""
   rle_len = 1
   rl_y = rl_list[0][1] - 1
   rl_x = 0
   for rl_i in rl_list:
      if rl_i[1] == rl_y:
         if rl_i[0] == rl_x + 1:
            rle_len += 1
         else:
            if rle_len == 1: rle_strA = ""
            else: rle_strA = str (rle_len)
            if rl_i[0] - rl_x - 1 == 1: rle_strB = ""
            else: rle_strB = str (rl_i[0] - rl_x - 1)

            rle_res = rle_res + rle_strA + "o" + rle_strB + "b"
            rle_len = 1
      else:
         if rle_len == 1: rle_strA = ""
         else: rle_strA = str (rle_len)
         if rl_i[1] - rl_y == 1: rle_strB = ""
         else: rle_strB = str (rl_i[1] - rl_y)
         if rl_i[0] == 1: rle_strC = "b"
         elif rl_i[0] == 0: rle_strC = ""
         else: rle_strC = str (rl_i[0]) + "b"
         
         rle_res = rle_res + rle_strA + "o" + rle_strB + "$" + rle_strC
         rle_len = 1

      rl_x = rl_i[0]
      rl_y = rl_i[1]
   
   if rle_len == 1: rle_strA = ""
   else: rle_strA = str (rle_len)
   rle_res = rle_res[2:] + rle_strA + "o"
   
   return rle_res+"!"
	
inputconfig = g.getstring("Which file to get configuration from?", "hrf_test1.ini", "HRF v0.3")

input = cp.RawConfigParser()
if input.read(inputconfig) == []:
	g.exit("Non-existent config file!")
try:
	debug = input.getboolean("General", "DebugMode")
	maxgen = input.getint("Input", "Generations")
	herschels = parseRLEs(*input.get("Input", "Results").split(","))
	stillLifes = parseRLEs(*input.get("Input", "Baits").split(","))
	logfile = open(input.get("General", "LogFilename"), "w")
	outdir = input.get("General", "OutputDir")
	selx = input.getint("Search", "SearchAreaX")
	sely = input.getint("Search", "SearchAreaY")
	selw = input.getint("Search", "SearchAreaWidth")
	selh = input.getint("Search", "SearchAreaWidth")
	inpat = g.parse(input.get("Input", "TargetPattern"))
	inpatx = input.getint("Input", "TargetX")
	inpaty = input.getint("Input", "TargetY")
	sel = [selx, sely, selw, selh]
	g.putcells(inpat)
	
except ValueError:
	g.exit("Invalid value(s) in config!")
except cp.NoSectionError:
	g.exit("Invalid sections in config!")
except cp.NoOptionError:
	g.exit("Invalid options in config!")
	
def logToLogfile(logged = "\n"):
	try:
		logfile.write(logged + "\n")
	except IOError:
		g.exit("Log can't be written to!")

results = 0
	
this = []

def ensure_dir(f):
    if not os.path.exists(f):
        os.makedirs(f)
	os.chmod(f, 777)
	
def remove_folder_content(f):
	filelist = glob.glob(f + "\\*.*")
	for x in filelist:
		os.remove(x)
	
remove_folder_content(outdir)
ensure_dir(outdir)
	
def testReaction(xpos, ypos, sli):
	found = False
	global debug
	global maxgen
	global results
	global this
	orig = g.getcells(g.getrect())
	g.putcells(stillLifes[sli], xpos, ypos)
	this = g.getcells(g.getrect())
	oldgeneration = g.getgen()
	for i in range(maxgen):
		oldpat = g.getcells(g.getrect())
		g.step()
		if g.getcells(g.getrect()) == oldpat or g.getcells(g.getrect()) == []:
			break
			
		try:
			if celleq(g.getcells(g.getrect()), herschels[sli]):
				found = True
				break
		except IndexError:
			break
	
	if g.getrect() != []:
		g.select(g.getrect())
		g.clear(0)
		g.select([])
		
	g.setgen(oldgeneration)
	if found:
		try:
			results += 1
			g.putcells(orig)
			logToLogfile("Found reaction!")
			g.show("Found reaction!")
			output = open(outdir + "\\hrf_output" + str(results) + ".cells", "w")
			output.write(giveRLE(g.evolve(this, 0)))
			output.close()
		except IOError:
			g.exit("Found reaction ... Can't write to output!")
		else:
			g.show("Found reaction! Sucessfully saved file.")
	else:
		g.putcells(orig)
		logToLogfile("No result found at x:" + str(xpos) + ", y:" + str(ypos) + ", still life " + str(sli))
		g.show("No result found at x:" + str(xpos) + ", y:" + str(ypos) + ", still life " + str(sli))

def tests():
	global found
	for n in range(sel[2]):
		for m in range(sel[3]):
			for o in range(len(stillLifes)):
				testReaction(n + sel[0], m + sel[1], o)
tests()
logfile.close()
g.clear(1)
g.clear(0)
g.putcells(this)
Sometimes it may seem like still lifes 4 to 12 are skipped, but it is harmless (afaik) and I don't think it's gonna affect the search results.

Here is the search script bundled with the example search setup (or configuration or whatever the name is best. :D )

The INI setup has changed as well:

Code: Select all

[General]
DebugMode=<debug mode is 1, true, yes, on, or 0, false, no, off>
LogFilename=<filename of log generated>
OutputDir=<directory to store output>

[Search]
SearchAreaX=<left of search area X coordinates>
SearchAreaY=<top of search area Y coordinates>
SearchAreaWidth=<width of search area>
SearchAreaHeight=<height of search area>

[Input]
TargetPattern=<initial pattern to run search with>
Generations=<max generation of search run>
Results=<desired result RLEs separated by comma>
Baits=<bait RLEs separated by comma>
TargetX=<x of target in universe>
TargetY=<y of target in universe>
*yawn* What a nothing-to-do day! Let's be the only person in the world to do CGOL during boring times. :)

User avatar
Gustavo6046
Posts: 646
Joined: December 7th, 2013, 6:26 pm
Location: South of Brazil.

Re: Gustavo Ramos Rehermann's patterns

Post by Gustavo6046 » January 24th, 2016, 11:25 am

It's called HRF, not GustavoSearch.

What is the most worth to catalyse glider-to-tub collision?
BlinkerSpawn wrote:Reduced stator:

Code: Select all

x = 13, y = 14, rule = B3/S23
8b2o$3bo2bo2bo$3b5o$b2o5b4o$o2bo2b2o3bo$obo2bo3bo$4b2obob2o$bobobo$2b
2obobob2o$6bob2o2bo$5obo4b2o$o3bobo$bo3bo$2o!
Is this even more reduced?

Code: Select all

x = 15, y = 16, rule = B3/S23
9b2o$4bo2bo2bo$4b5o$2b2o5b4o$bo2bobobo3bo$b2obo3bobo$2bo3bo2b3o$2bobob
o$3b4obob2o$7bob2obo$b5obo4bo$o4bobo4bobo$b2o3bo6b2o$2bo$o$2o!
*yawn* What a nothing-to-do day! Let's be the only person in the world to do CGOL during boring times. :)

mniemiec
Posts: 1107
Joined: June 1st, 2013, 12:00 am

Re: Gustavo Ramos Rehermann's patterns

Post by mniemiec » January 24th, 2016, 2:46 pm

Gustavo6046 wrote:It's called HRF, not GustavoSearch.
BlinkerSpawn wrote:Reduced stator:...
Is this even more reduced? ...
Your solution is larger in both population (6 more live cells), and bounding box (it is one wider on left and right, and two on the bottom), so I am confused by just what you mean by "more reduced".

User avatar
Gustavo6046
Posts: 646
Joined: December 7th, 2013, 6:26 pm
Location: South of Brazil.

Re: Gustavo Ramos Rehermann's patterns

Post by Gustavo6046 » January 24th, 2016, 4:55 pm

Well I should see Golly's info bar more often... :lol:

Anyway I am planning a script that turns the current selection and pattern and save it as HRF ini parameters.
*yawn* What a nothing-to-do day! Let's be the only person in the world to do CGOL during boring times. :)

User avatar
Gustavo6046
Posts: 646
Joined: December 7th, 2013, 6:26 pm
Location: South of Brazil.

Re: Gustavo Ramos Rehermann's patterns

Post by Gustavo6046 » January 24th, 2016, 6:42 pm

I have this incremental recipe of a block to beehive with I-don't-know-how-much hd:

Code: Select all

x = 131, y = 31, rule = B3/S23
6b2o$6b2o31b2o$39b2o$6bo$6b2o74b2o31b2o$5bobo37b2o34bo2bo29bo2bo6b2o$
45b2o35bobo30b2o6bobo3bo$83bo35b3o2bo3bobo$b2o125bobo$obo42b2o82bo$2bo
41bobo$44b2o$78b2o$79b2o$78bo3$33b2o75b2o$32bobo76b2o$34bo75bo5$110b2o
$111b2o$22b3o85bo$24bo$23bo37b2o$60bobo$62bo!
*yawn* What a nothing-to-do day! Let's be the only person in the world to do CGOL during boring times. :)

User avatar
dvgrn
Moderator
Posts: 6504
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Gustavo Ramos Rehermann's patterns

Post by dvgrn » January 24th, 2016, 7:50 pm

Gustavo6046 wrote:I have this incremental recipe of a block to beehive with I-don't-know-how-much hd...
I'm not sure what "hd" has to do with this. And why use eight gliders when you can do block-to-beehive with a slow salvo with at most four gliders?

Or try writing a script and see if you can find block-to-beehive with two synchronized gliders, like the pairs you're using but not so random -- if there's really some reason that you need to convert a block to a beehive in the first place.

User avatar
Gustavo6046
Posts: 646
Joined: December 7th, 2013, 6:26 pm
Location: South of Brazil.

Re: Gustavo Ramos Rehermann's patterns

Post by Gustavo6046 » January 24th, 2016, 7:56 pm

I don't even know what "hd" means!
*yawn* What a nothing-to-do day! Let's be the only person in the world to do CGOL during boring times. :)

mniemiec
Posts: 1107
Joined: June 1st, 2013, 12:00 am

Re: Gustavo Ramos Rehermann's patterns

Post by mniemiec » January 24th, 2016, 9:18 pm

dvgrn wrote:
Gustavo6046 wrote:I have this incremental recipe of a block to beehive with I-don't-know-how-much hd...
I'm not sure what "hd" has to do with this. ...
Gustavo6046 wrote:I don't even know what "hd" means!
Why not? You were the one who wrote "hd" in your original message.

User avatar
Gustavo6046
Posts: 646
Joined: December 7th, 2013, 6:26 pm
Location: South of Brazil.

Re: Gustavo Ramos Rehermann's patterns

Post by Gustavo6046 » January 24th, 2016, 9:58 pm

I don't understand, that's why I posted "I-don't-know-how-much" instead of a definitive number.
*yawn* What a nothing-to-do day! Let's be the only person in the world to do CGOL during boring times. :)

mniemiec
Posts: 1107
Joined: June 1st, 2013, 12:00 am

Re: Gustavo Ramos Rehermann's patterns

Post by mniemiec » January 25th, 2016, 12:24 am

Gustavo6046 wrote:I don't understand, that's why I posted "I-don't-know-how-much" instead of a definitive number.
Then why didn't you just say "I have this incremental recipe of a block to beehive with I-don't-know-how-many gliders"? People understand problems that aren't finished, or values that haven't been determined, but nobody knows what "hd" means (not even you), so using it in that context just confuses people.

Besides, you should know the definite number. Just a brief glance at the pattern in the Life Viewer shows that 8 gliders are used.

M. I. Wright
Posts: 372
Joined: June 13th, 2015, 12:04 pm

Re: Gustavo Ramos Rehermann's patterns

Post by M. I. Wright » January 25th, 2016, 12:52 am

mniemiec wrote:Then why didn't you just say "I have this incremental recipe of a block to beehive with I-don't-know-how-many gliders"? People understand problems that aren't finished, or values that haven't been determined, but nobody knows what "hd" means (not even you)
'hd' stands for the number of half diagonals separating a glider pair. It's been used a lot lately in slow-salvo discussion.

Still, Gustavo, it's really easy to find that out. All you have to do is move one of the gliders diagonally until it's in the same lane as the other, counting as you go.
gamer54657 wrote:God save us all.
God save humanity.

hgkhjfgh
nutshelltlifeDiscord 'Conwaylife Lounge'

mniemiec
Posts: 1107
Joined: June 1st, 2013, 12:00 am

Re: Gustavo Ramos Rehermann's patterns

Post by mniemiec » January 25th, 2016, 5:53 am

M. I. Wright wrote:'hd' stands for the number of half diagonals separating a glider pair. It's been used a lot lately in slow-salvo discussion.
Ah, ok, thanks. I am familiar with the concept, but not the abbreviation. I don't tend to follow the slow salvo discussions, as it's something I have very little experience with.

User avatar
Gustavo6046
Posts: 646
Joined: December 7th, 2013, 6:26 pm
Location: South of Brazil.

Re: Gustavo Ramos Rehermann's patterns

Post by Gustavo6046 » January 26th, 2016, 10:55 am

mniemiec wrote:
M. I. Wright wrote:'hd' stands for the number of half diagonals separating a glider pair. It's been used a lot lately in slow-salvo discussion.
Ah, ok, thanks. I am familiar with the concept, but not the abbreviation. I don't tend to follow the slow salvo discussions, as it's something I have very little experience with.
C'mon! Slow salvos are just pairs of gliders that arrive after the previous one's mess have settled up. One that start the activity and one that stop it for each pair. It is simple!

It can construct marvels! You do know of Demonoid, don't you?

EDIT: I made a (BTBTL) with only 2 gliders:

Code: Select all

x = 18, y = 14, rule = LifeHistory
.C$2.C$3C2$6.C$7.2C$6.2C6$16.2C$16.2C!
There should also be a Blinker That Becomes A Honey Farm (BlTBHF).

EDIT 2: Also, component?

Code: Select all

x = 33, y = 27, rule = LifeHistory
C.C$.2C$.C$6.C$7.C$5.3C9$16.C$17.C$15.3C2$21.C$22.2C$21.2C6$30.3C!
There should be a extensive collection of all known glider pairs that turn a object into another. The Slow-Salvo Component Collection!

EDIT 3: Is there something interesting in this?

Code: Select all

x = 252, y = 240, rule = LifeHistory
26.C$27.C$25.3C5$.C$2.C$3C5$31.C$32.2C$31.2C6$38.C.C$39.2C$39.C21$71.
C$69.C.C$70.2C6$79.C$81.C$78.3C2$77.C37$109.C$110.2C$109.2C8$117.C$
118.C$116.3C25$147.C$148.C$146.3C6$148.C$149.2C$148.2C32$188.C$189.2C
$188.2C4$194.C$195.C$193.3C10$202.C$200.C.C$201.2C$210.C$211.2C$210.
2C17$219.C.C$220.2C$220.C$225.C$226.C$224.3C9$235.C$236.C$234.3C2$
240.C$241.2C$240.2C6$249.3C!
*yawn* What a nothing-to-do day! Let's be the only person in the world to do CGOL during boring times. :)

User avatar
dvgrn
Moderator
Posts: 6504
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Gustavo Ramos Rehermann's patterns

Post by dvgrn » January 26th, 2016, 12:11 pm

Gustavo6046 wrote:C'mon! Slow salvos are just pairs of gliders that arrive after the previous one's mess have settled up. One that start the activity and one that stop it for each pair.
No. Slow salvos are even more simple than that -- there are no glider pairs.

In a slow-salvo recipe, gliders can arrive on different lanes, but the reaction from each single glider collision has to settle down before the next one arrives.

The Demonoid, and several previous universal-constructor patterns, use pairs of gliders on a fixed set of lanes -- the upper arm of the construction arm, so to speak -- colliding with an "elbow" pattern to create a slow salvo at 90 degrees. The 90-degree output gliders could be called the "forearm", I suppose. Then the target object that the slow gliders are aimed at is the "hand".
Gustavo6046 wrote:There should be a extensive collection of all known glider pairs that turn a object into another. The Slow-Salvo Component Collection!
The elbow operations used by the 10hd and 0hd Demonoid include several thousand recipes each. The linear propagator used 9hd separation and only one elbow type, because I didn't know any better yet... Those are the glider-pair conversions that have been found to be useful in a Demonoid or Geminoid. Obviously quite a few recipes have already been collected (though there will always be more that could be found, using more glider pairs).

If you want to create an SSCC database that catalogues glider-pair conversions for non-elbow objects, and for lane separations besides 0hd, 9hd, and 10hd, go right ahead. However, be warned: there are trillions of glider-pair conversions you could collect. So you'd better be really organized about the project, have lots of storage space available, and hopefully also have a clear understanding of what you're going to use the SSCC for. I can't think of any likely uses offhand.

Just please don't bother searching for each of the trillions of conversions manually, and posting them one at a time. If anyone needs, say, 5hd glider-pair conversions, they'll probably write a Python script to generate them and sort them out. It won't occur to anyone to come to this thread and page through the random sampling of conversions that you've posted.
Gustavo6046 wrote:EDIT 3: Is there something interesting in this?
I don't see anything, but I'm not highly motivated to look. The reaction seems random, not at all surprising, and not useful because the number of lanes is not kept to a minimum (one or two).

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

Re: Gustavo Ramos Rehermann's patterns

Post by Alexey_Nigin » January 26th, 2016, 3:20 pm

Gustavo wrote:C'mon! Slow salvos are just pairs of gliders that arrive after the previous one's mess have settled up. One that start the activity and one that stop it for each pair. It is simple!

It can construct marvels! You do know of Demonoid, don't you?
In my personal opinion, your comment looks rude. Mark, like more or less everybody you encounter here, knows what slow salvo and Demonoid are. Your "lesson" was all but necessary. What is more, you have shown that you have very little idea about the subject you tried to teach, as Dave kindly pointed out. You do not seem to understand that you are now occupying the level of a very-very beginner. And by the way, one reason why you may be maintaining that status for years is that you are always acting as the smartest person here. I am not saying that you are stupid or something; if you try hard, you may be able to achieve a lot. But please be realistic about your current self, as well as other people.

And lastly, I believe you had some good intentions in mind when writing that text. If I were you, I would now back up, and everybody would be happy. If you are wondering, I do not always do everything correctly when in less familiar regions of the web (e.g. #xkcd), either. I just listen to what other people say and am usually fine.
There are 10 types of people in the world: those who understand binary and those who don't.

User avatar
drc
Posts: 1664
Joined: December 3rd, 2015, 4:11 pm
Location: creating useless things in OCA

Re: Gustavo Ramos Rehermann's patterns

Post by drc » January 26th, 2016, 3:45 pm

dvgrn wrote: No. Slow salvos are even more simple than that -- there are no glider pairs.

In a slow-salvo recipe, gliders can arrive on different lanes, but the reaction from each single glider collision has to settle down before the next one arrives.
Cool, I was right (I didn't think that was how simple slow salvos were)
\100\97\110\105

User avatar
Gustavo6046
Posts: 646
Joined: December 7th, 2013, 6:26 pm
Location: South of Brazil.

Re: Gustavo Ramos Rehermann's patterns

Post by Gustavo6046 » January 27th, 2016, 11:17 am

I have a plan for a Spartan G-to-H reduction of a Silver G-to-H. It isn't as small or fast as the syringe, but the semi-Spartan aspect as well as the constructability compensates.

First, to make it constructable, we must find a synthesis of this part that is hard to synthesize:

Code: Select all

x = 16, y = 11, rule = B3/S23
4b2obo$4bob2o2$5b5o2bo$2o2bo4bo2b3o$o2bo2bo8bo$bobob2o7b2o$2obo5bo$3bo
4bobo$3b2o2bo2bo$8b2o!
Then we must reflect the left output glider (marked by the arrow... and yes I welded that in a intelligent way :) ) so that it destroy the bad beehive which in the original Silver G-to-H is destroyed using old tech:

Code: Select all

x = 94, y = 63, rule = LifeHistory
37.2A.A$37.A.2A2$38.5A2.A$6.C26.2A2.A4.A2.3A9.2A$5.2BC25.A2.A.BAB7.A
6.2B2AB$5.3CB25.A.A.2AB6.2A6.4B$6.4B4.A9.A8.2A.A.4BA4.5B2.4B$7.4B3.3A
5.3A11.A3.BABA5.10B$8.4B5.A3.A14.2A2.A2BA3.12B$9.4B3.2A.B.2A18.2A2B.
12B$10.4B2.7B20.16B$11.4B3.BDB22.17B$12.4B.BDBDB21.17B$13.5BDBDB19.
18B$14.5BD3B6.2B3.2B2.22B$15.44B$16.43B$16.14B2A26B$14.16B2A26B$14.4B
2A39B$13.4BA2BA7B.2B.3B.4B.17B$12.2AB2.B2A2B.B.4B6.4B2.17B$11.A.AB2.
5B4.4B4.4B.17B$11.A6.2B14.2A3.17B$10.2A6.4B13.A3.17B$20.2A10.3A4.18B$
20.A11.A7.17B$21.3A16.5B2A9B4.A$23.A18.3B2A7B4.3A$43.13B.A$43.6B.6BA.
A$42.7B.4B.2BAB$42.6B.4B3.2B$43.9B3.2B4.D12.D$43.8B3.B2AB2.2D12.5D2.D
.D$42.8B5.2A2.14D.D.D.D2.D.D$42.7B11.2D12.D.D.D2.3D$7.D34.6B5.4A4.D
12.D.D.D3.D$.D5.2D5.A26.7B5.A3.A24.D$D.8D2.B2AB25.7B2.BA.A2.2A7.2A14.
2D$.D5.2D4.ABAB19.3B.8B2.B2A12.A15.D5.D4.D$7.D6.4B15.2B.15B11.BA.A12.
D8.D4.D$15.4B12.20B8.2A.B2A13.D8.D4.D$16.4B7.B2.20B8.B2A2B9.D4.D2.3D
4.D4.D$17.4B5.23B10.4B9.D.2D.D2.D.D4.D2.3D$18.4B4.23B8.6B10.4D3.3D4.D
.2D.2D$19.4B2.24B5.B2.5B2.B8.D2.D3.D6.D.D2.2D$20.4B.24B3.6B2A2B.B2A
14.D6.D.D2.2D$21.37B2A4B2A14.3D4.D.D.3D$22.40B.2B24.3D$23.39B$24.39B$
25.38B$27.25B2.B.6B$28.17B5.B6.5B$28.16B13.6B$28.16B13.6B$29.13B15.5B
$30.9B18.2B3D$32.6B20.BDB$34.4B20.3D$35.B23.B!
While the Syringe is normally better, it's not when you want to construct a G-to-H. ;)

Even if we have to use Snarks, they are at least constructable (the syringe's not).
*yawn* What a nothing-to-do day! Let's be the only person in the world to do CGOL during boring times. :)

User avatar
dvgrn
Moderator
Posts: 6504
Joined: May 17th, 2009, 11:00 pm
Location: Madison, WI
Contact:

Re: Gustavo Ramos Rehermann's patterns

Post by dvgrn » January 27th, 2016, 12:13 pm

Gustavo6046 wrote:I have a plan for a Spartan G-to-H reduction of a Silver G-to-H. It isn't as small or fast as the syringe, but the semi-Spartan aspect as well as the constructability compensates.
Silver reflectors and Silver G-to-Hs are enormously easier to build with universal constructors than an eater3. The linear propagator and the spiral-growth pattern are two examples of "reasonable-sized" Silver-circuit recipes.

I seem to recall Extrementhusiast did come up with a very nice eater3 synthesis, but once it's converted to slow-salvo form, it would be much much more expensive than just constructing the twenty-or-so simple still lifes in a Silver G-to-H. Your design doesn't save much of anything in size or recovery time.

And that's assuming that you solve that ugly glider-reflection problem with some kind of unlikely Spartan magic. I don't think there is any such solution, though.
Gustavo6046 wrote:While the Syringe is normally better, it's not when you want to construct a G-to-H. ;)

Even if we have to use Snarks, they are at least constructable (the syringe's not).
The dependent form of the syringe (the same one that has already been constructed in the two Demonoid spaceships) is much cheaper to build than a Snark, or even than an eater3. There's no contest. It's probably ten times cheaper than an eater3, and a hundred times cheaper than a Snark -- something like that, anyway.

User avatar
Gustavo6046
Posts: 646
Joined: December 7th, 2013, 6:26 pm
Location: South of Brazil.

Re: Gustavo Ramos Rehermann's patterns

Post by Gustavo6046 » January 27th, 2016, 12:20 pm

Well I think this opportunity for practice has gone. But at least, did you think my weld is smart? :)

EDIT: GUYS QUICK look what I found!!!!

Code: Select all

x = 27, y = 24, rule = LifeHistory
17.2E$16.B2CB$17.3B$18.B$17.4B$3.2E12.5B$4.E12.5B$4.E.EB6.8B$5.ECB.3B
.8B$7.10B2D3B$7.10BD2BD2B$8.10BDBD3B.B$7.11B3D4BCE$5.18B.BCE$3.18B4.B
$3.2BD13B$2.3BDBD4B.6B$3.2B3D4B2.B.5B$2.5BD4B7.CE$.10B8.E$4B16.3E$3B
19.E$2B$B!
*yawn* What a nothing-to-do day! Let's be the only person in the world to do CGOL during boring times. :)

Post Reply