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()
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)])