git-subtree-dir: software/mza git-subtree-split: f970a59b177c13ca3dd8aaef8cc6681d83b7e813
28 lines
1.2 KiB
MiniZinc
28 lines
1.2 KiB
MiniZinc
include "fzn_writes_seq.mzn";
|
|
include "fzn_writes_seq_reif.mzn";
|
|
|
|
/** @group globals.array
|
|
Creates a new array \a O from an input array \a I with a sequence of changes at positions \a P to take values \a V
|
|
|
|
\a I is an array of integers
|
|
\a O is an array of integers with same index set as \a I
|
|
\a P is an array of index values in \a I
|
|
\a V is an array of integer values
|
|
*/
|
|
predicate writes_seq(array[int] of var int: I, array[int] of var int: P,
|
|
array[int] of var int: V, array[int] of var int: O) =
|
|
assert(index_set(O) = index_set(I),"writes: index set of I must be same as O") /\
|
|
assert(index_set(P) = index_set(V),"writes: index set of P must be same as V") /\
|
|
fzn_writes_seq(I, P, V, O);
|
|
|
|
function array[int] of var int: writes_seq(array[int] of var int: I,
|
|
array[int] of var int: P,
|
|
array[int] of var int: V) =
|
|
let {
|
|
array[index_set(I)] of var int: O;
|
|
constraint assert(index_set(P) = index_set(V),"writes: index set of P must be same as V");
|
|
constraint fzn_writes_seq(I,P,V,O);
|
|
} in O;
|
|
|
|
%-----------------------------------------------------------------------------%
|