Sokwe wrote: ↑April 15th, 2021, 2:53 pm
Interesting! How was it found? Does anyone see a way to support it with a single glider stream to get a reflector or pass-through mechanism?
I was actually searching for dependent reflectors:
Code: Select all
import golly as g
import random
layerindex = g.getlayer()
g.new("")
corereaction = g.parse("10b2o$10bo$2b3o3bobo$bo3bo2b2o$o5bo$o5bo$o5bo$bo3bo$2b3o!")
glider = [g.parse("bo$2bo$3o!"), g.parse("obo$b2o$bo!"), g.parse("2bo$obo$b2o!"), g.parse("o$b2o$2o!")]
block = g.parse("2o$2o!")
g.putcells(corereaction)
g.select([-2, 0, 11, 9])
hfhash = g.hash(g.getselrect())
g.run(12)
g.select([2, -1, 3, 3])
ghash = g.hash(g.getselrect())
g.reset()
g.addlayer()
g.setname("Results")
g.setlayer(layerindex)
def clear_layer():
r = g.getrect()
if r:
g.select(r)
g.clear(0)
return
# Periods with an example already (31) or common unsalvegable results (everything else)
badperiods = [29, 30, 31, 39, 46, 51, 52]
# The keep running variable is pretty much useless; I used it for testing
keep_running = True
count = 0
resultcount = 0
while keep_running == True:
count = count + 1
g.reset()
clear_layer()
g.putcells(corereaction)
g.putcells(glider[random.randint(0, 3)], random.randint(-15, -5), random.randint(-9, 6))
#g.putcells(glider[3], -10, 1)
g.putcells(block, random.randint(2, 8), random.randint(11, 19))
g.putcells(block, random.randint(8, 11), random.randint(6, 15))
g.putcells(block, random.randint(-6, 1), random.randint(3, 19))
#g.putcells(block, 10, 9)
g.run(1)
if int(g.getpop()) != 58:
# Blocks interact, don't run
g.reset()
else:
g.run(11)
g.select([2, -1, 3, 3])
if g.hash(g.getselrect()) != ghash:
# Glider isn't released, don't bother run
g.reset()
else:
for i in range(60):
g.run(1)
g.select([-2, 0, 11, 9])
# Checks if honeyfarm is restored.
if (g.hash(g.getselrect()) == hfhash) and (int(g.getgen()) not in badperiods):
g.reset()
resultcount += 1
result = g.getcells(g.getrect())
g.setlayer(layerindex + 1)
g.putcells(result, 100 * resultcount, 0)
g.setlayer(layerindex)
break
g.show(str(count) + " patterns tested, " + str(resultcount) + " results found")
Basically the script places three blocks next to the HF+glider reaction and checks if the honeyfarm is restored (but
doesn't check if the blocks are restored)
(If somebody wants to run the script again, note that I got pretty close to exaustively finding all the results in the search space specified, so you should modify the search parameters (like using something other than blocks))
Here was the output the script gave for this partial (the pond was a result of a bug in the script, but I guess we can thank that bug):
Code: Select all
#C Slightly more feasible for a replacement catalyst? You'll have to cleverly perturb the reaction
#C in the upper left to prevent the next glider from crashing into it
#C It'll still be the first non-snark loop p43, at least
x = 21, y = 18, rule = B3/S23
19b2o$19bo$11b3o3bobo$10bo3bo2b2o$9bo5bo$9bo5bo$o8bo5bo$b2o7bo3bo$2o9b
3o4$7b2o$7b2o$16b2o$15bo2bo$15bo2bo$16b2o!