def dice_outcomes(num_dice, num_sides): result = {} for bottom in range(1, num_sides + 1): for dice_sum in range(1 * num_dice, num_sides * num_dice + 1): for outcome in ascending(num_dice, dice_sum, bottom, num_sides): curr_sum = sum(outcome) # if curr_sum is not in result, sets to total_perms(outcome) # (default 0 returned by get) result[curr_sum] = (result.get(curr_sum, 0) + total_perms(outcome)) return result
def main(verbose=False): MATCHES = [] for bottom in range(1, 12 + 1): MATCHES.extend(ascending(10, 70, bottom, 12)) add_ons = {} for biggest in range(1, 8): add_ons[biggest] = generate_addons(10, 1, biggest) count = 0 for match in MATCHES: bottom = match[0] for addon in add_ons[bottom]: curr = addon + match count += total_perms(curr) return count