x = 4, y = 3, rule = B2/S
b2o2$o2bo!
x = 4, y = 3, rule = B2/S
b2o2$o2bo!
Entity Valkyrie wrote:Code: Select allx = 4, y = 3, rule = B2/S
b2o2$o2bo!
x = 13, y = 3, rule = B2/S
b2o7b2o$o2bo5bo$12bo!
AforAmpere wrote:3c/10 w9u is negative, unfortunately.
x = 41, y = 49, rule = B3/S23
19b2o$19b4o$19bob2o2$20bo$19b2o$19b3o$21bo$33b2o$33b2o7$36bo$35b2o$34b
o3bo$35b2o2bo$40bo$37bobo$38bo$38bo$38b2o$38b2o3$13bo10bo$12b5o5bob2o
11bo$11bo10bo3bo9bo$12b2o8b3obo9b2o$13b2o9b2o12bo$2o13bo21b3o$2o35b3o
7$8b2o$8b2o11b2o$19b2o2bo$24bo3bo$18bo5bo3bo$19bo2b2o3bobo$20b3o5bo$
28bo!
x = 20, y = 27, rule = B3/S23
b2o$b2o6$14b3o$15bo2bo$19bo$16bobo6$2bobo$2o2b2o$2o3b2o$2o2b2o$b2ob2o$
2b2o3$3b3o$3bobo$3b3o!
A for awesome wrote:2-engine Cordership, minimum population 100:Code: Select allcode
Macbi wrote:A for awesome wrote:2-engine Cordership, minimum population 100:Code: Select allcode
Nice! How did you find it? And how did other people not already find it?
import golly as g
from random import randint
def nest(cl):
rtn = []
if len(cl) % 2:
for i in xrange(len(cl)/3):
rtn.append((cl[i*3],cl[i*3+1],cl[i*3+2]))
else:
for i in xrange(len(cl)/2):
rtn.append((cl[i*2],cl[i*2+1]))
return rtn
def flatten(cl):
rtn = []
for i in cl:
rtn += list(i)
if len(cl[0]) == 3 and not len(rtn) % 2:
rtn.append(0)
return rtn
#I wish Golly had an easy built-in way of doing this.
def clear():
g.setgen("0")
g.select(g.getrect())
if not g.getselrect(): return
g.clear(0)
g.select([])
se = [0,0,1,0,2,0,1,1,4,1,5,2,2,3,4,3]
solutions = []
n = 0
g.new("Switch engine testing grounds")
#I'm too lazy to go through and fix all of the indentation here.
try:
#for i in xrange(96):
# for x in xrange(50):
# for y in xrange(-x, 1):
while True:
#for _ in xrange(10):
if True:
i = randint(0, 96)
x = randint(0, 40)
y = randint(-x, 1)
clear()
g.putcells(g.evolve(se, i))
g.putcells(se, x, y)
c = nest(g.getcells(g.getrect()))
g.select([20,-40,7,7])
g.randfill(50)
g.select([0,-20,7,7])
g.randfill(50)
g.select([])
pat = g.getcells(g.getrect())
#Repeatedly test for switch engine continued survival
for cyc in xrange(1, 31):
g.run(96)
c2 = nest(g.getcells(g.getrect()))
#g.note(str(c) + "\n\n" + str(c2))
for j in c:
if (j[0]+8*cyc, j[1]+8*cyc) not in c2: #Something's wrong
#g.note(str((j[0]+8*cyc, j[1]+8*cyc)) + "\n\n" + str(c2))
break
else:
#Everything's okay, let's advance 96 gens and try again
continue
#We've broken from the inner loop if we're here, which means we're done beating a dead horse
break
else: #A likely candidate
#Advance a while longer and repeat the check for continued SE survival
g.run(9600)
c2 = nest(g.getcells(g.getrect()))
#g.note(str(c) + "\n\n" + str(c2))
#g.note(g.getgen())
for j in c:
if (j[0]+1040, j[1]+1040) not in c2:
#g.note(str((j[0]+8*cyc, j[1]+8*cyc)) + "\n\n" + str(c2))
break
else: #SE's are still active, so this is *almost* certainly a puffer
#Check population growth and keep anything with less debris than a block-laying switch engine
pop = int(g.getpop())
g.run(2880)
#g.note(str(pop) + "\n\n" + g.getpop())
if int(g.getpop()) < pop + 320:
solutions.append(pat)
n += 1
#Inform the user that something is, in fact, still happening
if not n%100:
g.fit()
g.update()
g.show(str(n) + " placements tested, " + str(len(solutions)) + " solutions found (press 'c' to copy results to clipboard or 'q' to quit).")
event = g.getevent()
if event.startswith("key"):
evt, ch, mods = event.split()
if ch == "c":
clear()
for i in xrange(len(solutions)):
g.putcells(solutions[i], 0, i*200)
g.select(g.getrect())
g.copy()
if ch == "q":
raise KeyboardInterrupt() #Technically true
#Ensure that solutions always get printed and (in prior versions of the script) facilitate breaking out of multiple loops
except KeyboardInterrupt:
pass
#Print solutions, obviously
g.new("Solutions")
for i in xrange(len(solutions)):
g.putcells(solutions[i], 0, i*200)
A for awesome wrote:2-engine Cordership, minimum population 100:Code: Select allx = 41, y = 49, rule = B3/S23
19b2o$19b4o$19bob2o2$20bo$19b2o$19b3o$21bo$33b2o$33b2o7$36bo$35b2o$34b
o3bo$35b2o2bo$40bo$37bobo$38bo$38bo$38b2o$38b2o3$13bo10bo$12b5o5bob2o
11bo$11bo10bo3bo9bo$12b2o8b3obo9b2o$13b2o9b2o12bo$2o13bo21b3o$2o35b3o
7$8b2o$8b2o11b2o$19b2o2bo$24bo3bo$18bo5bo3bo$19bo2b2o3bobo$20b3o5bo$
28bo!
x = 61, y = 48, rule = B3/S23
16bo$15bobo$14b2ob2o$14b2ob2o$13b3o$13b3o3bo$13b3o4bo$14b2o5bo$14b3o$
15b2o$16b2o3$16bo$15b3o$14bo3bo$18b2o$17b2o$3o$4bo$4b2o$4bo2bo$5bobo$
5bo$4b2o$3bobo$5b2o$2b2o$4bo17$58b3o$58bo$59bo!
dvgrn wrote:EDIT: Here's a (probably) slightly cheaper predecessor. The smoke seems fairly tenacious, so it might take an automated search to come up with the least expensive synthesis.
#C Seeds of Destruction
x = 156, y = 159, rule = LifeHistory
19.A.A$20.2A$20.A28.A$48.A$48.3A2$A$.2A$2A$42.A$42.A.A$42.2A
16$52.2A$52.A.A$52.A18$45.3A$45.A$46.A27$104.A$103.2A$103.A.
A4$115.3A$115.A$116.A5$108.3A$108.A$109.A27$96.2A$96.A.A$96.
A51.3A$148.A$149.A8$131.2A$131.A.A$131.A24$153.2A$153.A.A$
153.A!
import golly as g
from random import randint
def nest(cl):
rtn = []
if len(cl) % 2:
for i in xrange(len(cl)/3):
rtn.append((cl[i*3],cl[i*3+1],cl[i*3+2]))
else:
for i in xrange(len(cl)/2):
rtn.append((cl[i*2],cl[i*2+1]))
return rtn
def flatten(cl):
rtn = []
for i in cl:
rtn += list(i)
if len(cl[0]) == 3 and not len(rtn) % 2:
rtn.append(0)
return rtn
#I wish Golly had an easy built-in way of doing this.
def clear():
g.setgen("0")
g.select(g.getrect())
if not g.getselrect(): return
g.clear(0)
g.select([])
se = [0,0,1,0,2,0,1,1,4,1,5,2,2,3,4,3]
solutions = []
n = 0
g.new("Switch engine testing grounds")
#I'm too lazy to go through and fix all of the indentation here.
try:
#for i in xrange(96):
# for x in xrange(50):
# for y in xrange(-x, 1):
while True:
#for _ in xrange(10):
if True:
#Generation
i = randint(0, 48)
#Orientation (otherwise some solutions would be skipped)
o = randint(0, 2)
#Close but not too close
x = randint(10, 30)
y = randint(-x, min(x-20,1))
clear()
g.putcells(g.evolve(se, i))
if o:
#Flip diagonally
g.select(g.getrect())
g.flip(0)
g.rotate(1)
g.select([])
g.putcells(se, x, y)
'''g.fit()
g.update()
g.note("")'''
c = nest(g.getcells(g.getrect()))
#g.select([20,-40,7,7])
#g.randfill(50)
g.select([0,-20,7,7])
g.randfill(50)
g.select([])
pat = g.getcells(g.getrect())
#Repeatedly test for switch engine continued survival
for cyc in xrange(1, 31):
g.run(96)
c2 = nest(g.getcells(g.getrect()))
#g.note(str(c) + "\n\n" + str(c2))
for j in c:
if (j[0]+8*cyc, j[1]+8*cyc) not in c2: #Something's wrong
#g.note(str((j[0]+8*cyc, j[1]+8*cyc)) + "\n\n" + str(c2))
break
else:
#Everything's okay, let's advance 96 gens and try again
continue
#We've broken from the inner loop if we're here, which means we're done beating a dead horse
break
else: #A likely candidate
#Advance a while longer and repeat the check for continued SE survival
g.run(9600)
c2 = nest(g.getcells(g.getrect()))
#g.note(str(c) + "\n\n" + str(c2))
#g.note(g.getgen())
for j in c:
if (j[0]+1040, j[1]+1040) not in c2:
#g.note(str((j[0]+8*cyc, j[1]+8*cyc)) + "\n\n" + str(c2))
break
else: #SE's are still active, so this is *almost* certainly a puffer
#Check population growth and keep anything with less debris than a block-laying switch engine
pop = int(g.getpop())
g.run(2880)
#g.note(str(pop) + "\n\n" + g.getpop())
if int(g.getpop()) < pop + 320:
solutions.append(pat)
n += 1
#Inform the user that something is, in fact, still happening
if not n%100:
g.fit()
g.update()
g.show(str(n) + " placements tested, " + str(len(solutions)) + " solutions found (press 'c' to copy results to clipboard or 'q' to quit).")
event = g.getevent()
if event.startswith("key"):
evt, ch, mods = event.split()
if ch == "c":
clear()
for i in xrange(len(solutions)):
g.putcells(solutions[i], 0, i*200)
g.select(g.getrect())
g.copy()
if ch == "q":
raise KeyboardInterrupt() #Technically true
#Ensure that solutions always get printed and (in prior versions of the script) facilitate breaking out of multiple loops
except KeyboardInterrupt:
pass
#Print solutions, obviously
g.new("Solutions")
for i in xrange(len(solutions)):
g.putcells(solutions[i], 0, i*200)
dvgrn wrote:dvgrn wrote:EDIT: Here's a (probably) slightly cheaper predecessor. The smoke seems fairly tenacious, so it might take an automated search to come up with the least expensive synthesis.
Here's the first synthesis I finished -- six gliders for the two switch engines, and seven for the cleanup. It can be improved, um, quite a bit:Code: Select all#C Seeds of Destruction
x = 156, y = 159, rule = LifeHistory
19.A.A$20.2A$20.A28.A$48.A$48.3A2$A$.2A$2A$42.A$42.A.A$42.2A
16$52.2A$52.A.A$52.A18$45.3A$45.A$46.A27$104.A$103.2A$103.A.
A4$115.3A$115.A$116.A5$108.3A$108.A$109.A27$96.2A$96.A.A$96.
A51.3A$148.A$149.A8$131.2A$131.A.A$131.A24$153.2A$153.A.A$
153.A!
x = 175, y = 167, rule = B3/S23
37bo$38b2o134bo$37b2o133b2o$173b2o16$71bobo$72b2o$72bo$165bo$163b2o$
164b2o14$65bo$66b2o$65b2o2$144bobo$144b2o$145bo75$166b3o$166bo$167bo4$
147b2o$147bobo$147bo37$bo$b2o$obo!
AbhpzTa wrote:dvgrn wrote:EDIT: Here's a (probably) slightly cheaper predecessor. The smoke seems fairly tenacious, so it might take an automated search to come up with the least expensive synthesis.
6G 2 switch engines + 3G clean up = 9G:Code: Select allx = 175, y = 167, rule = B3/S23
37bo$38b2o134bo$37b2o133b2o$173b2o16$71bobo$72b2o$72bo$165bo$163b2o$
164b2o14$65bo$66b2o$65b2o2$144bobo$144b2o$145bo75$166b3o$166bo$167bo4$
147b2o$147bobo$147bo37$bo$b2o$obo!
dvgrn wrote:... six gliders for the two switch engines, and seven for the cleanup. It can be improved, um, quite a bit...
x = 118, y = 104, rule = B3/S23
20bo$21b2o$20b2o$48bo$48bobo$48b2o2$obo$b2o$bo40bo$41bo$41b3o16$51b3o$
51bo$52bo17$45b2o$45bobo$45bo10$96bo$95b2o$95bobo11$99b3o$99bo$100bo$
112bo$111b2o$111bobo11$115b3o$115bo$116bo12$89b2o$88b2o$90bo!
Naszvadi wrote:
Awesome! Pattern of the year entry.
Macbi wrote:Are the years UTC, or do we use the timezone of the discoverer?
x = 71, y = 76, rule = LifeHistory
15.A$13.2A.2A$13.2A.2A$13.2A$15.2A.A$16.A2.A$16.A2.A$17.2A
12.2A$31.2A4$15.3A2$15.A.A$16.A22.2A$17.A21.2A$17.2A$14.A.2A
.A$.3A10.4A.2A$A3.A10.5A$A3.A12.2A13.3A$A3.A25.6A$30.3A2.2A$
.2A.2A22.A6.2A$2.A2.A21.2A4.3A$3.A.A21.2A4.A$4.2A26.2A$.A3.A
25.A$A.A.A.A23.2A$.A29.2A$30.A$29.2A$29.2A$26.A$26.A$24.3A$
24.2A$24.A2.A.A$26.3A$6.2A18.A$6.2A$19.5A$21.3A$18.A2.3A$18.
2A2.A$20.3A$21.A6$25.2A$25.A.A$25.A18$69.A$68.2A$68.A.A!
#C [[ AUTOFIT HISTORYFIT ]]
x = 99, y = 94, rule = B3/S23
34b2o$13bo20b2o$13b3o$16bo$15b2o4$42b2o$42b2o5$o$3o$3bo$2b2o20$5b2o$5b
2o12$65bo$64b3o$63b2ob2o$64b3o14bo$65bo14b3o$65bobo11bo3bo$65b4o9b2o2b
3o$68bo10bo3bo$79bo2bo$64b2ob2o11bobo6b2o$63bo5bo19b2o$64bo3bo$65bo2$
80bob2o$79b5o$79b4o$51bo42b2o$51b4o6bo18b3o14bo$51bo3bo5bo18b3o9bo4bo$
81bo4b2o4bo5bo$53b3o29b3o4bo3b2o$84b4o6bob2o$82b2o2b3obo$82b2obo2b2o$
81b2o6bo$82bo2bo$83b3o$77b2o$77b2o$76bo2bo$76bob2o$73b3o$74b2o$56b2o9b
2o2bo$56b2o5b2obo4b2o$67bobob2o$69b2o5$64b2o$64b2o!
#C [[ STEP 9 ]]
x = 151, y = 156, rule = B3/S23
22b2o$21bobo$22bo6$30b2o$29bobo$30bo3$bo$obo$2o$38b2o$37bobo$38bo3$9bo
$8bobo$8b2o$46b2o$45bobo$46bo3$17bo$16bobo$16b2o$54b2o$53bobo$54bo3$
25bo$24bobo$24b2o$62b2o$61bobo$62bo3$33bo$32bobo$32b2o$70b2o$69bobo$
70bo3$41bo$40bobo$40b2o$78b2o$77bobo$78bo3$49bo$48bobo35b2o$48b2o36b2o
6$57bo$56bobo35b2o$56b2o36b2o2$53bo$52bobo$52bobo$50b3ob2o$49bo$50b3ob
2o$52bob2o12$49b2o$49b2o7$57b2o$57b2o12$117bo$116b3o$115b2ob2o$116b3o
14bo$117bo14b3o$117bobo11bo3bo$117b4o9b2o2b3o$120bo10bo3bo$131bo2bo$
116b2ob2o11bobo6b2o$115bo5bo19b2o$116bo3bo$117bo2$132bob2o$131b5o$131b
4o$103bo42b2o$103b4o6bo18b3o14bo$103bo3bo5bo18b3o9bo4bo$133bo4b2o4bo5b
o$105b3o29b3o4bo3b2o$136b4o6bob2o$134b2o2b3obo$134b2obo2b2o$133b2o6bo$
134bo2bo$135b3o$129b2o$129b2o$128bo2bo$128bob2o$125b3o$126b2o$108b2o9b
2o2bo$108b2o5b2obo4b2o$119bobob2o$121b2o5$116b2o$116b2o!
#C [[ STEP 9 STOP 1366 ]]
#C Extrementhusiast's Model D heisenburp, updated for 2-engine Corderships
x = 207, y = 181, rule = LifeHistory
107.2A$107.2A3$105.2A$105.2A$92.2A64.A$93.A64.3AB$93.A.A65.A$94.2A64.
2A$90.2A$90.2A7$103.2A$103.2A29.2A$96.2A36.2A$95.A2.A$96.2A74.2A$123.
A48.2A$122.A.A$122.2A$131.2A$131.A19.2A$132.A17.A.A$131.2A17.A$96.2A
51.2A$96.2A14$164.A.2A$164.2A.A2$162.5A$140.2A20.A4.A2.2A$141.A23.A2.
A2.A$141.A.A21.2A.A.A$142.2A18.A5.A.2A$161.A.A4.A$161.A2.A2.2A$162.2A
$131.2A$132.A$132.A.A$133.2A2$151.2A$151.2A12$142.A$141.A.A$141.A.A$
142.A9$48.A$48.3A$51.A$50.2A$46.2A19.2A$46.2A19.A17.2A$65.A.A17.A$65.
2A19.A$45.A39.2A$44.A.A$45.A$42.3A$42.A2$82.2A$82.2A$97.2A$44.2A50.A
2.A$44.2A51.2A2$28.2A$29.A$29.A.A$.2A27.2A$.2A2$22.2A65.A$22.A64.3A$
20.A.A63.A$20.2A34.2A28.2A$56.2A3.2A$61.2A3$.2A59.2A$.2A53.2A4.A$56.
2A5.3A10.2A$65.A9.A.A5.2A$31.2A42.A7.2A$31.2A11.2A28.2A$44.A$45.3A40.
A$2.2A43.A36.2A.A.A$.A.A79.A.A.A.A$.A9.2A.A65.A2.A.A.A.A.2A$2A9.2A.3A
63.4A.2A2.A2.A$17.A66.A4.2A$11.2A.3A65.A.A$10.A2.2A67.2A$10.2A3$180.A
.A$179.A2.A$180.A.A$196.2A$196.A.A$182.A13.3A$181.A.2A11.A2.A$181.A.
2A12.A$167.3A10.A3.A12.A7.2A$168.A12.4A20.2A$168.A2.A9.3A15.A$168.A2.
A24.A$169.A.A24.A2.A$184.2A9.3A$184.2A9.3A$195.A2.A$196.A.A$168.A27.
3A$167.A.A$168.A$185.A$185.A$166.4A$166.2A3.A13.A$167.A4.A11.A.A$169.
A.2A11.A$170.A15.2A$187.A$184.3A$185.2A$182.A$182.2A$182.2A$172.2A6.
2A$172.2A4.2A$178.2A.A$180.2A5$180.2A$180.2A!
#C [[ STEP 9 AUTOSTART STOP 2300 X -11 Y -26 ]]
x = 38, y = 30, rule = B3/S23
3bob2obo$2bobo$2bob5o$2bob2obo24b3o$4b4o25bo2bo$5b4o28bo$4b3o27bobo8$
4bo$6bo$3bo$2b2ob2o$4bo2$3b2o$2bo$2bo2bo$2obo$2bo2b3o$2o$6b2o$3b2ob2o$
4bobo$5bo!
x = 17, y = 10, rule = B3/S23
b2ob2obo5b2o$11b4obo$2bob3o2bo2b3o$bo3b2o4b2o$o2bo2bob2o3b4o$bob2obo5b
o2b2o$2b2o4bobo2b3o$bo3b5ob2obobo$2bo5bob2o$4bob2o2bobobo!
Saka wrote:The script gave a false positive (?)Code: Select allx = 38, y = 30, rule = B3/S23
3bob2obo$2bobo$2bob5o$2bob2obo24b3o$4b4o25bo2bo$5b4o28bo$4b3o27bobo8$
4bo$6bo$3bo$2b2ob2o$4bo2$3b2o$2bo$2bo2bo$2obo$2bo2b3o$2o$6b2o$3b2ob2o$
4bobo$5bo!
x = 17, y = 10, rule = B3/S23
b2ob2obo5b2o$11b4obo$2bob3o2bo2b3o$bo3b2o4b2o$o2bo2bob2o3b4o$bob2obo5b
o2b2o$2b2o4bobo2b3o$bo3b5ob2obobo$2bo5bob2o$4bob2o2bobobo!
Saka wrote:Also, could someone post the part of the script that detects if it is a solution?
if int(g.getpop()) < pop + 320: