問題
1円硬貨,5円硬貨,10円硬貨を合計で15枚,それぞれを1枚以上持っている. 金額の合計は90円である. それぞれの硬貨を何枚持っているか?
回答
example1.lp
{coin_1yen(1..15)}=1.
{coin_5yen(1..15)}=1.
{coin_10yen(1..15)}=1.
:- not 15 = X + Y + Z, coin_1yen(X), coin_5yen(Y), coin_10yen(Z).
:- not 90 = X + 5*Y + 10*Z, coin_1yen(X), coin_5yen(Y), coin_10yen(Z).
解説
{coin_1yen(1..15)}=1.
は、「coin_1yen
は1~15のいずれか一つが真」という意味
:-
が先頭にくる場合は、制約であり、
:- not 15 = X + Y + Z, ...
の場合、15 = X + Y + Z
が必須条件になる。
参考
Coprisによる制約プログラミング入門
https://potassco.org/
https://qiita.com/yutaro-t/items/3a361aef5f9610ae4b8e