def setNumInfo(char): comb = [] for i in range(1,7): comb += [ [str(i)] + li for li in sabr.combMany([(char,i),('!'+char,12-i)]) ] for elem in comb: sabrObj.addOpt('SetSame'+char,'Weigh',elem) sabrObj.addSpace()
def setNumInfo(char): comb = [] for i in range(1, 7): comb += [[str(i)] + li for li in sabr.combMany([(char, i), ('!' + char, 12 - i)]) ] for elem in comb: sabrObj.addOpt('SetSame' + char, 'Weigh', elem) sabrObj.addSpace()
def createPuz(numSide,oldColors,declareEnds=[],Xs=[],restrict=False): sabrObj = sabr.SabrObj() colors = oldColors[:] colors.append('X') sabrObj.setSym(colors) overallBoard = [] for sideName in ['z', 'x', 'y' ]: for y in range(0,numSide): tempSide = [] for x in range(0,numSide): name = sideName + str(y) + str(x) tempSide.append(name) overallBoard.append(tempSide) for sideName in ['z', 'x', 'y' ]: for y in range(0,numSide): tempSide = [] for x in range(0,numSide): name = 'e' + sideName + str(y) + str(x) tempSide.append(name) overallBoard.append(tempSide) sabrObj.setBoard(overallBoard) # req board reqBoard = [] for sideName in ['z', 'x', 'y' ]: for y in range(0,numSide): tempSide = [] for x in range(0,numSide): name = sideName + str(y) + str(x) toAdd = '!X' if name in Xs: toAdd = 'X' tempSide.append(toAdd) reqBoard.append(tempSide) for sideName in ['z', 'x', 'y' ]: for y in range(0,numSide): tempSide = [] for x in range(0,numSide): name = sideName + str(y) + str(x) toAdd = '?' if name in Xs: toAdd = 'X' for (col,arr) in declareEnds: if name in arr: toAdd = col tempSide.append(toAdd) reqBoard.append(tempSide) sabrObj.addReq(None,'Board',reqBoard) # to force exactly two of each end, does not prevent cycles if restrict: for col in oldColors: li = sabr.combMany([(col,2),('!'+col,3*numSide*numSide-2)]) for arr in li: sabrObj.addOpt('end-'+col,'end',arr) desEnd = [] for sideName in ['z', 'x', 'y' ]: for y in range(0,numSide): for x in range(0,numSide): name = 'e' + sideName + str(y) + str(x) desEnd.append(name) sabrObj.addDesObj(None,'end',desEnd) # opt groups optGroups = [ ('link2',[ 'X', 'v', 'v', 'v', ]), ('link3',[ 'X', 'v', '!v', 'v', 'v', ]), ('link3',[ 'X', 'v', 'v', '!v', 'v', ]), ('link3',[ 'X', 'v', 'v', 'v', '!v', ]), ('link4',[ 'X', 'v', 'v', 'v', '!v', '!v', ]), ('link4',[ 'X', 'v', 'v', '!v', 'v', '!v', ]), ('link4',[ 'X', 'v', 'v', '!v', '!v', 'v', ]), ('link4',[ 'X', 'v', '!v', 'v', 'v', '!v', ]), ('link4',[ 'X', 'v', '!v', 'v', '!v', 'v', ]), ('link4',[ 'X', 'v', '!v', '!v', 'v', 'v', ]), ('link2',[ 'v', 'v', 'v', '!v', ]), ('link2',[ 'v', 'v', '!v', 'v', ]), ('link3',[ 'v', 'v', 'v', '!v', '!v', ]), ('link3',[ 'v', 'v', '!v', 'v', '!v', ]), ('link3',[ 'v', 'v', '!v', '!v', 'v', ]), ('link4',[ 'v', 'v', 'v', '!v', '!v', '!v', ]), ('link4',[ 'v', 'v', '!v', 'v', '!v', '!v', ]), ('link4',[ 'v', 'v', '!v', '!v', 'v', '!v', ]), ('link4',[ 'v', 'v', '!v', '!v', '!v', 'v', ]), ('link2',[ 'X', 'X', '?', '?', ]), ('link3',[ 'X', 'X', '?', '?', '?', ]), ('link4',[ 'X', 'X', '?', '?', '?', '?', ]), ] sabrObj.addSpace() # opt for (obj,arr) in optGroups: sabrObj.addOpt(None,obj,arr) sabrObj.addSpace() vectorDict = {} # vectors in squares for sideName in ['z', 'x', 'y' ]: for y in range(0,numSide): for x in range(0,numSide): name = sideName + str(y) + str(x) vectorDict[name] = [] # left if x > 0: vectorDict[name].append(sideName + str(y) + str(x-1)) # right if x < numSide-1: vectorDict[name].append(sideName + str(y) + str(x+1)) # up if y > 0: vectorDict[name].append(sideName + str(y-1) + str(x)) # down if y < numSide-1: vectorDict[name].append(sideName + str(y+1) + str(x)) # vectors z-x for i in range(0,numSide): n1 = 'z' + str(numSide-1) + str(i) n2 = 'x0' + str(i) vectorDict[n1].append(n2) vectorDict[n2].append(n1) # vectors z-y for i in range(0,numSide): n1 = 'z' + str(numSide-1-i) + str(numSide-1) n2 = 'y0' + str(i) vectorDict[n1].append(n2) vectorDict[n2].append(n1) # vectors x-y for i in range(0,numSide): n1 = 'x' + str(i) + str(numSide-1) n2 = 'y' + str(i) + '0' vectorDict[n1].append(n2) vectorDict[n2].append(n1) toSort = vectorDict.keys() toSort.sort() for key in toSort: val = vectorDict[key] obj = 'link' obj = obj + str(len(val)) sabrObj.addDesObj(None,obj,['e'+key] + [key] + val) sabrObj.source('source.tb') return sabrObj