Can someone help me with the code for the below question.
This is one of the interview questions asked to a friend.
Given an integer n, create an array such that each value is repeated twice.
For example;
n=3->[1,1,2,2,3,3]
n=4->[1,1,2,2,3,3,4,4]
After creating it, find a permutation such that each number is spaced in such a way that they are at a “their value” distance from the second occurrence of the same number.
For example: n=3 → This is the array - [1,1,2,2,3,3]
Your output should be [3,1,2,1,3,2]
The second 3 is 3 digits away from the first 3.
The second 2 is 2 digits away from the first 2.
The second 1 is 1 digit away from the first 1.
Return any 1 permutation if it exists.
Empty array if no permutation exists.
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