Example #1
0
	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()
Example #2
0
    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()
Example #3
0
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