for subExp in subExpressions: # Evaluating sub expression result = evaluateSubExpression(subExp.replace('(', '').replace(')', ''), precedenceOperator) # Substituing result in expression expression = expression.replace(subExp, str(result), 1) # Evaluating remaining expression from left to right return evaluateSubExpression(expression, precedenceOperator) # endregion COMMON ########################### ########################### # FETCH DATA ########################### expressions = utils.readFileLines(filename) ######## # PART 1 ######## results = [evaluateExpression(e, precedenceOperator=None) for e in expressions] print('1) Sum of each result values with both SUM and PRODUCT having same precedence = %d' % sum(results)) ######## # PART 2 ######## results2 = [evaluateExpression(e, precedenceOperator=OPERATOR.SUM) for e in expressions] print('2) Sum of each result values with SUM having precedence over PRODUCT = %d' % sum(results2))
def getRow(code): return getPosition(code[0:7], FRONT, BACK) def getColumn(code): return getPosition(code[7:10], LEFT, RIGHT) # endregion COMMON ########################### ########################### # FETCH DATA ########################### lines = utils.readFileLines(filename) ######## # PART 1 ######## seatPositions = [(getRow(code), getColumn(code)) for code in lines] seatPositions.sort() print( '\n'.join([ f'Seat ({row}, {col}): {GET_SEAT_ID(row, col)}' for (row, col) in seatPositions ]), '\n') highestSeatId = GET_SEAT_ID(seatPositions[-1][0], seatPositions[-1][1]) print('1) Highest seat ID: %d' % highestSeatId)
if len(unknownAllergens) == 1: allergen = unknownAllergens[0] allergenIngredients[allergen] = ingredient return OrderedDict( sorted(allergenIngredients.items(), key=lambda item: item[0])) # Sorted by allergen # endregion COMMON ########################### ########################### # FETCH DATA ########################### foodList = utils.readFileLines(filename) (foodItems, ingredients, allergens) = readFoodList(foodList) print('Number of listed food items: %d' % len(foodItems)) print('Number of unique ingredients: %d' % len(ingredients)) print('Number of unique listed allergens: %d\n' % len(allergens)) ######## # PART 1 ######## (nonAllergenIngredients, ingredientPossibleAllergens) = findNonAllergenIngredients( foodItems, ingredients, allergens) nbAllergenIngredients = (len(ingredients) - len(nonAllergenIngredients)) total = len([