これは、持ち運ぶコインの最小量を計算する通貨の問題です。硬貨は4種類(1セント、5セント、10セント、25セント)あります。そのため、プログラムを実行すると、結果は次のようになりました。
?- 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
説明書には、「ポケットに入れる硬貨はできるだけ少なくしたいが、それらの硬貨が 1 セントから 99 セントまでの任意の金額の要求を満たすことができるようにしたい」と記載されています。というわけで、合計を計算すると104セントになりました。セントの合計金額を 1 ~ 99 セントにする方法を教えてください。私がしたことが正しかったのか、これにさらにコードを追加する必要があるのか わかりません...
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))
).
私がしたことが正しかったかどうかはわかりませんが、これについてあなたの意見を聞かせてください. ありがとう!