i gave it a try but it works only for N=3 :)
class fin_array;
int N = 3;
rand int arr1[];
rand int arr2[];
constraint c1 {arr1.size() == 2*N;}
constraint c2 {arr2.size() == 2*N;}
constraint c3 {
// repeat each item twice
foreach(arr1[i])
if(i%2==1)
arr1[i] == arr1[i-1];
else
arr1[i] == (i/2)+1;
}
constraint c4 {
foreach(arr2[i])
arr2[i] inside {arr1};
// make sure arr2 has only 2 items of each number
foreach(arr2[i])
arr2.sum(d1) with (int'(d1==arr2[i])) inside {0,2}; // had to use 0 to deal with repeated items
// set distance between repeating numbers
foreach(arr2[i])
if ((i + arr2[i] + 1) < arr2.size()) // to avoid overflow
arr2[i] == arr2[i + arr2[i] + 1];
}
endclass
module top;
fin_array a1;
initial begin
a1= new();
a1.randomize();
$display("array1=%p array2=%p", a1.arr1, a1.arr2);
end
endmodule
run
array1=‘{1, 1, 2, 2, 3, 3} array2=’{2, 3, 1, 2, 1, 3}