class ClocktailGenerator:
	def __init__(self, spirits, repSpirits, mixers, repMixers, names):
		self.__namesCombinations = Combinator([WordSet(names[0],1), WordSet(names[1], 1)])
		self.__drinksCombinations = Combinator([WordSet(spirits, repSpirits), WordSet(mixers, repMixers)])

	def removeAlreadyGenerated(self, history):
		doneNames = history.getGeneratedNames()
		self.__namesCombinations.remove(doneNames)
		doneDrinks = history.getGeneratedIngredients()
		self.__drinksCombinations.remove(doneDrinks)
	
	def getNextClocktail(self):
		nameGen = self.__namesCombinations.iterateRandomly()	
		ctGen = self.__drinksCombinations.iterateRandomly()
		finished = False
		while not finished:
			try:
				nextName = nameGen.next()
				nextCt = ctGen.next()
			except:
				finished = True 
			if not finished:
				yield Clocktail(nextName, nextCt)

	def numDrinksLeft(self):
		return self.__drinksCombinations.numLeft()

	def numNamesLeft(self):
		return self.__namesCombinations.numLeft()
Example #2
0
def process_case(all_candies):
    result = -1
    max_k = len(all_candies) / 2

    for i in xrange(max_k):
        k = i + 1
        lists = []
        for i in xrange(k):
            lists.append(all_candies)
        c = Combinator(lists)
        for left_pile in c.get_all_combinations():

            right_pile = all_candies[:]
            [right_pile.remove(candy) for candy in left_pile]
            # print left_pile, patrick_sum(left_pile), right_pile, patrick_sum(right_pile)
            if patrick_sum(left_pile) == patrick_sum(right_pile):
                result = max(result, normal_sum(left_pile), normal_sum(right_pile))

    return result
	def __init__(self, spirits, repSpirits, mixers, repMixers, names):
		self.__namesCombinations = Combinator([WordSet(names[0],1), WordSet(names[1], 1)])
		self.__drinksCombinations = Combinator([WordSet(spirits, repSpirits), WordSet(mixers, repMixers)])