f = open(filename, 'w') f.write(gen) f.close() except: g.warn("Unable to save given gen in file:\n" + filename) # -------------------------------------------------------------------- # use same file name as in goto.lua GotoINIFileName = g.getdir("data") + "goto.ini" previousgen = "" try: f = open(GotoINIFileName, 'r') previousgen = f.readline() f.close() if not validint(previousgen): previousgen = "" except: # should only happen 1st time (GotoINIFileName doesn't exist) pass gen = g.getstring("Enter the desired generation number,\n" + "or -n/+n to go back/forwards by n:", previousgen, "Go to generation") if len(gen) == 0: g.exit() elif gen == "+" or gen == "-": # clear the default savegen(GotoINIFileName, "") elif not validint(gen): g.exit('Sorry, but "' + gen + '" is not a valid integer.')
from string import lower import golly as g selrect = g.getselrect() if len(selrect) == 0: g.exit("There is no selection.") answer = g.getstring("Enter x y shift amounts and an optional mode\n" + "(valid modes are copy/or/xor, default is or):", "0 0 or", "Shift selection") xym = answer.split() # extract x and y amounts if len(xym) == 0: g.exit() if len(xym) == 1: g.exit("Supply x and y amounts separated by a space.") if not validint(xym[0]): g.exit("Bad x value: " + xym[0]) if not validint(xym[1]): g.exit("Bad y value: " + xym[1]) x = int(xym[0]) y = int(xym[1]) # extract optional mode if len(xym) > 2: mode = lower(xym[2]) if mode=="c": mode="copy" if mode=="o": mode="or" if mode=="x": mode="xor" if not (mode == "copy" or mode == "or" or mode == "xor"): g.exit("Unknown mode: " + xym[2] + " (must be copy/or/xor)") else: mode = "or"
f.write(gen) f.close() except: g.warn("Unable to save given gen in file:\n" + filename) # -------------------------------------------------------------------- # use same file name as in goto.pl GotoINIFileName = g.getdir("data") + "goto.ini" previousgen = "" try: f = open(GotoINIFileName, 'r') previousgen = f.readline() f.close() if not validint(previousgen): previousgen = "" except: # should only happen 1st time (GotoINIFileName doesn't exist) pass gen = g.getstring( "Enter the desired generation number,\n" + "or -n/+n to go back/forwards by n:", previousgen, "Go to generation") if len(gen) == 0: g.exit() elif gen == "+" or gen == "-": # clear the default savegen(GotoINIFileName, "") elif not validint(gen): g.exit('Sorry, but "' + gen + '" is not a valid integer.')
# save given values for next time this script is called try: f = open(inifilename, "w") f.write(result) f.close() except: g.warn("Unable to save given values in file:\n" + inifilename) # extract and validate values pmm = result.split() if len(pmm) == 0: g.exit() if len(pmm) == 1: g.exit("You must supply min and max states.") if not validint(pmm[0]): g.exit("Bad percentage value: " + pmm[0]) if not validint(pmm[1]): g.exit("Bad minstate value: " + pmm[1]) perc = int(pmm[0]) minlive = int(pmm[1]) if perc < 0 or perc > 100: g.exit("Percentage must be from 0 to 100.") if minlive < 1 or minlive > maxlive: g.exit("Minimum state must be from 1 to " + str(maxlive) + ".") if len(pmm) > 2: if not validint(pmm[2]): g.exit("Bad maxstate value: " + pmm[2]) i = int(pmm[2]) if i < minlive: g.exit("Maximum state must be >= minimum state.")
oldparams = f.readline() f.close() except: # should only happen 1st time (INIFileName doesn't exist) pass answer = g.getstring( "Enter x y shift amounts and an optional mode\n" + "(valid modes are copy/or/xor, default is or):", oldparams, "Shift selection") xym = answer.split() # extract x and y amounts if len(xym) == 0: g.exit() if len(xym) == 1: g.exit("Supply x and y amounts separated by a space.") if not validint(xym[0]): g.exit("Bad x value: " + xym[0]) if not validint(xym[1]): g.exit("Bad y value: " + xym[1]) x = int(xym[0]) y = int(xym[1]) # extract optional mode if len(xym) > 2: mode = lower(xym[2]) if mode == "c": mode = "copy" if mode == "o": mode = "or" if mode == "x": mode = "xor" if not (mode == "copy" or mode == "or" or mode == "xor"): g.exit("Unknown mode: " + xym[2] + " (must be copy/or/xor)") else: mode = "or"
def getrow(x, y, width): s = "" for i in range(width): if g.getcell(x + i, y): s += "o" else: s += "." return s firstrow = rect(g.getselrect()) if len(firstrow) == 0: g.exit("There is no selection.") if firstrow.height != 1: g.exit("Incorrect selection dimensions (height must be 1)") width = firstrow.width period = g.getstring("Enter the period.") if not validint(period): g.exit("Period should be a positive integer.") period = int(period) if period <= 0: g.exit("Period should be a positive integer.") offset = g.getstring("Enter the offset (translation).") if not validint(offset): g.exit("Offset should be a positive integer.") offset = int(offset) if offset <= 0: g.exit("Offset should be a positive integer.") if period <= offset: g.exit("Period must be greater than offset.") backOff = [-1 for i in range(period)] i = 0 while True: j = offset while ((backOff[(i + j) % period] >= 0) and (j < period)):
from glife import validint # Python versions < 2.4 don't have "set" built-in try: set except NameError: from sets import Set as set def chunks(l,w): for i in xrange(0, len(l), 2): yield l[i]+(w*l[i+1]) if g.empty(): g.exit("The pattern is empty.") s = g.getstring("Enter the period:","", "Heat calculator") if not validint(s): g.exit('Bad number: %s' % s) numsteps = int(s) if numsteps < 2: g.exit('Period must be at least 2.') g.show('Processing...') heat = 0; maxheat = 0; minheat = 9*g.getpop(); for i in range(0, numsteps): bb = g.getrect() clist = list(chunks(g.getcells(bb), bb[2]+2)) g.run(1)
deletefrom = [] context = i if len(deletefrom) == 0: rule += i elif i in deletefrom: deletefrom.remove(i) rule = rule.strip('9') if not (rule[0] == 'B' and '/S' in rule): g.exit('Please set Golly to a Life-like rule.') if g.empty(): g.exit('The pattern is empty.') s = g.getstring('Enter the period:', '', 'Rules calculator') if not validint(s): g.exit('Bad number: %s' % s) numsteps = int(s) if numsteps < 1: g.exit('Period must be at least 1.') g.select(g.getrect()) g.copy() s = int(s) for i in range(0,s): g.run(1) clist.append(list(chunks(g.getcells(g.getrect()), 2))) mcc = min(clist[i]) clist[i] = [[x[0] - mcc[0], x[1] - mcc[1]] for x in clist[i]]