So here is a currency problem which calculates the fewest amount of coins to carry. There are 4 different kinds of coins (1 cent, 5 cent, 10 cent, and 25 cent). So when I ran the program the result gave me this:
?- questionFour(Coins, X).
Coins = [4, 1, 2, 3]
X = 10
Yes (0.03s cpu)
Found a solution with cost 10
Found no solution with cost 4.0 .. 9.0
The instructions state: "We want to carry as few coins as possible in the pockets but we also want to make sure that those coins can meet the request of any amount from 1 to 99 cents." So, when I calculated the total, it resulted in 104 cents. How can I make the total amount of cents in between 1 to 99 cents? I'm not sure if what I did was right or I need to add more code to this...
questionFour(Coins, Min) :-
initiatingcoinsquestionFour(Values, Coins),
coin_cons(Values, Coins, Pockets),
Min #= sum(Coins),
minimize((labeling(Coins), check(Pockets)), Min).
initiatingcoinsquestionFour(Values, Coins) :-
Values = [1, 5, 10, 25],
length(Coins, 4),
Coins :: 0..99.
coin_cons(Values, Coins, Pockets) :-
( for(Price, 1, 99),
foreach(CoinsforPrice, Pockets),
param(Coins, Values)
do
price_cons(Price, Coins, Values, CoinsforPrice)
).
price_cons(Price, Coins, Values, CoinsforPrice) :-
( foreach(V, Values), foreach(C, CoinsforPrice), foreach(Coin, Coins),
foreach(Prod, ProdList)
do
Prod = V*C,
0 #=< C,
C #=< Coin
),
Price #= sum(ProdList).
check(Pockets) :-
( foreach(CoinsforPrice, Pockets)
do
once(labeling(CoinsforPrice))
).
I'm not sure if what I did was right, but I would like your opinion about this... Thank you!