問題
以下のユーロ硬貨を持っているとする(総和は148セントになる)。
20セント硬貨 4枚
10セント硬貨 4枚
5セント硬貨 4枚
2セント硬貨 4枚
合計がちょうど93セントになる組合せはあるだろうか?
各3枚の場合はどうか?
回答
example2.lp
num(4).
{coin_2cent(1..X)}=1:- num(X).
{coin_5cent(1..X)}=1:- num(X).
{coin_10yen(1..X)}=1:- num(X).
{coin_20yen(1..X)}=1:- num(X).
:- not 93 = 2*A + 5*B + 10*C + 20*D, coin_2cent(A), coin_5cent(B), coin_10yen(C), coin_20yen(D).
解説
num(4)
で各コインの枚数を指定する。
{coin_2cent(1..X)}=1:- num(X).
は
{coin_2cent(1..4)}=1:- num(4).
となり、2セント硬貨は1~4枚のいずれか使用する、という解釈になる。
参考
Coprisによる制約プログラミング入門
https://potassco.org/