#!/usr/bin/env python import numpy as np properties = np.array([[3, 0, 0, -3, 2], [-3, 3, 0, 0, 9], [-1, 0, 4, 0, 1], [0, 0, -2, 2, 8]]) def get_scores(count_calories=False): max_score = 0 for sugar in range(100): for sprinkles in range(100-sugar): for candy in range(100-sugar-sprinkles): chocolate = 100-sugar-sprinkles-candy counts = np.array([sugar, sprinkles, candy, chocolate]) scores = properties.T @ counts if count_calories and scores[-1] != 500: continue if np.any(scores[:-1] <= 0): continue else: score = np.prod(scores[:-1]) max_score = max(max_score, score) return max_score # part 1 print(get_scores()) # part 2 print(get_scores(True))