/* Simple money change problem in Picat. Model created by Hakan Kjellerstrand, hakank@gmail.com See also my Picat page: http://www.hakank.org/picat/ */ import cp. main => go. go => problem(1,Value, Coins), solveit(Value,Coins). go2 => problem(2,Value, Coins), solveit(Value,Coins). solveit(Value,Coins) => L = findall(X, $money(Value, Coins, X)), writeln(L), writeln(len=L.length), nl. scalar_product(A, X, Product) => Product #= sum([S : I in 1..A.length, S #= A[I]*X[I]]). money(Value, Coins, X) => N = length(Coins), X = new_list(N), X :: 0..Value, scalar_product(Coins, X, Value), solve(X). % problem(Problem, Value, Coins). problem(1, Value, Coins) => Value = 100, Coins = [100,50,25,10,5,1]. problem(2, Value, Coins) => Value = 100, Coins = [100,50,25,10,5,2,1].