# km # modify program 3 so as to evaluate the cost of a solution # according to the number of units of the values. Calculate the best # solution according to this cost by displaying successive values that # improve. Display the trace of this execution in a file # CORRECT_SolutionsWhichImproveIncrementally.txt # Calculate the number of solutions displayed, and the display economy, # using the wc –l command. Calculate with the time, or date command, # the execution time programs 3 and 5 # wc -l command ? import math import time def make_change_recursive_prg3(coins, amount, start, current_change, result): if amount == 0: result.append(current_change[:]) return for i in range(start, len(coins)): coin_cents = round(coins[i] * 100) if amount >= coin_cents: current_change.append(coins[i]) make_change_recursive_prg3(coins, amount - coin_cents, i, current_change, result) current_change.pop() return result def calculate_solution_cost(solution): # Calculate the cost of a solution as the sum of units of values cost = sum([round(coin * 100) for coin in solution]) return cost def make_change_recursive(coins, amount, start, current_change, result, best_cost): if amount == 0: current_cost = calculate_solution_cost(current_change) if current_cost < best_cost[0]: result.append(current_change[:]) best_cost[0] = current_cost return for i in range(start, len(coins)): coin_cents = round(coins[i] * 100) if amount >= coin_cents: current_change.append(coins[i]) make_change_recursive(coins, amount - coin_cents, i, current_change, result, best_cost) current_change.pop() def main(): coins = [5, 2, 0.2, 0.1, 0.05] # Available coin values target_amount = 12.35 # Change to be made solutions = [] # Store all valid combinations best_cost = [float('inf')] # Initialize with a very high cost start_time_prg3 = time.perf_counter() solutions = make_change_recursive_prg3(coins, target_amount * 100, 0, [], []) end_time_prg3 = time.perf_counter() duration_prg3 = end_time_prg3 - start_time_prg3 solutions = [] start_time = time.perf_counter() make_change_recursive(coins, target_amount * 100, 0, [], solutions, best_cost) end_time = time.perf_counter() duration = end_time - start_time with open("CORRECT_SolutionsWhichImproveIncrementally.txt", "w") as file: file.write(str(solutions)) file.write("\nPrevious Program 3 execution time: " + str(duration_prg3)) file.write("\nModified Program 3 execution time: " + str(duration)) # for solution in solutions: # file.write(",".join(map(str, solution)) + "\n") print("Previous Program 3 execution time: " + str(duration_prg3) + "\n") print("Modified Program 3 execution time: " + str(duration) + "\n") print("Total solutions displayed:", len(solutions)) if __name__ == "__main__": main()