#!/usr/bin/python3 import itertools import pprint import numpy file = open("../input.txt", "r") story_table = [] stories_table = [] nb_machines = 0 loop_number = 0 for line in file: line_table = list(map(int, line.split())) keys_line_table_story = ['machines', 'money', 'time'] keys_line_table_machines = ['day_sell', 'buy_price', 'resale_price', 'day_profit'] l = list() for a in range(0, len(line_table)): l.append((line_table[a])) if len(line_table) == 3: line_table = dict(zip(keys_line_table_story,l)) else: line_table = dict(zip(keys_line_table_machines,l)) if len(line_table) == 3: nb_machines = line_table["machines"] if loop_number > 0: stories_table.append(story_table) story_table = [] story_table.append(line_table) loop_number += 1 case = 1 for story in stories_table: settings = story[0] list_machine_number = [] for machine_number in range(1, settings['machines']+1): list_machine_number.append(machine_number) list_all_combinations = [] for machine_number in range(1, settings['machines']+1): list_all_combinations.append([list(x) for x in itertools.combinations(list_machine_number, machine_number)]) for combination_number in range(0, len(list_all_combinations)): list_all_combinations[combination_number].append([]) # Transform the two dimensionnal array in list_machine_number in one # dimensional array list_all_combinations = [x for sublist in list_all_combinations for x in sublist] bigger_money = 0; for combination in list_all_combinations: current_money = settings["money"] machine_to_sell = [] machines_bought = [] for n in combination: machine_to_sell.append(story[n]) for day in range(0, settings["time"]+1): for machines in machines_bought: current_money += machines["day_profit"] buyable_machines = [] for machine_number in range(0, len(machine_to_sell)): if day == machine_to_sell[machine_number]["day_sell"]: buyable_machines.append(machine_to_sell[machine_number]) for machines in buyable_machines: if machines["buy_price"] <= current_money: machines_bought.append(machines) current_money -= machines["buy_price"] if current_money > bigger_money: bigger_money = current_money if len(list_all_combinations ) == 0: bigger_money = settings['money'] print("Case "+ str(case) + ": " + str(bigger_money)) case += 1