I wrote a script to output a single channel recipe given a *WSS salvo in dvgrn's suggested notation. Some of the code is borrowed from
. The MWSSb recipe is quite expensive because I couldn't find any recipes in
, so I had to make a larger recipe out of an elbow duplicator and an elbow-destroying MWSS recipe from
Code: Select all
#single-channel-for-xwss-salvo.py
import golly as g
gliders=["3o$o$bo!","b2o$2o$2bo!","b2o$bobo$bo!","2bo$b2o$bobo!"]
gliderlist=[g.parse(gl) for gl in gliders]
elbow=g.parse("2C$2C!")
slow_salvo = g.getstring("Please enter the *WSS salvo.","LaO20 MbO10 MaO-10 HaE-20").split(" ")
def makerecipe(recipe):
g.putcells(gliderlist[0])
totaltime=0
for i in recipe[1:]:
totaltime+=i
g.putcells(g.transform(gliderlist[totaltime%4],totaltime//4,totaltime//4))
g.show(str(totaltime))
block_moves = [[109, 91, 94, 91, 91, 92, 90, 97, 91, 90, 91, 90, 161, 91, 91, 91, 91, 91, 103, 130], # 0move22
[109, 91, 93, 91, 92, 90, 128, 90, 91, 138, 99, 118, 91, 90, 91, 91, 169, 90, 91, 95, 91, 131, 90], # 7move21
[109, 91, 93, 91, 145, 215, 106, 90, 90, 91, 91, 174, 90, 158, 90, 90, 90, 91, 137, 90, 91, 127, 90], # 0move20
[109, 91, 94, 91, 91, 92, 90, 113, 90, 91, 101, 90, 91, 93, 90, 90, 90, 106, 90, 91, 91, 91, 90, 109, 90, 90, 90, 90], # 7move19
[109, 91, 93, 91, 113, 91, 132, 91, 91, 133, 91, 90, 98, 91, 90, 131, 90, 112, 132, 90, 90], # 0move18
[109, 90, 93, 91, 91, 90, 90, 100, 90, 90, 174, 90, 90, 90, 90, 105, 90, 130, 90, 90], # 7move17
[109, 91, 94, 91, 91, 96, 90, 97, 91, 91, 130, 94, 90, 105, 90, 95, 143, 99], # 0move16
[109, 91, 93, 91, 97, 91, 90, 90, 94, 91, 118, 90, 91, 99, 213, 102, 90, 90, 90, 90], # 7move15
[109, 91, 93, 90, 140, 150, 113, 90, 90, 90, 90, 91, 136, 119, 127, 90, 154, 142, 132, 91, 91, 90], # 0move14
[109, 91, 93, 91, 92, 90, 97, 91, 116, 91, 93, 115, 90, 91, 130, 90], # 7move13
[109, 91, 93, 91, 92, 90, 97, 91, 116, 91, 93, 115, 90, 91, 127, 90, 124, 112, 90], # 0move12
[109, 91, 93, 91, 117, 90, 91, 90, 163, 91, 163, 91, 90, 149, 109, 109, 162, 91, 162, 91, 90, 90], # 7move11
[109, 91, 93, 91, 129, 149, 91, 90, 90, 105, 90, 90, 90, 90, 114, 91, 100, 90, 90], # 0move10
[109, 90, 93, 91, 91, 90, 90, 95, 90, 91, 90, 90, 140, 90, 90, 128, 93], # 7move9
[109, 91, 94, 91, 91, 92, 90, 119, 90, 90], # 0move8
[109, 91, 94, 91, 90, 96, 90, 91, 146, 240, 109, 91, 94, 91, 91, 92, 90, 119, 90, 90], # 7move7
[109, 91, 93, 91, 145, 215, 104, 90, 90, 90, 90, 90, 102, 92, 90, 90, 90, 106, 155, 150, 90], # 0move6
[109, 91, 93, 91, 92, 90, 110, 90, 152, 90, 90, 91, 91, 91, 90, 90, 90, 90, 175, 119, 115, 193], # 7move5
[109, 91, 93, 91, 92, 90, 90, 90, 151, 93, 90, 143, 134, 94, 90, 90, 90, 109, 91, 90], # 0move4
[109, 91, 94, 91, 91, 92, 90, 143, 90, 90, 90, 129, 101, 102, 90], # 7move3
[109, 90, 93, 91, 91, 90, 90, 91, 91, 90, 90, 91, 90, 90, 94, 90, 90], # 0move2
[109, 91, 94, 91, 91, 92, 90, 143, 90, 91, 156, 90, 104, 164], # 7move1
[], # 0move0
[109, 91, 94, 91, 90, 96, 90, 91, 146, 240], # 7move-1
[109, 91, 94, 91, 91, 136, 90, 90, 91, 171, 100, 118, 90, 90], # 0move-2
[109, 91, 94, 91, 90, 96, 90, 91, 92, 90, 217, 90, 103, 90], # 7move-3
[109, 90, 93, 91, 91, 90, 90, 92, 90, 95, 91, 170, 90, 90, 91, 91, 98, 91, 91, 90], # 0move-4
[109, 91, 94, 91, 91, 92, 90, 173, 100, 90, 141, 91, 90, 90, 90, 147, 90, 117, 192], # 7move-5
[109, 91, 93, 91, 156, 91, 91, 94, 90, 91, 140, 91, 103, 91, 91, 132, 90], # 0move-6
[109, 91, 93, 91, 118, 90, 91, 91, 91, 90, 90, 156, 114, 90, 90, 90, 90, 141, 90], # 7move-7
[109, 90, 93, 91, 90, 95, 91, 90, 91, 91, 90, 90, 91, 90, 90, 99, 90, 90, 91, 90, 94, 90, 90], # 0move-8
[109, 91, 94, 91, 91, 179, 90, 91, 94, 91, 102, 91, 105, 91, 108, 90, 91, 91, 120, 90, 90], # 7move-9
[109, 91, 94, 91, 91, 96, 90, 97, 91, 91, 130, 94, 90, 105, 90, 95, 111, 90], # 0move-10
[109, 91, 93, 91, 92, 90, 90, 90, 151, 93, 90, 137, 113, 112, 90, 121, 90], # 7move-11
[109, 91, 93, 91, 137, 91, 91, 125, 172, 108, 90, 109, 91, 101, 120, 90, 90], # 0move-12
[109, 91, 94, 91, 91, 114, 94, 90, 106, 90, 91, 107, 233, 118, 90, 90, 90], # 7move-13
[109, 91, 93, 91, 155, 106, 91, 91, 145, 90, 90, 91, 91, 90, 91, 90, 90, 118, 90], # 0move-14
[109, 91, 94, 91, 90, 152, 91, 90, 91, 145, 90, 90, 139, 91, 90, 92, 90], # 7move-15
[109, 90, 93, 91, 91, 128, 91, 91, 90, 100, 90, 90, 176, 94, 153, 90, 145, 115], # 0move-16
[109, 91, 93, 90, 97, 91, 91, 93, 91, 90, 90, 91, 123, 114, 92, 90, 90, 154, 90, 117, 126, 141, 90, 92, 106, 90], # 7move-17
[109, 91, 94, 91, 91, 136, 91, 90, 91, 120, 90, 144, 90, 90, 90, 90, 102, 90, 90], # 0move-18
[109, 91, 93, 90, 171, 90, 90, 91, 154, 110, 169, 107, 91, 90, 99, 91, 122, 90, 90, 159, 90, 90], # 7move-19
[109, 91, 94, 91, 91, 93, 90, 103, 120, 105, 101, 91, 106, 90, 90, 125, 90, 107, 91, 101, 90, 130, 91, 90, 90], # 0move-20
[109, 91, 93, 91, 132, 115, 102, 90, 91, 91, 91, 90, 90, 154, 98], # 7move-21
[109, 91, 93, 90, 118, 91, 90, 90, 91, 120, 132, 90, 101, 91, 125, 179, 91, 116, 108, 128, 90], # 0move-22
[109, 91, 94, 91, 91, 92, 90, 173, 100, 90, 141, 91, 90, 90, 90, 145, 98, 107, 90], # 7move-23
[109, 91, 93, 90, 129, 149, 91, 90, 90, 108, 91, 90, 113, 97, 167, 90, 91, 105, 94, 90], # 0move-24
[109, 91, 93, 91, 129, 148, 91, 93, 154, 91, 91, 91, 90, 90, 90, 90, 143, 91, 90, 90, 107, 90], # 7move-25
[109, 91, 93, 90, 156, 90, 90, 95, 138, 91, 90, 96, 122, 91, 90, 95, 91, 90, 90, 91, 110, 130, 90, 131, 128], # 0move-26
[109, 91, 93, 91, 145, 215, 97, 91, 91, 90, 91, 158, 95, 90, 112, 90, 91, 97, 90, 100, 91, 90, 91, 107, 90], # 7move-27
[109, 91, 93, 90, 118, 91, 90, 90, 90, 97, 91, 90, 90, 129, 90, 164, 91, 94, 91, 91, 90, 96, 91, 111, 172], # 0move-28
[109, 91, 94, 91, 91, 92, 90, 169, 91, 90, 116, 90, 113, 90], # 7move-29
[109, 91, 94, 91, 91, 92, 90, 119, 90, 90, 109, 90, 93, 91, 90, 100, 131, 101, 90, 113, 95], # 0move-30
[109, 91, 93, 90, 140, 150, 113, 90, 90, 90, 90, 91, 136, 119, 127, 90, 103, 91, 99, 116], # 7move-31
[109, 91, 93, 91, 155, 106, 91, 90, 139, 91, 104, 91, 90, 93, 104, 91, 91, 143, 91, 110, 153, 162, 90, 91, 93, 163]] # 0move-32
big_block_push = [109, 90, 93, 91, 90, 95, 91, 91, 138, 157, 96, 90, 120, 91, 97, 107, 90, 90, 93, 188] # 0move44
lwss0_recipe = [93, 91, 116, 91, 131, 91, 95, 189, 160, 159, 119, 90, 111, 184, 91, 117, 90, 90, 90, 90, 91, 146, 90]
lwss1_recipe = [109, 91, 95, 125, 112, 90, 145, 91, 90, 157, 91, 91, 126, 113, 90, 96, 90, 97, 90, 111, 90, 115, 98, 91, 90, 90, 90, 99, 90, 90, 90]
mwss0_recipe = [109, 91, 93, 91, 129, 149, 91, 90, 90, 113, 90, 91, 94, 131, 125, 91, 111, 90, 115, 91, 91, 91, 90, 133, 90, 124, 90]
mwss1_recipe = [109, 90, 93, 91, 91, 90, 90, 100, 90, 90, 146, 92, 90, 90, 90, 92, 156, 144, 91, 109, 90, 93, 91, 91, 148, 91, 90, 108, 91, 91, 90, 91, 90, 105, 169, 91, 136, 103, 90, 91, 90]
hwss0_recipe = [109, 91, 93, 90, 129, 149, 91, 90, 90, 140, 91, 91, 90, 90, 91, 118, 91, 121, 138, 91, 91, 113, 90, 90, 91, 115, 91, 104, 91, 90, 90, 90]
hwss1_recipe = [109, 91, 94, 91, 91, 124, 90, 106, 105, 91, 90, 169, 91, 90, 116, 91, 118, 91, 167, 90, 123, 90, 90, 141, 132, 116, 90]
xwss_names = ["La","Lb","Ma","Mb","Ha","Hb"]
xwss_recipes = [lwss0_recipe,lwss1_recipe,mwss0_recipe,mwss1_recipe,hwss0_recipe,hwss1_recipe]
xwss_output = [-12,-31,31,0,-34,-51] #lane where the xwss is emitted
xwss_block_shifts = [-36,0,8,19,-21,-33]
def arbitrary_block_move(n):
r = []
if n <= 22 and n >= -32:
r = block_moves[22-n]
elif n > 22 and n < 44:
r += block_moves[0]
r += block_moves[44-n]
elif n > 44:
for i in range(n//44): r += big_block_push
if n%44 <= 22:
r += block_moves[22-n%44]
else:
r += block_moves[0]
r += block_moves[44-n%44]
elif n < -32:
for i in range(-n//32): r += block_moves[-1]
r += block_moves[22+(-n)%32]
return r
recipe = [0]
block_pos = 0
timings = ["E","O"]
for x in slow_salvo:
if x[2] not in timings or x[:2] not in xwss_names:
g.exit("Please enter a xwss salvo in the correct notation")
xwss_num = xwss_names.index(x[:2])
lane = int(x[3:])
required_move = 2*lane-xwss_output[xwss_num]-block_pos
recipe += arbitrary_block_move(required_move)
block_pos += (required_move+xwss_block_shifts[xwss_num])
if sum(recipe)%2 != timings.index(x[2]):
recipe[-1] += 1
timing = x[2]
recipe += xwss_recipes[xwss_num]
recipe = recipe [:-1]
g.setclipstr(str(recipe))
g.addlayer()
g.setrule("LifeHistory")
g.putcells(g.transform(elbow,-5,-2))
g.setstep(2)
g.fit()
g.setmag(1)
makerecipe(recipe)
I also made a script that returns the *WSS salvo notation from a north-facing *WSS slow salvo. It can definitely be improved:
Using these scripts, I made a single-channel recipe for the 135-degree MWSS-to-G with a suitably placed SPEBOE: