Files
UE6-Mobilities_And_Smart_Ci…/TD2-8_Make_ChangePrograms/prg5.py
2023-10-09 11:15:06 +02:00

82 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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()